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

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


当前回答

更新日期:2020年4月23日

铬团队推荐

https://www.chromium.org/Home/chromium-security/deprecating-powerful-features-on-insecure-origins#TOC-测试强大功能

快速超级简单解决方案

有一个秘密的绕过短语,可以在错误页面中输入,让Chrome不顾安全错误继续运行:这是不安全的(在早期版本的Chrome中,键入baddidea,甚至更早版本的危险)。除非你完全明白为什么需要它,否则不要使用它!

资料来源:

https://chromium.googlesource.com/chromium/src/+/d8fc089b62cd4f8d907acff6fb3f5ff58f168697%5E%21/

(注意,window.atob('dGhpc2lzdW5zYWZl')解析为此isnsafe)

源的最新版本为@https://chromium.googlesource.com/chromium/src/+/refs/heads/master/components/security_interentials/corebrowser/resources/intertial_large.js和window.atob函数可以在js控制台中执行。

有关Chrome团队为何更改旁路短语(第一次)的背景信息:

https://bugs.chromium.org/p/chromium/issues/detail?id=581189

如果所有其他方法都失败(解决方案1)

对于快速一次性,如果“无论如何继续”选项不可用,或者旁路短语也不起作用,这个黑客很好:

通过启用此标志,允许来自本地主机的证书错误(注意,更改标志值后,Chrome需要重新启动):chrome://flags/#allow-不安全的本地主机(并投票赞成答案https://stackoverflow.com/a/31900210/430128作者@Chris)如果要连接的站点是localhost,那么就完成了。否则,设置TCP隧道以在本地侦听端口8090,并连接到端口443上的broken-remote-site.com,确保已安装socat并在终端窗口中运行以下内容:socat tcp侦听:8090,reuseddr,fork tcp:断开远程站点.com:443去https://localhost:8090在浏览器中。

如果所有其他方法都失败(解决方案#2)

类似于“如果所有其他都失败(解决方案#1)”,这里我们使用ngok为本地服务配置代理。因为您可以通过TLS访问ngrok http隧道(在这种情况下,它由ngrok使用有效证书终止),也可以通过非TLS端点访问,所以浏览器不会抱怨证书无效。

下载并安装ngrok,然后通过ngrok.io公开它:

ngrok http https://localhost

ngok将启动并为您提供一个可以连接到的主机名,所有请求都将通过隧道传输回本地计算机。

其他回答

好的,假设你已经创建了一个“有效”的自签名证书。它正确安装在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不断更改的规则,自签名证书就可以工作。

仅适用于本地主机

只需将其粘贴到您的铬中:

chrome://flags/#allow-insecure-localhost

您应该看到突出显示的文本:

允许从本地主机加载的资源的证书无效

单击启用。

其他站点

尝试在窗口的任何位置键入thisisnsafe,浏览器将允许您访问该页面。

-OR-

对于本地自签名证书,可以避免晦涩难懂的命令、专门知识和手动步骤,请尝试从这个答案中选择mkcert。

这是一个不断出现的东西——尤其是在Mac OS X Yosemite上的谷歌Chrome!

谢天谢地,我们的一个开发团队今天向我发送了这个链接,该方法工作可靠,同时仍然允许您控制接受证书的站点。

https://www.reddit.com/r/sysadmin/comments/3ercx4/chrome_shortcut_past_the_your_connection_is_not/cthporl

jersully帖子:

如果您不想麻烦内部证书。。。类型chrome://flags/在地址栏中。滚动到或搜索“记住决策”以在指定的时间长度内继续处理SSL错误。选择“记住三个月”。

对于使用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上,如果您仍然获得无效证书,则下载证书并添加到密钥链,并使所有证书都可信。

为了在Windows上进行开发,您可以添加到Chrome快捷方式标志--忽略证书错误

它希望忽略证书错误,并允许您访问无效的证书网站。中更详细的说明https://support.opendns.com/entries/66657664.