我制作了HttpsURLConnection
,如下所示:
try
{
URL url = new URL( host );
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.connect();
logger.debug( httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK );
}
catch ( Exception ex )
{
logger.error( ex.getMessage() );
}
我测试的host
没有有效的证书,所以当我在Eclipse中测试时,它会捕获SSLHandshakeException
,这很好。
但是,当我部署为WebStart时,它不会转到catch子句,而是向我显示警告对话框:
如果用户点击“继续”,则会成功传递connect()
。
无论如何我可以捕获异常,而不是允许用户点击此对话框中的继续吗?
答案 0 :(得分:2)
Java WebStart插入自己的SSLSocketFactory
来自https://docs.oracle.com/javase/tutorial/deployment/webstart/security.html
动态下载HTTPS证书
Java Web Start通常以浏览器的形式动态导入证书 做。为此,Java Web Start使用。设置自己的https处理程序 java.protocol.handler.pkgs系统属性,用于初始化默认值 对于SSLSocketFactory和HostnameVerifier。它设置默认值 使用方法HttpsURLConnection.setDefaultSSLSocketFactory和 HttpsURLConnection.setDefaultHostnameVerifier。
如果您的应用程序使用这两种方法,请确保它们是 在Java Web Start初始化https处理程序后调用, 否则您的自定义处理程序将被Java Web Start替换 默认处理程序。
您可以确保自己定制的SSLSocketFactory和 通过执行以下操作之一来使用HostnameVerifiter:
安装您自己的https处理程序,以替换Java Web Start https 处理程序。在您的应用程序中,调用 HttpsURLConnection.setDefaultSSLSocketFactory或 HttpsURLConnection.setDefaultHostnameVerifier仅在第一个之后 创建https URL对象,该对象执行Java Web Start https 首先处理程序初始化代码。
您可以使用
恢复代码SSLContext context = SSLContext.getInstance("TLS");
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
我没有检查里程如何获得原始的SSLContext,你可能需要深入挖掘。
答案 1 :(得分:2)
要禁用该对话框,请使用以下命令:
connection.setAllowUserInteraction(false);
现在,如果JVM对证书不满意,您应立即获得异常。