本文将介绍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)
- Android Webview客户端证书,相互身份验证,Webview上的SSL
- android – javax.net.ssl.SSLException:仅在Galaxy Tab 7上不受信任的服务器证书?
- IE浏览器提示证书不受信任的解决方法
- iOS Webview 打开不受信的 URL
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
我使用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?
解决方法
>在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上不受信任的服务器证书?
我有一个连接到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浏览器证书不受信任的问题?请看下文介绍。
解决方法:
1、单击开始——运行,然后输入gpedit.msc打开计算机的本地组策略编辑器;
2、然后打开用户配置选项,在管理模块中的所有设置中找到阻止忽略证书错误;
3、然后双击打开设置,将设置改成“已启用”即可。
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的相关知识,请在本站进行查询。
本文标签: