首页 文章

在SSL握手中,如果服务器发送带有空'Cert Authorities'列表的CertificateRequest,我们可以让客户端发送证书

提问于
浏览
3

我目前正在使用Java的SSL客户端,需要与需要客户端身份验证的第三方服务器 Build https连接 . 服务器人员给了我一个受信任的根CA证书,用于签署客户端和服务器证书 . 我把这个证书放在我这边的信任库里 . 服务器人员还具有此根CA证书,用于验证客户端证书 .

当我尝试 Build SSL连接服务器时,我看到当服务器发送它的证书时,握手会很好,我的客户端能够成功验证它 . 但作为“证书请求”消息的一部分,服务器不会在“证书颁发机构”参数中返回任何根CA证书 . 由于这个原因,我的客户端不会将客户端证书发送回服务器,并且握手失败 .

我正在使用WSDL存根编写标准Java代码 . 我正在利用wsdl2Java ant任务生成的wsdl存根 .

所以我的问题是:即使服务器在请求客户端身份验证时发送一个空的“证书颁发机构”列表,我是否可以让我的Java客户端将预先设置的客户端证书发送回服务器 . (我阅读了TLS RFC,我发现服务器发送这样的空列表是合法的,在这种情况下,客户端可以发回它认为合适的任何证书 . 我试图实现完全相同的行为) .

2 回答

  • 1

    有's no point in this. The server still won' t接受它 . 至少它不应该接受它,如果它正在使用常见的任何SSL实现,它很可能赢得了他们调整自己的SSL实现的可能性 .

    问题出在服务器端 . 它配置错误 . 您无法在客户端修复它 . 它应该在 CertificateRequest 消息中向您发送根CA证书或其签名者之一 .

  • 0

    很抱歉回复这个古老的帖子,但我无法抗拒 .

    我看到这种握手工作得很好:

    根据javax.net.debug = all

    *** CertificateRequest
    Cert Types: RSA, DSS, ECDSA
    Supported Signature Algorithms: SHA512withRSA, Unknown (hash:0x6, signature:0x2), SHA512withECDSA, SHA384withRSA, Unknown (hash:0x5, signature:0x2), SHA384withECDSA, SHA256withRSA, Unknown (hash:0x4, signature:0x2), SHA256withECDSA, SHA224withRSA, Unknown (hash:0x3, signature:0x2), SHA224withECDSA, SHA1withRSA, SHA1withDSA, SHA1withECDSA
    Cert Authorities:
    <Empty>
    *** ServerHelloDone
    matching alias: our_client_cert_alias
    *** Certificate chain
    chain [0] = [
    [
      Version: V3
      Subject: CN=
    

    但它可能取决于您的HTTP客户端库以及它如何处理SSL / TLS(重新)协商 . 这是使用Java 8和http://spray.io/documentation/1.2.4/spray-client/

相关问题