我已经为localhostCN创建了一个自签名的SSL证书。正如预期的那样,Firefox在最初抱怨后接受了这个证书。然而,Chrome和IE拒绝接受它,即使在将证书添加到Trusted Roots下的系统证书存储之后。尽管当我在Chrome的HTTPS弹出窗口中单击“查看证书信息”时,证书被列为正确安装,但它仍然坚称证书不可信。

我该怎么做才能让Chrome接受证书并停止抱怨?


当前回答

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信息,它也可以工作。

其他回答

这对我有用:

使用Chrome,通过HTTPS点击服务器上的一个页面,然后继续浏览红色警告页面(假设你还没有这样做)。打开Chrome设置>显示高级设置>HTTPS/SSL>管理证书。单击“颁发机构”选项卡,然后向下滚动以在您为证书提供的“组织名称”下查找您的证书。选择它,单击“编辑”(注意:在最新版本的Chrome中,该按钮现在是“高级”而不是“编辑”),选中所有框并单击“确定”。您可能需要重新启动Chrome。

你现在应该在你的页面上获得漂亮的绿色锁。

编辑:我在新计算机上再次尝试了此操作,但仅从红色的不受信任证书页面继续,证书就没有显示在“管理证书”窗口中。我必须做到以下几点:

在具有不受信任证书的页面(https://用红色划掉)上,单击锁>证书信息。注意:在较新版本的chrome上,您必须打开“开发人员工具”>“安全”,然后选择“查看证书”。单击“详细信息”选项卡>“导出”。选择PKCS#7,单一证书作为文件格式。然后按照我的原始说明进入“管理证书”页面。单击“权限”选项卡>“导入”,然后选择将证书导出到的文件,并确保选择PKCS#7,单一证书作为文件类型。如果提示证书存储,请选择受信任的根证书颁发机构选中所有复选框并单击“确定”。重新启动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时,自签名证书可以正常工作。但是,不要使用使用此脚本启动的浏览器浏览网页,您将不会收到有关无效证书的警告!

对于使用NX的带有Angular Micro前端的mac

步骤1:创建自签名根证书

openssl req -x509 -nodes -new -sha256 -days 390 -newkey rsa:2048 -keyout "RootCA.key" -out "RootCA.pem" -subj "/C=de/CN=localhost.local"
openssl x509 -outform pem -in "RootCA.pem" -out "RootCA.crt"

步骤2:定义应包含在证书中的域和子域

为此,只需创建一个名为vhosts_domains.ext的文本文件并插入以下内容:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = *.mixable.blog.local
DNS.3 = mixable.blog.local

此示例包括域mixeble.blog.local的本地开发环境的子域以及所有子域,如www.mixable.blog.loal或apps.mixeble.blog.local。

步骤3:创建证书

openssl req -new -nodes -newkey rsa:2048 -keyout localhost.key -out localhost.csr -subj "/C=de/ST=State/L=City/O=Organization/CN=localhost.local"
openssl x509 -req -sha256 -days 1024 -in localhost.csr -CA RootCA.pem -CAkey RootCA.key -CAcreateserial -extfile vhosts_domains.ext -out localhost.crt

步骤4:使证书可用于Angular应用程序

nx serve host --open --devRemotes=<app names> --ssl --ssl-key <folder_location>/localhost.key --ssl-cert <folder_location>/localhost.crt

步骤5:将证书从导入添加到macOS密钥链

在chrome上,如果您仍然获得无效证书,则下载证书并添加到密钥链,并使所有证书都可信。

我继续使用bjnord建议的方法,即:Google Chrome、Mac OS X和自签名SSL证书

博客中显示的内容不起作用。

然而,该博客的一条评论是金色的:

sudo安全添加可信证书-d-r trustRoot-k/Library/Keychains/Systemkeychain site.crt

你需要关注博客中关于如何获取cert文件的内容,然后你可以使用上面的命令,应该很好。

我的解决方案和解释:

我有一个用IIS资源工具包工具SelfSSL.exe创建的自签名证书。在本地计算机上的证书列表中,我看到这个自签名证书只有一个用途:服务器身份验证。所以我创建了一个新的自签名证书,它有两个目的:服务器身份验证和客户端身份验证。现在Chrome不再抱怨了。

本文展示了许多生成自签名证书的方法。请注意,并非所有选项都允许您指定证书用途。我使用PowerShell的方式:

$cert = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname company.co.nz

注意:正如kellen Chrome的这个回答所述,它确实允许您设置证书的用途,但是IMO不能为证书添加新的用途,如果创建证书时没有考虑到这一点。