LocalHost 的自签名证书上的 Chrome NET::ERR_CERT_AUTHORITY_INVALID 错误
Posted
技术标签:
【中文标题】LocalHost 的自签名证书上的 Chrome NET::ERR_CERT_AUTHORITY_INVALID 错误【英文标题】:Chrome NET::ERR_CERT_AUTHORITY_INVALID error on self signing certificate at LocalHost 【发布时间】:2018-03-03 03:10:49 【问题描述】:我正在尝试在本地 PC 上设置开发环境。由于生产网站支持 HTTPS(这些天谁不支持?),我想在 localhost 上也有这个。我以为这很容易,但没有。
我安装了 XAMP,并进行了所有设置,以便我可以访问该网站。但是,每当我在本地访问网站上的任何页面时,都会收到 chrome 警告:
NET::ERR_CERT_AUTHORITY_INVALID
我确实按照以下线程尝试解决它:
Getting Chrome to accept self-signed localhost certificate
我还基于此创建了具有正确主题备用名称 (SAN) 部分的证书:
https://deliciousbrains.com/https-locally-without-browser-privacy-errors/
之后,我生成了 CER 或 P7B 文件并将其导入 Chrome。我重新启动了 Apache 和 Chrome。
我将证书放在受信任的根证书颁发机构中。然而不知何故,Chrome 决定将它放在中间根证书颁发机构中......
我使用的是 Chrome 61,我在 60 中也使用过。
所以不知何故,我无法安装自签名证书,并不断收到此警告,这基本上使在 localhost 上的开发变得不可能......
我明白了,这个自签名并不完全可信,但总得有办法线下开发吧?从现在开始我们必须在线建立网站没有意义吗?...
有什么想法吗?
【问题讨论】:
【参考方案1】:我们可以简单地允许无效证书用于 chrome 中的开发目的。
这仅对本地主机有效
将此粘贴到您的 chrome 地址栏中:
chrome://flags/#allow-insecure-localhost
然后启用突出显示的文本:允许从本地主机加载的资源无效证书
【讨论】:
我猜这只有在 URL 显示https://localhost
时才有效,因为它不适用于在@987654326 上指向 localhost
/ 127.0.0.1
的域@文件
老实说,如果您正在为一次性场景测试某些东西,这是最好的解决方案。谢谢!【参考方案2】:
这是我使用 KeyStore Explorer 工具的说明。
我之前创建证书时缺少的两件事是:
AKID(授权密钥标识符) - 选择您在创建它时使用的相同“CN=”。 在“基本约束”选项中添加(不要选择“是 CA”)如果没有这两件事,即使您已将自签名证书安装到您的 MS-CAPI PKI 信任存储区(作为“受信任的根授权”),Chrome 也会发出警告/错误。
这是我使用的步骤。
-
使用 KSE(KeyStore Explorer)的说明
创建 JKS
创建自签名证书
打开 KeyStore 资源管理器
文件 |新 | JKS |好的
为您的 JKS 文件创建密码
文件 |另存为... |输入您的密码
输入文件名 |好的
工具 |生成密钥对
选择算法和密钥大小(即 2048)|好的
选择有效期(即5年)
选择名称(书本图标)|在名称字段中输入 |好的
即“CN=localhost……”
添加扩展(非常重要),这决定了它将是什么类型的证书以及如何使用它。此示例适用于带有 SSL 的标准服务器证书。
添加密钥使用项
添加数字签名和密钥加密选项复选框
添加 EKU(扩展密钥使用)选项
选择这两个选项:
TLS Web 客户端身份验证
TLS Web 服务器身份验证
添加 SAN(主题备用名称)
添加将使用此服务器的所有必需的 DNS 名称和 IP 地址(如果适用)。 (对所有需要的值重复)(例如 127.0.0.1 和 localhost(或)
完成后会是这个样子
完成后,您将看到列出了 OID(对象标识符)的所有字段 |好的 |好的
添加 AKID(授权密钥标识符)
添加扩展“+”
添加扩展类型 |授权密钥标识符
选择您在上面创建的 CN 的授权证书颁发者(例如“CN=localhost...”)|好的
添加“基本约束”(不要勾选“主题是 CA”)
完成后,您会看到这些列表:点击“确定”
注意:Chrome 浏览器需要基本约束和 AKID(授权密钥标识符)才能将自签名证书验证为可信证书。
否则,即使您已将此证书明确添加到您的 MS-CAPI 受信任的根证书中,您也会看到警告或错误消息。
输入您要使用的密钥对名称的别名
输入私钥对密码
*注意:此密码必须与 JKS 文件密钥库密码相同,否则 Java 可能会在尝试使用此证书时静默失败。
您应该会看到一条指示成功的消息。 |好的
然后,保存文件 |保存
【讨论】:
这听起来可能很愚蠢,但文件应该是什么文件扩展名,在这些说明之后我该怎么处理它? 参见上面的第 5 步(JKS 文件扩展名)。然后,右键单击 KeyStore Explorer 并选择“导出”“公钥”。然后,您可以将其保存为 .p7 或 .cer / .crt 扩展名。一旦你有了那个文件,你就可以将你的 .cer 文件导入你的 chrome 和/或 FireFox 浏览器,我相信这应该可以解决这个问题。 如果您计划在网络服务器上使用证书,您还必须导出私钥。右键->导出->导出私钥,选择OpenSSL,取消选中加密,选择文件位置,导出。 这行得通。创建后,我下载了证书并将其添加到 chrome 中。现在不再出现警告。 它在 chrome 中运行良好。但是如何使它与 fierfox 一起工作?【参考方案3】:我在 this 之后修复了完全相同的问题。
问题似乎在于证书的创建方式。
以下代码来自上述网站。
#!/usr/bin/env bash
mkdir ~/ssl/
openssl genrsa -des3 -out ~/ssl/rootCA.key 2048
openssl req -x509 -new -nodes -key ~/ssl/rootCA.key -sha256 -days 1024 -out ~/ssl/rootCA.pem
#!/usr/bin/env bash
sudo openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )
sudo openssl x509 -req -in server.csr -CA ~/ssl/rootCA.pem -CAkey ~/ssl/rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
server.csr.cnf 文件
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=US
ST=New York
L=Rochester
O=End Point
OU=Testing Domain
emailAddress=your-administrative-address@your-awesome-existing-domain.com
CN = localhost
v3.ext 文件
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
【讨论】:
你能补充一些细节吗?您将什么导入到 chrome 中?我做了同样的步骤,但仍然面临错误 我之前创建证书时缺少的两件事是:AKID(授权密钥标识符) - 选择您在创建证书时使用的相同“CN=”。添加“基本约束”选项(不要选择“是 CA”)如果没有这 2 件事,即使您已将自签名证书安装到 MS-CAPI PKI 信任库中,Chrome 也会发出警告/错误(作为“受信任的根权限)。 它显示在最后一个命令CA certificate and CA private key do not match
【参考方案4】:
有一个很棒的基于 Java 的 GUI 实用程序,我使用它来创建和操作 PKI 的所有东西,称为 KeyStore Explorer。比所有的命令行选项都简单:
http://keystore-explorer.org/
【讨论】:
【参考方案5】:打开你的 chrome 浏览器
将下面的链接放在浏览器地址栏中,然后回车。
chrome://flags/#allow-insecure-localhost
选择“允许从 localhost 加载的资源使用无效证书”。禁用到启用。
希望您的问题能得到解决。谢谢
【讨论】:
这是非常不安全的......它将允许所有恶搞网站【参考方案6】:我偶然发现了这一点:如果您安装了 Fiddler 并让它在后台运行,您的应用程序第一次运行时会打开一个带有证书问题的弹出窗口,如果您单击“是”,它将允许您的请求通过.看到这个https://www.telerik.com/forums/fiddler-certificate-error-bypass-question。
【讨论】:
【参考方案7】:只需更新您的 java(或安装 java 取决于您的系统架构(32 位或 64 位))。
安装后重启chrome浏览器就可以正常使用了。
我已经面对这个问题很长时间了。我刚刚发现了这一点,它对我有用。
【讨论】:
以上是关于LocalHost 的自签名证书上的 Chrome NET::ERR_CERT_AUTHORITY_INVALID 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux Chrome 和 Firefox 上信任自签名 localhost 证书
创建用于测试 localhost 的自签名证书并使其被浏览器接受
为 localhost 创建一个受信任的自签名 SSL 证书(用于 Express/Node)