我有两个场景用于创建带有客户端验证的ssl连接。
1-我的android客户端和服务器拥有由同一个CA签名的证书,启用了服务器上的客户端验证。我在信任管理器密钥库中加载CA证书,在密钥管理器密钥库中加载客户端key+cert+ca,并将其传递给ssl.init(密钥管理器、信任管理器)。它工作得很好,双方互相交换和验证证书。
2-现在我有不同CA签署的客户端和服务器证书,比如由ServerCA签署的服务器证书和由ClientCA签署的客户端证书。我重复上述过程,但客户端从来不发送任何证书时,服务器要求,为什么?
发布于 2012-08-28 14:34:13
客户端证书由服务器在证书请求消息中的TLS握手过程中请求,该握手包含服务器愿意接受的证书颁发机构列表(其主题DNs)。
客户端通常使用此方法来选择要发送的证书(并选择是否发送证书):如果具有证书链的客户端可以指向列表中的CA之一,它将使用该链。
使用openssl s_client -connect the.host.name:443应该在包含服务器证书的部分之后向您显示可接受的CA列表。
如果您的客户端没有指向其中一个的链,则不太可能使用客户端证书。在这种情况下,类似Java的客户端不使用客户端证书的一个常见原因是在密钥库中导入了客户机证书而没有其中间证书(请参阅这个问题)。另一个潜在的原因可能是该服务器根本不了解颁发该其他客户端证书的CA (有或没有中间CA证书)。(我假设您的服务器不会发送空列表。)
https://stackoverflow.com/questions/12156404
复制相似问题