gpt4 book ai didi

java - SSLPeerUnverifiedException : peer not authenticated WITH VALID CERTIFICATE

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:22 24 4
gpt4 key购买 nike

我有 Geo Trust 签署的 https 证书。所有浏览器都能很好地打开我的网站。我的应用程序通过 https 授权,大多数时候一切正常。但有时用户无法连接并出现错误:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:126)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:645)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:480)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
at org.greencubes.downloader.Downloader.downloadFile(Unknown Source)
at org.greencubes.lil.Launcher.<init>(Unknown Source)
at org.greencubes.lil.Launcher.main(Unknown Source)

最后一位用户使用的是 windows 7 x86 和 java 1.7_45u。它发生在随机操作系统和随机 java 更新上,我不知道原因。有时它不会发生,但通常如果用户遇到此类错误,则没有任何帮助。

我无法将证书添加到用户的 keystore ,因为这是用户应用程序。

目标url是auth.greencubes.org(空响应必须返回403),你可以查看。

最佳答案

因此,在一位用户的帮助下,我发现了一个问题。卡巴斯基反病毒软件(或者也可能是其他一些防病毒软件/防火墙,ESET NOD 可能是)通过替换 SSL 证书检查加密连接的问题,默认的 java keystore 没有卡巴斯基 CA 的证书(因为它是在安装防病毒软件时生成的) .

第一个解决方案是完全禁用检查加密连接或检查连接(网络防病毒功能)或禁用防病毒。

正确的解决方案是尝试使用 Windows 的 KeyStore,其中 Antiviruses 的 CA 证书是由防病毒软件本身添加的。可以通过设置 JVM 参数来完成:

-Djavax.net.ssl.trustStoreType=Windows-ROOT

(必须是“Windows-ROOT”,而不是“Windows-MY”!)

或者通过在应用程序启动时执行此代码(最好在 main() 函数中):

System.setProperty("javax.net.ssl.trustStoreType", "Windows-ROOT");

你只需要确定它是windows系统,所以命令行参数不是通用的解决方案。

此代码可用于确保 Windows keystore 存在且有效:

if(System.getProperty("os.name").toLowerCase().contains("windows")) {
try {
KeyStore ks = KeyStore.getInstance("Windows-ROOT");
ks.load(null, null);
System.setProperty("javax.net.ssl.trustStoreType", "Windows-ROOT");
} catch(Exception e) {
// Ignore: windows keystore is bad, left default
}
}

关于java - SSLPeerUnverifiedException : peer not authenticated WITH VALID CERTIFICATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711809/

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