【问题标题】:javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated in netbeansjavax.net.ssl.SSLPeerUnverifiedException:对等体未在 netbeans 中进行身份验证
【发布时间】:2017-05-08 12:25:14
【问题描述】:

我正在使用 HttpClient-4.0.3 并且已经在服务器上添加了证书。命令如下:

keytool -import -file "C:\Users\apex\Downloads\RootCABangladesh2016.cer" -keystore "C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\cacerts" -alias "sds certificate"

但我仍然遇到错误。

我已阅读现有问题,说要添加 TrustManager (X509TrustManager),但根据我的想法,这不是解决方案。

例外情况如下:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:431)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)   
    at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:399)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at jsonParser.JSONParser.makeHttpRequest(JSONParser.java:54)
    at powersms.SendSms.sendSms(SendSms.java:44)
    at powersms.SendSms.run(SendSms.java:32) 

I have tried this solution . But this is not working for me .

我已经通过这个命令检查了过期日期。

keytool -list -v -alias "sds certificate" -keystore "C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\cacerts" -storepass "changeit" | grep "Valid from:"

但这告诉我:

Valid from: Wed Dec 21 16:43:56 BDT 2016 until: Mon Dec 21 16:43:56 BDT 2026

我已经添加了 jvm 参数。

-Djavax.net.debug=ssl:handshake

然后我去这个输出:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:431)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:399)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at jsonParser.JSONParser.makeHttpRequest(JSONParser.java:54)
    at powersms.SendSms.sendSms(SendSms.java:44)
    at powersms.SendSms.run(SendSms.java:32)
%% Invalidated:  [Session-1, TLS_RSA_WITH_AES_128_CBC_SHA]
Thread-0, SEND TLSv1 ALERT:  fatal, description = certificate_unknown
Thread-0, WRITE: TLSv1 Alert, length = 2
Thread-0, called closeSocket()
Thread-0, handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Thread-0, IOException in getSession():  javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Buffer Error  Error converting result java.lang.NullPointerException
JSON ParserError parsing data org.json.JSONException: A JSONObject text must begin with '{' at character 0
Json is null

【问题讨论】:

  • 你是对的。这不是一个解决方案。解决方案是确保服务器的证书由公认的 CA 签名,或者将其导入您的信任库。您似乎已经完成了前 if 服务器的证书由别名为“sds certificate”的证书签名。
  • 我能做什么?
  • 我已经导入证书了。

标签: java ssl netbeans apache-httpclient-4.x


【解决方案1】:

当您尝试连接到安全(即 https)URL 时,HttpClient 存在一段时间的问题。不过,HttpClient 中有此类 EasySSLProtocolSocketFactory,它允许您创建接受自签名证书的 sockets。您可以尝试按照文档中的说明使用它-EasySSLProtocolSocketFactory

不确定它是否能解决您的问题,并且不太鼓励在生产中使用它。但你绝对可以试一试,看看它是如何出现的!

【讨论】:

  • 尝试后我会告诉你的。谢谢你的回答。
  • 很高兴它有帮助!
猜你喜欢
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多