目前我在服务器和客户端上启用相互 SSL 时遇到问题。
在服务器端,我使用启用 ClientAuth 配置 tomcat 并将客户端的证书配置到信任库。
所以在 ssl 握手期间,我可以看到服务器的证书请求:
[java] *** CertificateRequest
[java] Cert Types: RSA, DSS, ECDSA
[java] Supported Signature Algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA256withDSA, SHA224withECDSA, SHA224withRSA, SHA224withDSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA
[java] Cert Authorities:
[java] <CN=https-test.domain.com, O=Domain.com, L= XX, ST=XX, C=US>
我们可以看到服务器正在使用 Subject Distinguish Name 请求证书。但是在客户端,当客户端过滤密钥时,它会将 DN 视为颁发者 DN,请参见此处的代码:http: //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6- b14/sun/security/ssl/SunX509KeyManagerImpl.java#378
所以这会导致一个问题:
[java] Warning: no suitable certificate found - continuing without client authentication
[java] *** Certificate chain
[java] <Empty>
[java] ***
所以握手失败了。
以下是一些证书信息:
Issuer: DC=com, DC=domain, CN=Domain. com Security
Subject: C=US, ST=XX, L=XX, O=Domain.com, CN=https-test.domain.com
我的问题是为什么服务器使用主题 DN 请求客户端证书,但客户端将使用 IssuerDN 过滤?
为了让他们成功连接,我需要使用客户端的父证书配置我的服务器的信任库,其主题 DN 与颁发者相同:DC=com、DC=domain、CN=Domain。com 安全
对此有任何想法吗?我可能对此有一些误解,但仍然想知道为什么。