ssl - 捆绑的 SSL 证书公钥与私钥公钥不匹配
问题描述
我正在尝试将新的 SSL 证书安装到 Traefik。我的证书由第三方 (Setigo) 签名,并通过链提供给我:
-----BEGIN CERTIFICATE-----
[[SNIP - Root CA]]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[[SNIP - Intermediate CA]]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[[SNIP - Intermediate CA]]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[[SNIP - MyServer Cert]]
-----END CERTIFICATE-----
链中的最后一个证书与单个证书匹配。当我将该证书和对应的密钥传递给 Traefik 时,我收到以下错误:
failed to load X509 key pair: tls: private key does not match public key
在线研究,我发现这些命令可以验证证书和私钥的公钥/模数
openssl rsa -modulus -noout -in myserver.key | openssl md5
openssl x509 -modulus -noout -in myserver.crt | openssl md5
当我对链式证书运行它时,结果不匹配。当我针对它匹配的单个证书运行它时。
我无法使用单个证书,因为它没有由受信任的根签名,因此在使用 OpenSSL s_client 时出现以下错误:
openssl s_client -connect myserver:443 -showcerts
verify error:num=20:unable to get local issuer certificate
verify error:num=21:unable to verify the first certificate
我在这里绞尽脑汁,我错过了什么???
解决方案
你的链条错了。您需要反转它并删除根 CA 证书。
服务器认为根 CA 是主证书,它试图根据根 CA 证书加载私钥,这就是您看到该消息的原因。
也不需要根 CA,因为它应该始终在客户端 CA 列表中,因此您将 CA 证书发送给客户端,客户端将忽略它。
IE
-----BEGIN CERTIFICATE-----
[[SNIP - MyServer Cert]]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[[SNIP - Intermediate CA]]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[[SNIP - Intermediate CA]]
-----END CERTIFICATE-----
推荐阅读
- anaconda - 创建 Anaconda 环境时缺少依赖项
- jquery - 有什么方法可以通过类名获取元素的偏移高度
- python - 在 python 中使用 selenium 在流体容器中查找元素
- jenkins - 使用 Jenkins 声明式语法获取秘密文件
- amazon-web-services - 来自 EC2 实例的 AWS / Heptio Authenticator
- c++ - 如何更改 C++ 标准 Eclipse CDT
- linux - 当 FOR 循环出现时,`kill "$!"` 不起作用
- c# - WCF 和 Xamarin 表单
- vb.net - 在 Gridview 和 VB.net 中添加记录后如何更新 gridview?
- facebook - webhook 的 Manage_pages 权限