参数NeedClientAuth / WantClientAuth设置为true的ssl失败,javax.net.ssl.SSLHandshakeException:null cert chain /

时间:2014-04-24 05:10:47

标签: ssl jetty

我已将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

1 个答案:

答案 0 :(得分:3)

这意味着客户端无法提供服务器信任存储所信任的证书,因此它没有发送证书消息。当服务器请求客户端证书时,它还会发送一个可接受的签名者列表,客户端可能只发送由其中一个签名者签名的证书,或者发送一个导致这种证书的链。

如果客户端具有自签名证书,通常会发生这种情况。在这种情况下,您需要从其密钥库导出客户端证书并将其导入您的服务器的信任库。

<Set name="NeedClientAuth">true</Set>
<Set name="WantClientAuth">true</Set>

设置这两者并没有任何意义。它们是相互排斥的。如果这样做,NeedClientAuth可能优先。