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)

为localhost创建受信任的自签名SSL证书(用于Express / Node)

如何信任 Android 上的自签名证书?

在 .Net Core 控制台应用程序中生成受信任的自签名证书