我在SUNWappserver上部署了一个webapp-1,需要双向SSL身份验证。我可以为它编写一个java client-1,它工作得很好。
但是,当我将webapp-1的client-2编写为webservice(而不是独立的java程序)时,我遇到了问题。
我在jetty-8服务器上部署client-2。在SSL握手期间,Jetty首先从SUNWappserver获取证书(没关系:找到可信证书),然后Jetty从SUNWappserver(以及证书颁发机构)接收CertificateRequest。然而,Jetty然后只回复一个空的证书链。
.
.
*** CertificateRequest
Cert Types: RSA, DSS
Cert Authorities:
****<CNs removed from here>****
*** ServerHelloDone
*** Certificate chain
***
*** ClientKeyExchange, RSA PreMasterSecret, TLSv1
.
.
我不确定那里发生了什么。我需要在jetty-ssl.xml配置中启用一些设置,以便它回复证书链吗?以下是我现在使用的选项
<Set name="KeyStore"><SystemProperty name="jetty.home" default="." />/server-certs/keyStore.jks</Set>
<Set name="KeyStorePassword">$PASS</Set>
<Set name="KeyManagerPassword">$PASS</Set>
<Set name="TrustStore"><SystemProperty name="jetty.home" default="." />/server-certs/trustStore.jks</Set>
<Set name="TrustStorePassword">$PASS</Set>
<Set name="certAlias">$CORRECT_ALIAS</Set>
<Set name="wantClientAuth">true</Set>
当我使用客户端作为独立的Java应用程序(而不是在jetty服务器上部署)时,我的trustStore和keyStore很好用。当我启动Jetty服务器时,Jetty正在正确读取keyStore和trustStore。我也尝试在启动Jetty服务器时将-Djavax.net.ssl.trustStore等作为jvm选项。
答案 0 :(得分:0)
刚想出发生了什么事。 我在jetty服务器上部署的客户端2是cxf客户端。事实证明,除了在jetty-ssl.xml中设置keyStore和trustStore之外,我还需要为cxf设置它(在java代码中或使用cxf.xml)
否则,客户端(部署在jetty服务器上)没有发出任何错误消息(例如,找不到cxf keyStore等等),只是将空白证书链发送回SUNWappserver。某种消息有助于找出原因。
在相关的说明中,我们还应该在jetty-ssl.xml中设置以下内容。
<Set name="needClientAuth">true</Set>
否则,即使客户端(连接到jetty服务器)向jetty服务器发送了错误证书的空白,服务器也会忽略并且不会给出任何错误消息。