我有一个web应用,当通过Netbeans调用时,它运行在Tomcat下。我试图让它在eclipse下运行。配置Tomcat的SSL连接器,由eclipse调用
应用程序正在运行,但其Web服务调用之一失败并显示“握手错误”消息。我已经阅读了关于为Tomcat配置SSL连接器以供使用的不同事情,但我没有得到它的工作。
我的疑惑在于用于证书文件和证书密钥文件的密码。我此刻的以下接口:
<Connector
SSLCertificateFile="c:\Program Files\Java\jdk1.7.0_07\jre\lib\security\csi_keystore.jks"
SSLCertificateKeyFile="c:\Program Files\Java\jdk1.7.0_07\jre\lib\security\jssecacerts"
SSLCipherSuite="RC4-SHA:HIGH:!ADH:!SSLv2:@STRENGTH"
SSLEnabled="true"
SSLPassword="psw1"
SSLProtocol="all" acceptCount="100" disableUploadTimeout="true"
enableLookups="false" executor="tomcatThreadPool" maxThreads="200"
port="443" scheme="https" secure="true"/>
而且从NetBeans中运行时,传递到Tomcat以下参数:
-Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888 -DproxySet=true
-Xms1024m -Xmx1024m -server -Djava.awt.headless=true -XX:NewSize=256m
-XX:MaxNewSize=256m -XX:PermSize=512m -XX:MaxPermSize=512m
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-Djavax.net.ssl.keyStore="C:\Program Files\Java\jdk1.7.0_07\jre\lib\security\csi_keystore.jks"
-Djavax.net.ssl.keyStorePassword=psw2
-Djavax.net.ssl.trustStore="C:\Program Files\Java\jdk1.7.0_07\jre\lib\security\jssecacerts"
-Djavax.net.ssl.trustStorePassword="psw2"
望着Tomcat文档,我没有看到“了SSLCertificateFile “和”SSLCertificateKeyFile“参数在我得到的例子中;那些准确吗?密码是什么?
该文档包含参数“keystore”和“keypass”的示例;那些是等同的吗?还是首选?我还需要密钥文件和密码吗?
=== EDIT ===
好的,我现在明白,JSSE和APR是Tomcat使用SSL通信的不同的实施方式,并且对于每一个的配置是不同的。我确信我们正在使用JSSE; Netbeans的配置是
-Djavax.net.ssl.keyStore="C:\Program Files\Java\jdk1.7.0_07\jre\lib\security\csi_keystore.jks"
-Djavax.net.ssl.keyStorePassword=thePassword
-Djavax.net.ssl.trustStore="C:\Program Files\Java\jdk1.7.0_07\jre\lib\security\jssecacerts"
-Djavax.net.ssl.trustStorePassword="thePassword"
添加到命令行来执行所述服务器(以及其他参数),并且看起来像JSSE参数给我。所以我把下面的连接器插入server.xml中:
<Connector
SSLEnabled="true"
clientAuth="false"
keystoreFile="c:\Program Files\Java\jdk1.7.0_07\jre\lib\security\csi_keystore.jks"
keystorePass="changeit"
maxThreads="200"
port="443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme="https"
secure="true"
sslProtocol="TLS"
enableLookups="false"
/>
,但我没有看到有关“的trustStore”或它的密码有什么。这些参数是否应该在server.xml中?或者你看到我做错了什么?
我已经打开了详细的调试(-Djavax.net.debug=all
);在异常点,我得到的是下面几行:
[write] MD5 and SHA1 hashes: len = 16
0000: 14 00 00 0C C5 D8 0A 7E A5 D1 18 87 5A D6 EE EB ............Z...
Padded plaintext before ENCRYPTION: len = 36
0000: 14 00 00 0C C5 D8 0A 7E A5 D1 18 87 5A D6 EE EB ............Z...
0010: 7D D4 BE 23 3C DB 78 99 10 43 94 45 10 09 20 8A ...#<.x..C.E.. .
0020: C7 41 74 B0 .At.
main, WRITE: TLSv1 Handshake, length = 36
[Raw write]: length = 41
0000: 16 03 01 00 24 5A 3F 83 45 A2 AA 61 7E F6 11 2D ....$Z?.E..a...-
0010: 43 9D 15 A7 46 D7 FC 6B F5 F2 26 BB 3E 35 D5 ED C...F..k..&.>5..
0020: 0D 3F 81 84 6B BF 12 69 48 .?..k..iH
[Raw read]: length = 5
0000: 15 03 01 00 02 .....
[Raw read]: length = 2
0000: 02 28 .(
main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1 ALERT: fatal, handshake_failure
%% Invalidated: [Session-4, SSL_RSA_WITH_RC4_128_SHA]
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
main, called close()
main, called closeInternal(true)
DEBUG:[22:01:36] Could not close WebServiceConnection
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1977)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1093)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1328)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:515)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1090)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
at org.springframework.ws.transport.http.HttpUrlConnection.getRequestOutputStream(HttpUrlConnection.java:84)
,当然,更多的...
你使用什么样的证书的配置Tomcat的更多信息?自签名证书还是CA生成的证书? –
这是我们所称的站点Web服务站点的CA证书。 – arcy
您是否在密钥库中安装了CA根证书和证书? (为“锚”信任您的证书链,你必须输入密钥库中的CA根证书) –