SSL 证书在 chrome 中有效,但在 openssl s_client 或 curl 中无效

SSL 证书在 chrome 中有效,但在 openssl s_client 或 curl 中无效

几天前,Google Chrome 更新至版本 58 后,我的自签名证书开始失效。它抱怨缺少subjectAltNames。我做了一些研究,尝试了一些建议(但不起作用),但后来发现这个帖子,这是唯一一个我可以工作的东西。

或者说我有吗?

耶,chrome 现在已经接受我新生成并导入的证书了,我就可以开始了。

直到,我点击了我的 Web 应用程序中的一个页面PHP,该页面需要从同一台开发机器上的另一个微型 Web 服务加载数据。

stream_socket_client():SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:14090086:SSL 例程:ssl3_get_server_certificate:

我已经在 Google 上搜索并研究这个问题大约 4 个小时了,但就是无法理解。

问题

curl为什么 chrome 会接受我的证书。但是,诸如 之类的工具openssl s_client都给我unable to verify the first certificateinvalid certificate?我尝试将证书作为参数传递,但显然仍然无效。

使用 curl 和 openssl 进行调试并将证书文件作为参数传递时仍然出现此错误

SSL 证书验证结果:无法获取本地颁发者证书(20),

我想今天结束的时候我就会完全秃顶了。

笔记

  • 虚拟机是我的本地开发环境,因此我确实有多个具有自己的证书和密钥的域

  • VM 位于 IP 192.168.33.10。这意味着 chrome 无法访问 localhost。但是 curl 和 openssl s_clinet 正在尝试访问 locahost

  • 服务器是运行 ubuntu 14.04 的虚拟机

  • 使用 MMC(Microsoft 管理控制台)在主机上安装自签名证书

  • 错误肯定是来自于尝试访问网络服务的客户端类。

  • 我尝试将证书作为参数传递但仍然无效。

  • 我完全知道我可以将验证对等体设置为 false 或者将 --insecure 传递给请求,但我没有从中学到任何东西。

  • SSL 会话:协议:TLSv1.2

  • 运行sudo dpkg-reconfigure ca-certificates以更新证书

  • 已经跑了sudo update_ca_ccertificates

  • 我的沮丧程度已达到 9000

恢复更新

我重新生成了新证书,并关闭了 v3 扩展,然后返回 chrome 告诉我证书subjectAltName缺失,但 curl 可以正常工作。我需要弄清楚如何生成 curl 和 chrome 都能接受的证书。

答案1

找一个更清晰的教程有一个更简单的openssl.conf。在我最初尝试添加SANs 时,我必须在 conf 中取消注释额外的行,这些行会向证书添加额外的信息,从而导致冲突。遵循此模板,我的证书就可以正常工作:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = MN
localityName = Locality Name (eg, city)
localityName_default = Minneapolis
organizationalUnitName  = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max  = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = kb.example.com
DNS.2 = helpdesk.example.org
DNS.3 = systems.example.net
IP.1 = 192.168.1.1
IP.2 = 192.168.69.14

感谢您的评论@garethTheRed。您的评论帮助我重新思考了调试此问题的方法。

即使在这里开始一篇文章也能帮助我阐述我所尝试过的方法,并帮助大脑思考更多可能的解决方案。

相关内容