首页 文章

启用SNI扩展的SSL握手 - 服务器上的证书选择

提问于
浏览
0

在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扩展 disabled ,并且服务器在SSL握手中选择并呈现密钥库中的证书链 . 这就是我的预期 .

openssl s_client -connect myserver.example.com:port

我使用以下命令测试服务器名称指示(SNI)TLS扩展 enabled ,并且服务器在SSL握手中选择并显示了另一个(默认?)证书 . 此证书不在密钥库中 . 我没想到这一点 .

openssl s_client -connect myserver.example.com:port -servername myserver.example.com

我试图弄清楚为什么服务器没有选择我在密钥库中的证书链,而是在启用SNI扩展时选择“其他”(默认?)证书 . 任何帮助,将不胜感激 .

我不知道在SSL握手过程中证书选择如何在服务器上运行 .

1 回答

  • 0

    我不知道在SSL握手过程中证书选择如何在服务器上运行 .

    如果客户端未发送SNI,则服务器应使用默认证书进行应答(但某些服务器未配置任何默认值,并且握手失败) . 如果客户端发送SNI,则服务器应选择适当的证书 . 你的问题看起来很奇怪,因为它看起来不像是两种可能性 . 尝试将JVM(OpenJDK?Oracle?)升级到最新版本,因为自版本以来有很多变化,例如Support TLS Server Name Indication (SNI) Extension in JSSE Server .

相关问题