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

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


当前回答

单击页面上的任意位置并键入BYPASS_SEQUENCE:

BYPASS_SEQUENCE Chrome Version
thisisunsafe 65 - ?
badidea 62 - 64
danger ? - 61

您不需要查找输入字段,只需键入它即可。这感觉很奇怪,但它有效。我在Mac High Sierra上试过了。

要再次检查他们是否再次更改,请转到最新的Chromium源代码。此时BYPASS_SEQUENCE如下所示:

var BYPASS_SEQUENCE = window.atob('dGhpc2lzdW5zYWZl');

现在他们把它伪装起来了,但要看到真正的BYPASS_SEQUENCE,您可以在浏览器控制台中运行以下行。

console.log(window.atob('dGhpc2lzdW5zYWZl'));

OR

除了键入短语,您还可以在控制台中粘贴代码部分

sendCommand(SecurityInterstitialCommandId.CMD_PROCEED)

其他回答

Linux上Chromium上管理SSL证书的GUI对我来说并不正常。然而,他们的文档给出了正确的答案。诀窍是运行下面的命令来导入自签名SSL证书。只需更新<certificate-name>和certificate-filename.cer的名称,然后重新启动chrome/chrome。

从文档:

在Linux上,Chromium使用NSS共享数据库。如果内置管理器不适用于您,则可以使用NSS命令行工具配置证书。获取工具Debian/Uubuntu:sudo apt-get安装libnss3工具Fedora:su-c“yum安装nss-tools”Gentoo:su-c“echo'dev-libs/nss-utils'>>/etc/portage/package.use&&emerge-dev-libs/nss”(您需要使用nss前缀启动下面的所有命令,例如nsscerttil。)Opensuse:sudo zypper安装mozilla nss工具要信任自签名服务器证书,我们应该使用certutil-d sql:$HOME/.pki/nssdb-A-t“P,,”-n<证书昵称>-i certificate-filename.cer列出所有证书certutil-d sql:$HOME/.pki/nssdb-LTRUSTARGS是三个由零个或多个字母字符组成的字符串,用逗号分隔。它们定义了SSL、电子邮件和对象签名应如何信任证书,并在certutil文档或Meena关于信任标志的博客文章中进行了解释。为SSL客户端身份验证添加个人证书和私钥使用命令:pk12util-d sql:$HOME/.pki/nssdb-i PKCS12_file.p12导入存储在PKCS#12文件中的个人证书和私钥。个人证书的TRUSTARGS将设置为“u,u,u”。删除证书certutil-d sql:$HOME/.pki/nssdb-d-n<证书昵称>

摘录自:https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_cert_management.md

我自己解决了这个问题,没有更改任何具有适当SSL证书的浏览器上的设置。我使用的是mac,所以需要对我的ssl证书进行密钥链更新。我不得不在ssl认证中添加主题alt名称,以便chrome接受它

我的示例很容易使用命令和配置文件:

添加这些文件,这个示例都在一个根目录中

ssl.conf文件

[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
stateOrProvinceName         = State or Province Name (full name)
localityName                = Locality Name (eg, city)
organizationName            = Organization Name (eg, company)
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64

[ req_ext ]
subjectAltName = @alt_names

[alt_names]
DNS.1   = localhost

运行命令以创建证书:

openssl req -newkey rsa:4096 -nodes -keyout key.pem -x509 -days 3650 -out certificate.pem -extensions req_ext -config ssl.conf -subj '/CN=localhost/O=Stackflow/C=US/L=Los Angeles/OU=StackflowTech'

对于仅添加可信证书的Mac(必需):

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ./certificate.pem

对于windows,您必须找到如何在本地独立验证我们的ssl证书。我不使用Windows。对不起,窗户的男男女女。

我使用的是带有express.js的node.js服务器,只需要我的密钥和证书,如下所示:

应用程序.js

const https = require('https');
const Express = require('express');
const fs = require('fs');
const app = new Express();
const server = https.createServer({
    key: fs.readFileSync('./key.pem'),
    cert: fs.readFileSync('./certificate.pem'),
}, app);
server.listen(3000);

我可能会在将来为其他后端框架执行此操作,因此我可以在将来为其它框架更新此示例。但这是我在Node.js中解决的问题。清除浏览器缓存并在https上运行应用程序://

下面是一个跑步的例子https://localhost在Mac用户的Node.js服务器上:

https://github.com/laynefaler/Stack-Overflow-running-HTTPS-localhost

快乐编码!

我成功地遵循了凯伦的回答,并得到了托比·J的重要更新,但我不得不做出修改:

创建自签名证书时,必须将新的subjectAltName字段放在v3_ca扩展下,而不是v3_req。我将/etc/ssl/openssl.conf复制到一个临时文件中,然后在[v3_ca]下添加了一行subjectAltName=DNS:*.example.com。然后将该文件传递给cert创建命令,类似于

  openssl req -x509 -nodes -newkey rsa:2048 \
          -config /tmp/openssl-revised.cfg \
          -keyout example.com.key -out example.com.crt

并遵循kellen更新的步骤。

Linux系统

如果您使用的是Linux,也可以关注以下官方wiki页面:

在Linux上配置SSL证书。NSS共享数据库和LINUXNSS共享数据库如何

基本上:

单击带有X的锁定图标,选择证书信息转到“详细信息”选项卡单击导出。。。(另存为文件)

现在,以下命令将添加证书(其中YOUR_FILE是导出的文件):

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n YOUR_FILE -i YOUR_FILE

要列出所有证书,请运行以下命令:

certutil -d sql:$HOME/.pki/nssdb -L

如果它仍然不起作用,您可能会受到此错误的影响:问题55050:Ubuntu SSL错误8179

另外,在使用上述命令之前,请确保您拥有libnss3工具。

如果没有,请通过以下方式安装:

sudo apt-get install libnss3-tools # on Ubuntu
sudo yum install nss-tools # on Fedora, Red Hat, etc.

另外,您可以使用以下方便的脚本:

$ cat add_cert.sh
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n $1 -i $1
$ cat list_cert.sh
certutil -d sql:$HOME/.pki/nssdb -L # add '-h all' to see all built-in certs
$ cat download_cert.sh
echo QUIT | openssl s_client -connect $1:443 | sed -ne '/BEGIN CERT/,/END CERT/p'

用法:

add_cert.sh [FILE]
list_cert.sh
download_cert.sh [DOMAIN]

故障排除

使用--auto-ssl客户端身份验证参数运行Chromegoogle chrome--自动ssl客户端身份验证

如果你在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