我已将xml文件配置为
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.security.SslSelectChannelConnector">
<Set name="Host">
<SystemProperty default="0.0.0.0" name="https.host"></SystemProperty>
</Set>
<Set name="Port">
<SystemProperty default="0" name="https.port"></SystemProperty>
</Set>
<Set name="MaxIdleTime">60000</Set>
<Set name="Acceptors">5</Set>
<Set name="AcceptQueueSize">100</Set>
<Set name="StatsOn">true</Set>
<Set name="Keystore"><SystemProperty default="." name="java.config"></SystemProperty>/mykeystore.keystore</Set>
<Set name="KeyPassword">password</Set>
<Set name="Password">password</Set>
<Set name="NeedClientAuth">true</Set>
<Set name="WantClientAuth">true</Set>
</New>
</Arg>
</Call>
当NeedClientAuth设置为false时,我可以打开https://server.com:50881/admin/
当NeedClientAuth设置为true时,如上面的参数所示,它失败并显示错误
259498 2014-04-23 12:02:23,881 [825245763@qtp-1957835280-3] WARN org.mortbay.log - javax.net.ssl.SSLHandshakeException: null cert chain
260138 2014-04-23 12:02:24,521 [825245763@qtp-1957835280-3] WARN org.mortbay.log - javax.net.ssl.SSLHandshakeException: null cert chain
260689 2014-04-23 12:02:25,072 [825245763@qtp-1957835280-3] WARN org.mortbay.log - javax.net.ssl.SSLProtocolException: handshake alert: no_certificate
我已将root / intermediate / signed证书添加到服务器密钥库 我还将root / intermediate添加到客户端IE浏览器
问题 如果有任何配置错误,请建议 和命令正确运行以创建密钥库并从CA安装签名证书
创建密钥库keytool -keystore serverdns.keystore -alias服务器 -genkey -keyalg RSA -keysize 2048
创建CSR keytool -certreq -alias server -keystore serverdns.keystore -file server.csr
安装签名证书keytool -import -trustcacerts -alias server -keystore serverdns.keystore -file signedcert.der.cer
答案 0 :(得分:3)
这意味着客户端无法提供服务器信任存储所信任的证书,因此它没有发送证书消息。当服务器请求客户端证书时,它还会发送一个可接受的签名者列表,客户端可能只发送由其中一个签名者签名的证书,或者发送一个导致这种证书的链。
如果客户端具有自签名证书,通常会发生这种情况。在这种情况下,您需要从其密钥库导出客户端证书并将其导入您的服务器的信任库。
<Set name="NeedClientAuth">true</Set>
<Set name="WantClientAuth">true</Set>
设置这两者并没有任何意义。它们是相互排斥的。如果这样做,NeedClientAuth
可能优先。