SSL:无法从对等证书中获取公用名
Posted
技术标签:
【中文标题】SSL:无法从对等证书中获取公用名【英文标题】:SSL: unable to obtain common name from peer certificate 【发布时间】:2014-07-02 13:24:59 【问题描述】:对不起,我的错误,有两件事必须强调:
The CA cert Common Name must not same to the server/client side cert
The server/client side cert's common name must be same
我正在尝试将自签名证书用于 HTTPS 客户端证书。 但是,有一个问题“”
如您所见,服务器端证书包含Common Name,为什么会出现这个问题?
这是 curl 输出:
即将 connect() 到 127.0.0.1 端口 443 (#0)正在尝试 127.0.0.1... 已连接 输入 PEM 密码: 成功设置证书验证位置: CA 文件:/home/freeman/dev/git/ca_tools/ca_tools/ssl/CA/secure_ca.crt CApath:/etc/ssl/certs SSLv3、TLS 握手、客户端问候 (1): SSLv3、TLS 握手、服务器问候 (2): SSLv3、TLS 握手、CERT (11): SSLv3、TLS 握手、服务器密钥交换 (12): SSLv3、TLS 握手、请求 CERT (13): SSLv3,TLS 握手,服务器完成 (14): SSLv3、TLS 握手、CERT (11): SSLv3、TLS 握手、客户端密钥交换 (16): SSLv3、TLS 握手、CERT 验证 (15): SSLv3,TLS 更改密码,客户端问候 (1): SSLv3,TLS 握手,完成 (20): SSLv3,TLS 更改密码,客户端问候 (1): SSLv3,TLS 握手,完成 (20): 使用 ECDHE-RSA-AES256-SHA 的 SSL 连接 服务器证书: 主题:C=CN; ST=北京; L=北京; O=小米 开始日期:2014-05-14 12:50:20 GMT 有效期:2024-05-11 12:50:20 GMT 关闭连接 #0 SSLv3、TLS 警报、客户端问候 (1):
这里是 #openssl x509 -in server.crt -text -noout
证书: 数据: 版本:1 (0x0) 序列号:15298562268347408844 (0xd44f6953eb0aa1cc) 签名算法:sha1WithRSAEncryption 发行人:C=CN,ST=北京,L=北京,O=OKK,OU=Test,CN=MyComp 有效性 :
【问题讨论】:
您介意发布用于生成 CSR 和生成证书的命令吗? (请不要发布任何关键材料) 【参考方案1】:尝试 CURLOPT_SSL_VERIFYHOST=0 或 curl -k
【讨论】:
禁用 SSL 认证验证通常是一个坏主意,也是一个糟糕的 hack。如果目的是针对 MITMA 提供任何保证,则禁用验证会导致保证失败。 @Mark...我知道,但这正是他所要求的......看,他无论如何都在使用自签名证书! 不幸的是,这种观点太普遍了。所有 CA 的肮脏小秘密是它们的根始终是自签名的。您实际上可以基于自签名根证书构建自己的 CA 和信任链。这适用于系统和网络组件的内部通信,以验证相关各方是否受信任。【参考方案2】:在不知道用于生成 CSR 的数据的情况下,您的 DN 的最后一个组成部分似乎不包含带有目标主机名的 CN 属性。通常,SSL 库客户端只会检查与目标主机名相同的 CN 属性的第一个组件。我会颠倒 DN 顺序并添加一个带有主机名的 CN 属性。
如果您提供有关如何生成 CSR 的更多详细信息,我很乐意帮助您找出解决方法。
【讨论】:
【参考方案3】:来自对等方的服务器证书的主题详细信息是:
主题:C=CN; ST=北京; L=北京; O=小米
发行人主题详细信息是:
C=CN, ST=Beijing, L=Beijing, O=OKK, OU=Test, CN=MyComp Validity
显然这两者是不同的(如果应该尝试任何链接),因为这是我从问题中理解的。
在 curl 错误中看到的任何情况下,都缺少 common-name 属性。 这可能是因为提交的证书从未包含它。
建议您尝试从浏览器打开证书并进行验证。
【讨论】:
以上是关于SSL:无法从对等证书中获取公用名的主要内容,如果未能解决你的问题,请参考以下文章
Curl 中出现错误 - 对等证书无法使用已知 CA 证书进行身份验证
Android ssl:javax.net.ssl.SSLPeerUnverifiedException:没有对等证书(又一次)