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=0curl -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 证书进行身份验证

基于 SSL 的 PHP MySQL。对等证书不匹配

Android ssl:javax.net.ssl.SSLPeerUnverifiedException:没有对等证书(又一次)

SSL 对等证书或 SSH 远程密钥不正确

https 请求curl返回false问题

Spring saml 与 IDP 服务器的集成使名称的 SSL 对等点主机名验证失败:null