几天前,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 certificate
或invalid 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
。在我最初尝试添加SAN
s 时,我必须在 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。您的评论帮助我重新思考了调试此问题的方法。
即使在这里开始一篇文章也能帮助我阐述我所尝试过的方法,并帮助大脑思考更多可能的解决方案。