【问题标题】:ssl with parameters NeedClientAuth/WantClientAuth set to true fails with javax.net.ssl.SSLHandshakeException: null cert chain /参数 NeedClientAuth/WantClientAuth 设置为 true 的 ssl 失败并出现 javax.net.ssl.SSLHandshakeException: null cert chain /
【发布时间】:2014-04-24 05:10:46
【问题描述】:

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

我已将根/中间/签名证书添加到服务器密钥库 我还在客户端 IE 浏览器中添加了 root/intermediate

问题 如有配置错误请指教 并且命令正确运行以创建密钥库并安装来自 CA 的签名证书

创建密钥库 keytool -keystore serverdns.keystore -alias server -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

【问题讨论】:

    标签: ssl jetty


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢 我已经将所有相关证书包含在密钥库中。我使用密钥库作为信任库。有没有一种方法可以调试发送到服务器的证书而不执行任何代码更改,而只需修改码头 xml 参数
    • 我告诉过你。也有例外。 没有 证书发送到服务器。至于其余的,如果你真的做了所有必要的事情,你就不会问了。
    • 我正在使用 Internet Explorer,证书安装在中间和根选项卡中。这些选项卡是否默认被视为受托人,或者我将复制到任何其他地方
    • 谢谢我已经创建了类似于服务器的客户端密钥库和证书,并将客户端证书添加到服务器密钥库中,之后它工作正常
    猜你喜欢
    • 2015-05-19
    • 2019-02-13
    • 2019-02-03
    • 2014-03-23
    • 2021-09-12
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多