GVKun编程网logo

JavaFX WebView无法使用不受信任的SSL证书运行(无法使用javac)

26

本文将介绍JavaFXWebView无法使用不受信任的SSL证书运行的详细情况,特别是关于无法使用javac的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及

本文将介绍JavaFX WebView无法使用不受信任的SSL证书运行的详细情况,特别是关于无法使用javac的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Android Webview客户端证书,相互身份验证,Webview上的SSL、android – javax.net.ssl.SSLException:仅在Galaxy Tab 7上不受信任的服务器证书?、IE浏览器提示证书不受信任的解决方法、iOS Webview 打开不受信的 URL的知识。

本文目录一览:

JavaFX WebView无法使用不受信任的SSL证书运行(无法使用javac)

JavaFX WebView无法使用不受信任的SSL证书运行(无法使用javac)

我正在使用JavaFX开发一个简单的嵌入式浏览器:

final WebView browser = new WebView();
final WebEngine webEngine = browser.getEngine();

当我webEngine用来加载任何http网站时,它可以正常工作:

webEngine.load("http://google.es");

尽管如此,如果我尝试使用不受信任的证书(我自己的ssl证书)加载网站,webEngine则无法正常工作,并且在浏览器中出现白屏。

有什么方法可以(自动)信任我的ssl证书?

Android Webview客户端证书,相互身份验证,Webview上的SSL

Android Webview客户端证书,相互身份验证,Webview上的SSL

我有一个网页,需要Mutual auth加载页面.
我使用ERROR_Failed_SSL_HANDSHAKE获得onReceivedError().在Webkit中打印日志“无法建立安全连接”.
我已经广泛搜索但找不到答案.有几个帖子但没有结论.
我尝试了 here发布的所有3个解决方案.
可能起作用的解决方案是: –
解决方案1:
无论如何都使用ClientcertrequestHandler(它被标记为隐藏,但显然仍然可用):

所以我修改了android.jar以包含内部API来覆盖onReceivedClientcertrequest()
但我没有在运行时获得回调.任何第三方浏览器都是如此.我尝试在标准浏览器中加载相同的网页.我在UI上收到一个回调,要求用户选择一个客户端证书.

所以似乎只有系统浏览器应用程序可以从Webkit获取onReceivedClientcertrequest()的回调.

对于iOS平台,Webview也无法直接加载网站.但是使用NSURL进行HTTPS连接,
将客户端证书保留在内存中一段时间​​,Webview可以成功加载此页面.

在Android上,我通过注册加载客户端和服务器证书的SSLSocketFactory成功设置了HTTPS通信.
我可以使用它进行REST API调用.但是,与iOS不同,我找不到Android webview可以使用客户端证书进行Mutual auth的方法.

我认为平台应该支持在Webview上进行相互认证,这是安全性的基本要求之一.这个问题有没有更新?

编辑1:

根据我在下面给出的答案,我在Android 4.0到4.3上工作了.
Hoverer,现在在Android 4.4上,似乎WebViewClientClassicExt类本身被删除了.
知道在这种情况下可以做些什么吗?为什么Android不允许在webview中设置ClientCertificates?

解决方法

所以我可以让这件事工作到4.3

>在Android 4.0和4.1上,通过覆盖扩展WebViewClient的类的onReceivedClientcertrequest()
>在4.2,4.3中,通过覆盖扩展WebViewClientClassicExt的类的onReceivedClientcertrequest().

我设置了私钥和证书ClientcertrequestHandler proceed()方法.

需要Android 4.4及更高版本的修补补丁

EDITED
解决方案uptil 4.3如下

WebviewClientCustom.java

public class WebViewClientCustom extends WebViewClient {
    private X509Certificate[] certificatesChain;
    private PrivateKey clientCertPrivateKey;
    private IWebViewCallbacks webviewCallbacks;

    public WebViewClientCustom(IWebViewCallbacks webviewCallbacks) {
        this.webviewCallbacks = webviewCallbacks;
    }

    public void onReceivedClientcertrequest(WebView paramWebView,ClientcertrequestHandler paramClientcertrequestHandler,String paramString) {
        PrivateKey localPrivateKey = this.clientCertPrivateKey;
        X509Certificate[] arrayOfX509Certificate = this.certificatesChain;
        paramClientcertrequestHandler.proceed(localPrivateKey,arrayOfX509Certificate);
    }

    public void onReceivedError(WebView view,int errorCode,String description,String failingUrl) {
        webviewCallbacks.onReceivedError( view,errorCode,description,failingUrl);

        super.onReceivedError( view,failingUrl);
    }


    public void setClientCertificate(PrivateKey paramPrivateKey,X509Certificate[] paramArrayOfX509Certificate) {
        this.clientCertPrivateKey = paramPrivateKey;
        this.certificatesChain = paramArrayOfX509Certificate;
    }

    public boolean shouldOverrideUrlLoading(WebView paramWebView,String paramString) {
        return webviewCallbacks.shouldOverrideUrlLoading(paramWebView,paramString);


    }

    @Override
    public void onPageStarted(WebView view,String url,Bitmap favicon) {
        // Todo Auto-generated method stub

        webviewCallbacks.onPageStarted(view,url,favicon);
        super.onPageStarted(view,favicon);
    }

    @Override
    public void onPageFinished(WebView view,String url) {
        // Todo Auto-generated method stub

        webviewCallbacks.onPageFinished(view,url);
        super.onPageFinished(view,url);
    }

}

WebViewClientCustomExt.java

public class WebViewClientCustomExt extends WebViewClientClassicExt {
    private X509Certificate[] certificatesChain;
    private PrivateKey clientCertPrivateKey;
    private IWebViewCallbacks webviewCallbacks;

    public WebViewClientCustomExt(IWebViewCallbacks webviewCallbacks) {
        this.webviewCallbacks = webviewCallbacks;
    }

    public void onReceivedClientcertrequest(WebView paramWebView,failingUrl);
    }



    public void setClientCertificate(PrivateKey paramPrivateKey,paramString);
    }

    @Override
    public void onPageStarted(WebView view,Bitmap favicon) {
        // Todo Auto-generated method stub


        webviewCallbacks.onPageStarted(view,url);
    }
}

用法

*/
    private void setCertificateData() {
        // Todo Auto-generated method stub
        try {
            KeyStore clientCertKeystore = KeyStore.getInstance("pkcs12");
            String clientCertPkcsPassword = getPkcsPassword();
            byte[] pkcs12;

            pkcs12 = getAuthP12Data();
            ByteArrayInputStream pkcs12BAIS = new ByteArrayInputStream(pkcs12);

            clientCertKeystore.load(pkcs12BAIS,clientCertPkcsPassword.tochararray());
            String alias = (clientCertKeystore.aliases().nextElement());
            Certificate[] arrayOfCertificate = clientCertKeystore
                    .getCertificateChain(alias);
            X509Certificate[] arrayOfX509Certificate = new X509Certificate[arrayOfCertificate.length];
            for (int i = 0; i < arrayOfCertificate.length; i++) {
                arrayOfX509Certificate[i] = (X509Certificate) arrayOfCertificate[i];
            }
            PrivateKey localPrivateKey = (PrivateKey) clientCertKeystore
                    .getKey(alias,clientCertPkcsPassword.tochararray());
            if (android.os.Build.VERSION.SDK_INT <= 16) {
                WebViewClientCustom webvviewClient = new WebViewClientCustom(
                        myWebViewClient);
                webvviewClient.setClientCertificate(localPrivateKey,arrayOfX509Certificate);
                webView.setWebViewClient(webvviewClient);

            } else {
                WebViewClientCustomExt webvviewClient = new WebViewClientCustomExt(
                        myWebViewClient);
                webvviewClient.setClientCertificate(localPrivateKey,arrayOfX509Certificate);
                webView.setWebViewClient(webvviewClient);
            }
            // webView.getSettings().setJavaScriptEnabled(true);

        } catch (Exception e) {
            // Todo Auto-generated catch block
            e.printstacktrace();
        }

    }

android – javax.net.ssl.SSLException:仅在Galaxy Tab 7上不受信任的服务器证书?

android – javax.net.ssl.SSLException:仅在Galaxy Tab 7上不受信任的服务器证书?

我有一个连接到HTTPS Web服务的应用程序.我没有在我的应用程序中包含任何证书,因为HTTPS已通过VeriSign认证.因此,即使没有在设备中包含证书,它也应该是默认的可信证书.

我能够使用三星galaxy S2连接到它.但是,在三星galaxy Tab 7中,它返回一个错误:javax.net.SSLException:galaxy Tab 7上不受信任的服务器证书.可能是什么问题?即使证书是VeriSign认证的,不同的Android设备是否也会以不同方式信任证书?我该怎么做才能解决这个问题?有没有办法在不修改应用程序的情况下配置Android设备以信任VeriSign?

解决方法:

他们是否运行不同版本的Android?如果这是您控制的网站,则需要确保与证书一起安装了正确的CA捆绑包.至于向Android添加更多根CA …我相信偏好中有一些东西:个人>安全>凭据存储可能会为您提供有关SSL证书的更多选项.

IE浏览器提示证书不受信任的解决方法

IE浏览器提示证书不受信任的解决方法

IE浏览器提示证书不受信任怎么办?如何解决IE浏览器证书不受信任的问题?请看下文介绍。

解决方法:

1、单击开始——运行,然后输入gpedit.msc打开计算机的本地组策略编辑器;

2、然后打开用户配置选项,在管理模块中的所有设置中找到阻止忽略证书错误;

3、然后双击打开设置,将设置改成“已启用”即可。

iOS Webview 打开不受信的 URL

iOS Webview 打开不受信的 URL

    在我们开发过程中经常会碰到直接访问开发人员的私有地址, 这样在 app 上是无法打开指定的网页的。

   在 iOS 中需要对 WKWebView 进行如下设置:

1、在工程的 Plist 文件中添加一下选项

   App Transport Security Settings -> Allow Arbitrary Loads in Web Content  设置为 YES ,如下图

 

2、 WKWebView 指定的代理类中,实现协议 WKNavigationDelegate

- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
NSURLCredential *card = [[NSURLCredential alloc]initWithTrust:challenge.protectionSpace.serverTrust];
completionHandler(NSURLSessionAuthChallengeUseCredential,card);
}
}

 

  通过以上方法本人已经验证可以跳转私有 IP 地址 Web。

 

今天的关于JavaFX WebView无法使用不受信任的SSL证书运行无法使用javac的分享已经结束,谢谢您的关注,如果想了解更多关于Android Webview客户端证书,相互身份验证,Webview上的SSL、android – javax.net.ssl.SSLException:仅在Galaxy Tab 7上不受信任的服务器证书?、IE浏览器提示证书不受信任的解决方法、iOS Webview 打开不受信的 URL的相关知识,请在本站进行查询。

本文标签: