我有一个Java客户端,它使用Apache HttpClient 4.1库向不需要身份验证的服务器发出HTTP请求 . 如果我用浏览器或curl调用该服务器,则接受该请求 . 但是,从我的Java客户端,我看到以下内容(打开调试时)...
main, WRITE: TLSv1 Handshake, length = 81
main, WRITE: SSLv2 client hello message, length = 110
main, handling exception: java.net.SocketException: Connection reset
所以我的客户似乎在TLSv1中进行了握手,但随后又发送了一个服务器似乎不喜欢的SSLv2 ClientHello . 根据this post,似乎服务器不应该拒绝SSLv2 ClientHello . 可能是这个服务器特定的东西让它拒绝这个ClientHello?
我也注意到在 Build 连接之初的下面的日志输出....
keyStore is :
keyStore type is : jks
keyStore provider is :
init keystore
init keymanager of type SunX509
trustStore is: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts
trustStore type is : jks
trustStore provider is :
init truststore
adding as trusted cert:
Subject: CN=Secure Global CA, O=SecureTrust Corporation, C=US
然后它继续将各种实体添加为“受信任的证书” .
我注意到的最后一个例外是......
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
那么我的(客户)方面的证书(或缺少)是否会出现问题?但根据this post我认为客户不需要提供证书 .
底线是我不清楚问题的根源是SSLv2客户端Hello还是证书或两者兼而有之?
1 回答
我有类似你的问题 . 这就是我解决它的方式 . 它可能无法满足您的确切问题,但请尝试一下 .