我已经为localhostCN创建了一个自签名的SSL证书。正如预期的那样,Firefox在最初抱怨后接受了这个证书。然而,Chrome和IE拒绝接受它,即使在将证书添加到Trusted Roots下的系统证书存储之后。尽管当我在Chrome的HTTPS弹出窗口中单击“查看证书信息”时,证书被列为正确安装,但它仍然坚称证书不可信。
我该怎么做才能让Chrome接受证书并停止抱怨?
我已经为localhostCN创建了一个自签名的SSL证书。正如预期的那样,Firefox在最初抱怨后接受了这个证书。然而,Chrome和IE拒绝接受它,即使在将证书添加到Trusted Roots下的系统证书存储之后。尽管当我在Chrome的HTTPS弹出窗口中单击“查看证书信息”时,证书被列为正确安装,但它仍然坚称证书不可信。
我该怎么做才能让Chrome接受证书并停止抱怨?
当前回答
我不得不调整macosx上的Chrome启动程序,并添加了以下脚本。保存如下:;
/应用程序/Google\Chrome.app/Contents/MacOS/Chrome.com命令
#!/bin/sh
RealBin="Google Chrome"
AppDir="$(dirname "$0")"
exec "$AppDir/$RealBin" --ignore-certificate-errors "$@"
当我用这个脚本启动Chrome时,自签名证书可以正常工作。但是,不要使用使用此脚本启动的浏览器浏览网页,您将不会收到有关无效证书的警告!
其他回答
Windows:生成并自签名证书
这是一个在windows上生成根证书和实际域证书的“单文件”示例。编辑前四个变量,无需CMD进一步输入:
SET ROOT=my-root
SET NAME=demodomain
SET SUBJECT=/C=CH/O=My Demo Company
SET PASSWORD=ptGXHr3sudczSL9Q
:: Generate private key
openssl genrsa -des3 -out %ROOT%.key -passout pass:"%PASSWORD%" 2048
:: Generate root certificate
openssl req -x509 -new -nodes -key %ROOT%.key -sha256 -days 3650 -out %ROOT%.crt -passin pass:"%PASSWORD%" -subj "%SUBJECT%"
openssl genrsa -out %NAME%.key 2048
openssl req -new -key %NAME%.key -subj "%SUBJECT%/CN=%NAME%" -out %NAME%.csr
(
echo authorityKeyIdentifier=keyid,issuer
echo basicConstraints=CA:FALSE
echo keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
echo subjectAltName = @alt_names
echo [alt_names]
echo DNS = %NAME%)>config.ext
openssl x509 -req -in %NAME%.csr -CA "%ROOT%.crt" -CAkey "%ROOT%.key" -CAcreateserial -out %NAME%.crt -days 1780 -sha256 -extfile config.ext -passin pass:"%PASSWORD%"
:: cleanup files used for certificate generation
del %NAME%.csr
del config.ext
如果您想在一个文件中包含完整的链,请在bat文件中添加以下内容:
:: build chain in certificate-file
echo %ROOT%.crt >> %NAME%.crt
Type "%ROOT%.crt" >> %NAME%.crt
如果要验证证书,请附加以下内容:
openssl verify -CAfile "%ROOT%.crt" -verify_hostname %NAME% %NAME%.crt
打开根证书my-root.crt并将其添加到windows证书存储(选择“受信任的根证书颁发机构”):
Chrome中的最终结果:
正如有人指出的,你需要重启所有的Chrome,而不仅仅是浏览器窗口。最快的方法是打开一个选项卡。。。
chrome://restart
如果你在mac上,没有看到导出选项卡或如何获取证书,这对我来说很有用:
单击https://转到“连接”选项卡单击“证书信息”现在您应该看到:将这个小证书图标拖到桌面上(或任何地方)。双击下载的.cer文件,这应该会将其导入到密钥链中,并打开密钥链访问证书列表。在某些情况下,这就足够了,您现在可以刷新页面了。否则:双击新添加的证书。在信任下拉列表下,将“使用此证书时”选项更改为“始终信任”
现在重新加载有问题的页面,问题应该解决了!希望这有帮助。
从Wolph编辑
为了使此操作更简单,可以使用以下脚本(源代码):
将以下脚本另存为whitelist_ssl_certificate.ssh:#!/usr/bin/env bash-eSERVERNAME=$(echo“$1”|sed-E-E's/https?:\\///'-E's/\/.*//')echo“$SERVERNAME”如果[[“$SERVERNAME”=~.*\..*]];然后echo“为$SERVERNAME添加证书”echo-n | openssl s_client-connect$SERVERNAME:443 | sed-ne'/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'|tee/tmp/$SERVERNAME.certsudo安全添加可信证书-d-r trustRoot-k“/Library/Keychains/System.keychain”/tmp/$SERVERNAME.cert其他的echo“用法:$0 www.site.name”echo“http://等将自动剥离”传真使脚本可执行(从shell):chmod+x白名单_ssl_证书.ssh运行所需域的脚本(只需复制/粘贴完整的url即可):./whitelist_ssl_certificate.sshhttps://your_website/whatever
您确定站点的地址与证书相同吗?我对Chrome和自签名证书也有同样的问题,但最后我发现它对证书上域名的验证非常挑剔(应该如此)。
Chrome没有自己的证书存储,而是使用Windows自己的证书。然而,Chrome不提供将证书导入商店的方法,因此您应该通过IE添加证书。
在Google Chrome中安装证书
在Internet Explorer中安装证书
还可以看看这两种不同的创建自签名证书的方法(我假设您使用的是您没有提到的IIS)。
如何在IIS 7中创建自签名证书
我的解决方案和解释:
我有一个用IIS资源工具包工具SelfSSL.exe创建的自签名证书。在本地计算机上的证书列表中,我看到这个自签名证书只有一个用途:服务器身份验证。所以我创建了一个新的自签名证书,它有两个目的:服务器身份验证和客户端身份验证。现在Chrome不再抱怨了。
本文展示了许多生成自签名证书的方法。请注意,并非所有选项都允许您指定证书用途。我使用PowerShell的方式:
$cert = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname company.co.nz
注意:正如kellen Chrome的这个回答所述,它确实允许您设置证书的用途,但是IMO不能为证书添加新的用途,如果创建证书时没有考虑到这一点。