尝试通过Tomcat进行SSL连接但通过Java Main测试应用程序成功连接时,bad_certificate

时间:2019-10-15 18:42:08

标签: java ssl tomcat sslhandshakeexception

我有一个Java测试应用程序,它与远程服务器建立了Restful SSL连接/调用,但是在Tomcat下从servlet运行的相同代码返回Bad_Certificate错误。

在引用我通过System.setProperty(“ javax.net.ssl ....?”语句指定的keyStore和trustStore获取文件位置和密码后,测试应用程序版本成功连接到远程。此测试程序是独立的具有主要方法的简单类,该方法成功建立连接并获得响应。但是,如果将相同的代码移到在Tomcat上运行的servlet上,则会收到“ SSLHandshakeException” Bad_Certificate错误,而ssl:all:verbose调试跟踪不会提供任何帮助,因为它似乎还没有进入握手阶段。仅当我未设置指向证书的系统属性时,才可以在测试应用程序上重新创建此错误。当设置System.setProperty被覆盖时,我也尝试过将位置放置在web.xml中,但这也没有任何影响。

我的代码不容易获得,因为它位于防火墙之后,不允许我复制任何内容。但是我会用手指指你想验证的任何东西。

OS:Redhat 7.4 雄猫:7.0.76 Java:JDK 10.0.2

javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
java.base/sun.security.ssl.Alerts.getSSLException(Alerts.java 198)
java.base/sun.security.ssl.Alerts.getSSLException(Alerts.java 159)
java.base/sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2046)
java.base/sun.security.ssl.SSLSocketImpl.processInputRecord(SSLSocketImpl.java:1207)
java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1074)
java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1402)
java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1429)
java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)   
java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)
java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1581)
java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509)
java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:329)

由于在Tomcat配置文件中将调试添加到JAVA_OPTS中,因此我将获得更多详细信息。在昨天提供的stacktrace之前,现在正在握手。握手的最后部分如下所示:

update handshake state: finished
upcoming handshake states: server change_cipher_spec[-1]
upcoming handshake states: server finished [20]
ajp-bio-8009-exec-1, WRITE TLSv1.2 Handshake, length = 32
ajp-bio-8009-exec-1, READ TLSv1.2 Alert, length = 2
ajp-bio-8009-exec-1, RECV TLSv1.2 ALERT: fatal, bad certificate
%%invalidated: [Session-3 TLS_RSA_WITH_AES_128_CBC_SHA]
ajp-bio-8009-exec-1, call closeSocket()

但是我不确定该怎么办。

0 个答案:

没有答案