还有一个神秘的“未经认证的同伴”列表。
我有一个使用4.2 lib的apache httpclient。我已明确设置为信任代码中的所有证书。 我有一个Tomcat服务器(JRE 1.7U45),在Linux上提供请求。服务器有自签名证书。
客户端代码:
private DefaultHttpClient getHttpsClient() {
try {
SSLContext sslContext = SSLContext.getInstance("SSL");
final SSLSocketFactory sf;
sslContext.init(null, new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs,
String authType) {
}
public void checkServerTrusted(X509Certificate[] certs,
String authType) {
}
} }, new SecureRandom());
sf = new SSLSocketFactory(sslContext,
SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme(url.getScheme(), url.getPort(), sf));
ClientConnectionManager cm = new BasicClientConnectionManager(
registry);
return new MyDefaultHttpClient(cm);
} catch (Exception e) {
return new MyDefaultHttpClient();
}
}
仅在“Solaris 5.10”(32位JRE 1.7.0u45)客户端与服务器通信时间歇性地看到此错误。
有时,同一个盒子上的请求会很好,但在其他时候,这只会抛出“Peer Not Authenticate”
我有其他类型的OS客户端,通过电话就可以了
是否有任何建议/指示来研究这个问题?
更多更新: 在服务器上运行ssl调试,我们间歇地看到它抛出 http-bio-8443-exec-7,处理异常:javax.net.ssl.SSLHandshakeException:无效的填充长度:105 http-bio-8443-exec-7,getSession()中的IOException:javax.net.ssl.SSLHandshakeException:无效的填充长度:105
答案 0 :(得分:0)
这是因为JRE 1.7 http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8013059
中存在以下错误另外,apache httpclient 4.2增加了混乱,它掩盖了抛出的实际异常而不是抛出泛型" Peer未经过身份验证"
在tom-cat的server.xml中,对于connector元素,添加cipher属性和非DH密码列表 例如。 密码=" SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"
这解决了这个问题。 希望这对某人有用。
由于