我已经为localhostCN创建了一个自签名的SSL证书。正如预期的那样,Firefox在最初抱怨后接受了这个证书。然而,Chrome和IE拒绝接受它,即使在将证书添加到Trusted Roots下的系统证书存储之后。尽管当我在Chrome的HTTPS弹出窗口中单击“查看证书信息”时,证书被列为正确安装,但它仍然坚称证书不可信。
我该怎么做才能让Chrome接受证书并停止抱怨?
我已经为localhostCN创建了一个自签名的SSL证书。正如预期的那样,Firefox在最初抱怨后接受了这个证书。然而,Chrome和IE拒绝接受它,即使在将证书添加到Trusted Roots下的系统证书存储之后。尽管当我在Chrome的HTTPS弹出窗口中单击“查看证书信息”时,证书被列为正确安装,但它仍然坚称证书不可信。
我该怎么做才能让Chrome接受证书并停止抱怨?
当前回答
好的,假设你已经创建了一个“有效”的自签名证书。它正确安装在chrome ver 94上。但是当您访问该站点时,您不会得到ssl锁,并且会出现“无效的证书颁发机构”错误。事实上,它是一个有效的证书。但是如果你没有正确浏览网站,你会收到这个错误。我的证书的DNS是DNS1:TFDM,DNS2:TFDM.local,DNS3:172.31.42.251,DNS4:192.168.20.50。
我正在浏览192.168.20.50,它不安全(锁定)。问题是,证书是针对DNS1:TFDM的。因此,我必须输入/etc/hosts文件(centos7)192.168.20.50 TFDM进行解析,然后浏览https://TFDM.问题已解决。您必须正确浏览网站。我以为它会在服务器端解决,但必须在客户端解决。这很容易被忽视,如果其他一切都正确,这可能是你的问题。覆盖安全性和ssl功能会带来麻烦,我认为没有合适的解决方案。如果应用正确,并且遵循Chrome不断更改的规则,自签名证书就可以工作。
其他回答
2021 6月-Windows 10-Chrome v91(SIMPLE)
按照selfsignedcertificate.com上的证书生成说明进行操作:
示例域名:mydomain.local,请将其替换为您的域名。
要生成密钥,请执行以下操作:openssl genrsa-out mydomain.local.key 2048创建仅包含以下内容的配置文件mydomain.local.conf:[要求]区分名称=请求[桑]subjectAltName=DNS:mydomain.local注意:在subjectAltName中,您可以定义更多域(可选),如:subjectAltName=DNS:mydomain.local,DNS:*.mydomain.local,DNS:其他域.local,IP:192.168.1.10创建证书:openssl req-new-x509-key mydomain.local.key-out mydomain.local.crt-days 3650-subj/CN=mydomain.local-extensions SAN-config mydomain.local.conf将证书添加到受信任的根证书颁发机构右键单击mydomain.local.crt文件从上下文菜单中选择安装证书。在弹出窗口中选择本地机器。选择“将所有证书放置在以下存储中”。单击浏览。选择受信任的根证书颁发机构。单击“确定”、“下一步”、“完成”。重新启动Chrome。
单击页面上的任意位置并键入BYPASS_SEQUENCE:
BYPASS_SEQUENCE |
Chrome Version |
---|---|
thisisunsafe |
65 - ? |
badidea |
62 - 64 |
danger |
? - 61 |
您不需要查找输入字段,只需键入它即可。这感觉很奇怪,但它有效。我在Mac High Sierra上试过了。
要再次检查他们是否再次更改,请转到最新的Chromium源代码。此时BYPASS_SEQUENCE如下所示:
var BYPASS_SEQUENCE = window.atob('dGhpc2lzdW5zYWZl');
现在他们把它伪装起来了,但要看到真正的BYPASS_SEQUENCE,您可以在浏览器控制台中运行以下行。
console.log(window.atob('dGhpc2lzdW5zYWZl'));
OR
除了键入短语,您还可以在控制台中粘贴代码部分
sendCommand(SecurityInterstitialCommandId.CMD_PROCEED)
WINDOWS 2017年6月WINDOWS Server 2012
我听从了布拉德·帕克斯的回答。在Windows上,您应该在受信任的根证书颁发机构存储中导入rootCA.pem。
我执行了以下步骤:
openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -newkey rsa:4096 -sha256 -days 1024 -out rootCA.pem
openssl req -new -newkey rsa:4096 -sha256 -nodes -keyout device.key -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 2000 -sha256 -extfile v3.ext
其中v3.ext为:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 192.168.0.2
IP.2 = 127.0.0.1
然后,在我的例子中,我有一个自托管的web应用程序,所以我需要将证书与IP地址和端口绑定,证书应该在我的存储库中,并带有私钥信息,所以我导出为pfx格式。
openssl pkcs12 -export -out device.pfx -inkey device.key -in device.crt
使用mmc控制台(文件/添加或删除管理单元/证书/添加/计算机帐户/本地计算机/确定),我在个人存储中导入了pfx文件。
后来我使用这个命令绑定证书(您也可以使用HttpConfig工具):
netsh http add sslcert ipport=0.0.0.0:12345 certhash=b02de34cfe609bf14efd5c2b9be72a6cb6d6fe54 appid={BAD76723-BF4D-497F-A8FE-F0E28D3052F4}
certhash=证书Thumprint
appid=GUID(您的选择)
首先,我尝试以不同的方式在受信任的根证书颁发机构上导入证书“device.crt”,但仍然收到相同的错误:
但我意识到我应该导入根权限的证书,而不是域的证书。所以我使用mmc控制台(文件/添加或删除管理单元/证书/添加/计算机帐户/本地计算机/OK),在受信任的根证书颁发机构存储中导入了rootCA.pem。
重新启动Chrome,它就可以工作了。
使用localhost:
或IP地址:
我唯一做不到的是,它有过时的密码(图片上的红色方框)。在这一点上,我们非常感谢帮助。
使用makecert,无法添加SAN信息。使用NewSelfSignedCertificate(Powershell),您可以添加SAN信息,它也可以工作。
这篇文章已经得到了大量的响应,但我基于其他一些答案创建了一个bash脚本,以便更容易生成在Chrome中有效的自签名TLS证书(在Chrome65.x中测试)。希望它对其他人有用。
自签名tls-bash脚本
安装(并信任)证书后,不要忘记重新启动Chrome(chrome://restart)
另一个值得一看的工具是CloudFlare的cfssl工具包:
cfssl
我继续使用bjnord建议的方法,即:Google Chrome、Mac OS X和自签名SSL证书
博客中显示的内容不起作用。
然而,该博客的一条评论是金色的:
sudo安全添加可信证书-d-r trustRoot-k/Library/Keychains/Systemkeychain site.crt
你需要关注博客中关于如何获取cert文件的内容,然后你可以使用上面的命令,应该很好。