Java:如何显示一个对话框,让用户接受SSL证书
-
10-07-2019 - |
题
我目前正在为我的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协议。
不隶属于 StackOverflow