HttpsURLConnection显示安全警告对话框而不是捕获异常

时间:2016-11-25 07:00:01

标签: java exception https java-web-start httpsurlconnection

我制作了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子句,而是向我显示警告对话框:

enter image description here

如果用户点击“继续”,则会成功传递connect()

无论如何我可以捕获异常,而不是允许用户点击此对话框中的继续吗?

2 个答案:

答案 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对证书不满意,您应立即获得异常。

相关问题