Java:如何显示一个对话框,让用户接受SSL证书

我目前正在为我的HTTPS网络服务器提供自签名证书.

在我的java程序中有一个SSLSocketFactory,它将为Web服务器创建一个套接字. sun的默认实现会阻止自签名证书.使用自己的X509TrustManager实现,我只能检查证书的日期是否有效.

是否有可能让默认实现检查有效性(日期和主机名,…),是否无法显示一个对话框让用户接受此证书?

我发现的每个代码到目前为止只禁用了ssl检查并接受了每个无效的证书.

解决方法:

我实际上没有尝试过这个,但为什么你不能实现自己的信任管理器,它首先委托默认信任管理器来检查证书是否有效,如果没有,询问用户是否仍然想接受证书?

您可以使用null参数初始化大多数安全类以使用默认值.要获取默认信任管理器,您必须获取可用的信任管理器并选择mgrs阵列中的第一个以实现X509TrustManager接口.通常,阵列只包含一个元素.

TrustManagerFactory trustmanagerfactory = 
     TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustmanagerfactory.init((KeyStore)null);
TrustManager[] mgrs = trustmanagerfactory.getTrustManagers();

在使用自己的扩展包装默认信任管理器之后,必须初始化SSL上下文并从中获取套接字工厂:

SSLContext sslContext=SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null, new TrustManager[] {myTm}, null);
SSLSocketFactory sf = sslContext.getSocketFactory();

然后使用此套接字工厂创建新的客户端套接字或将其传递给HttpsURLConnection.setDefaultSSLSocketFactory,以使用您自己的信任管理器在URL中使用https协议.

上一篇:java – 证书注册过程


下一篇:java – 在富客户端(而不是Web)中实现单点登录?