gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:32 25 4
gpt4 key购买 nike

我目前有一个用于我的 HTTPS 网络服务器的自签名证书。

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

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

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

最佳答案

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


您可以使用空参数初始化大多数安全类以使用默认值。要获取默认的信任管理器,您必须获取可用的信任管理器并选择 mgrs 数组中的第一个来实现 X509TrustManager 接口(interface)。通常情况下,数组只会包含一个元素。

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 协议(protocol)。

关于Java:如何显示一个对话框让用户接受 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1644059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com