在SSL握手期间,当客户端启用SNI扩展时,服务器不会选择并将所需的证书提交给客户端。
我有一个证书链,我已将其导入服务器上的JVM密钥库。
内部中间颁发CA颁发的服务器证书。
主题:CN = myserver.example.com
内部根CA颁发的中间证书。
X509v3 Key Usage:
Digital Signature, Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
自签名的根CA证书。
X509v3 extensions:
X509v3 Key Usage:
Digital Signature, Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
我用“openssl s_client”来测试。
我使用以下命令测试服务器名称指示(SNI)TLS扩展禁用,并且服务器在SSL握手中选择并呈现密钥库中的证书链。这就是我的预期。
openssl s_client -connect myserver.example.com:port
我使用以下命令测试服务器名称指示(SNI)TLS扩展已启用,并且服务器在SSL握手中选择并显示了另一个(默认?)证书。此证书不在密钥库中。我没想到这一点。
openssl s_client -connect myserver.example.com:port -servername myserver.example.com
我正在试图弄清楚为什么服务器没有选择我在密钥库中的证书链,而是在启用SNI扩展时选择“其他”(默认?)证书。任何帮助将不胜感激。
我不知道在SSL握手过程中证书选择如何在服务器上运行。
答案 0 :(得分:0)
我不知道在SSL握手过程中证书选择如何在服务器上运行。
如果客户端未发送SNI,则服务器应使用默认证书进行应答(但某些服务器未配置任何默认值,并且握手失败)。如果客户端发送SNI,则服务器应选择适当的证书。你的问题看起来很奇怪,因为它看起来不像是两种可能性。 尝试将您的JVM(OpenJDK?Oracle?)升级到最新版本,因为自您的版本以来有很多更改,例如Support TLS Server Name Indication (SNI) Extension in JSSE Server。