让Chrome接受自签名的本地主机证书

1737

我已经为 localhost CN 创建了自签名SSL证书。Firefox会像预期的那样在初始时抱怨后接受此证书。然而,Chrome和IE拒绝接受它,即使将证书添加到受信任的根证书存储中。尽管在点击Chrome的HTTPS弹出窗口中的“查看证书信息”时显示证书已正确安装,但它仍坚持认为无法信任该证书。

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


17
当你说 Firefox 最初抱怨时,你指的是它要求你添加证书异常吗?如果证书正确安装,这不应该发生。在我看来,三个浏览器都在抱怨,但 Firefox 允许你取消其抱怨。我将此发布为评论,因为我没有具体答案,但我确实做过这个并且在所有三个浏览器中都可以正常工作。我建议你先尝试让 IE 正常工作,然后再担心其他两个浏览器。很抱歉我帮不上更多的忙! - starskythehutch
6
火狐浏览器 不会 使用系统证书存储库。 - curiousguy
6
如果你的证书签名使用了SHA-1算法,即使你成功添加了自定义证书,最近版本的Chrome(大约是57)也会显示警告。不过,“安全”开发者工具面板会更详细地指出问题所在,例如:net::ERR_CERT_WEAK_SIGNATURE_ALGORITHM。请注意,这里的翻译并没有改变原文的意思。 - Seldom 'Where's Monica' Needy
9
我刚刚停止使用Chrome进行开发,因为它不太友好。通常情况下,陷入这种局面的人都知道他们在做什么。谢谢,但我已经受够了Chrome带来的挫败感! - GTodorov
8
2021年了,仍然没有简单的方式将本地主机或任何IP标记为安全。拜托了,谷歌即将在照片中停止提供无限存储空间。广告比以前更加刺眼,并且广告拦截程序已经失效。根据你搜索的内容不同,搜索结果似乎被“审查”了。总之,也许现在是时候少使用谷歌的生态系统了?是的! - DerpyNerd
显示剩余7条评论
52个回答

1241

仅限于 localhost

  1. 在Chrome浏览器中访问此链接:

    chrome://flags/#allow-insecure-localhost
    
  2. 您应该看到突出显示的文本,其中写着:

    允许从localhost加载的资源使用无效证书

  3. 点击 启用

其他网站的选项


3
禁用警告......但也禁用了缓存! https://bugs.chromium.org/p/chromium/issues/detail?id=103875 - Hugo Wood
6
如果你在Chrome的隐身模式下使用(例如切换身份),那么这将无法正常工作,但除此之外非常干净。 - baywet
9
如果您能忍受烦人的红色“不安全”提示,那么这没问题。否则,您需要花费数小时进行神秘的openssl操作,然后再尝试处理Chrome中的内部证书管理器。 - timbo
69
不知道为什么这个答案被投票了,但是无效证书和自签名证书之间有区别。问题是关于自签名证书的。 - Mehdi
6
对我完全没有用。对我有用的是生成一个包含subjectAltName的自签名证书,就像这个回答所解释的那样:https://dev59.com/PGsz5IYBdhLWcg3w6MNS#42917227 - Vic Seedoubleyew
显示剩余18条评论

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

现在您应该在您的页面上得到了一个漂亮的绿色锁。

编辑:我在新机器上再次尝试了这个方法,但是证书没有出现在管理证书窗口中,只有通过红色不受信任的证书页面才能实现。我必须执行以下操作:

在带有不受信任证书的页面上(https://被红色划掉),点击锁图标 > 证书信息。注意:在较新版本的Chrome中,您需要打开 开发者工具 > 安全性 并选择 查看证书
点击 详细信息 标签页 > 导出。选择文件格式为 PKCS #7, 单个证书
然后按照我的原始说明转到“管理证书”页面。点击 颁发机构 标签页 > 导入,选择您导出证书的文件,并确保选择文件类型为 PKCS #7, 单个证书
如果提示证书存储,请选择 受信任的根证书颁发机构
勾选所有框并点击确定。重新启动Chrome。

备选步骤2:导航至chrome://settings/certificates。如果您一直在生成自签名证书并且已经生成了多个,请尝试使用此页面查找和删除以前导入的证书,然后重新导入。 - jws
8
chrome://settings/certificates 不再起作用,而且在 Chrome 设置 > 安全性 > 管理证书 中也没有“机构”选项卡。有人有更新的说明吗? - tolache
1
在 Windows 下,Chrome 中不存在 chrome://settings/certificates。证书部分仅打开 Windows 证书链工具 - Chrome 在 Windows 下似乎没有自己的证书存储。 - feeela
原始答案中的EDIT步骤对我在Chrome版本99.0.4844.51上有效。为了保存为PKCS #7单证书,我使用了.p7b扩展名,并按照这里描述的方式导入。 - lucrp

459
只需使用5个openssl命令,您就可以完成这个任务。
(请勿更改您的浏览器安全设置。)
使用以下代码,您可以(1)成为自己的CA,(2)然后将您的SSL证书作为CA进行签名。(3)然后将CA证书(而不是SSL证书,SSL证书用于服务器)导入到Chrome/Chromium中。(是的,这在Linux上也适用。)
您只需将以下代码复制到一个新文件中(例如generate_certs.sh),更新变量NAME和DNS.2和IP.1并保存文件。将其设置为可执行(chmod +x generate_certs.sh),然后运行它,就完成了。您将最终生成myCA.pem,$NAME.crt和$NAME.key这三个文件。
注意:对于Windows,一些报告称必须使用winpty运行openssl以避免崩溃。
######################
# Become a Certificate Authority
######################

# Generate private key
openssl genrsa -des3 -out myCA.key 2048
# Generate root certificate
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 825 -out myCA.pem

######################
# Create CA-signed certs
######################

NAME=mydomain.example # Use your own domain name
# Generate a private key
openssl genrsa -out $NAME.key 2048
# Create a certificate-signing request
openssl req -new -key $NAME.key -out $NAME.csr
# Create a config file for the extensions
>$NAME.ext cat <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $NAME # Be sure to include the domain name here because Common Name is not so commonly honoured by itself
DNS.2 = bar.$NAME # Optionally, add additional domains (I've added a subdomain here)
IP.1 = 192.168.0.13 # Optionally, add an IP address (if the connection which you have planned requires it)
EOF
# Create the signed certificate
openssl x509 -req -in $NAME.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial \
-out $NAME.crt -days 825 -sha256 -extfile $NAME.ext

总结

  1. 成为一名注册会计师。
  2. 使用您的CA证书+密钥签署您的证书。
  3. 在您的Chrome设置中将myCA.pem导入为"Authority"(而不是"Your Certificates")(设置 > 管理证书 > Authorities > 导入)。
  4. 在您的服务器中使用$NAME.crt$NAME.key文件。

您可以检查您的工作以确保证书构建正确:

openssl verify -CAfile myCA.pem -verify_hostname bar.mydomain.example mydomain.example.crt

Mac的额外步骤

  1. 在"文件 > 导入文件"中导入CA证书,然后在列表中找到它,右键点击,展开"> 信任",并选择"始终信任"
  2. basicConstraints=CA:FALSE下方添加extendedKeyUsage=serverAuth,clientAuth,并确保在设置时将"CommonName"设置为与$NAME相同。

Windows的额外步骤

  1. myCA.pem转换为myCA.pfx,执行以下操作:

    openssl pkcs12 -export -out myCA.pfx -inkey myCA.key -in myCA.pem
    
  2. myCA.pfx导入到Windows的受信任的证书颁发机构中,打开(双击)myCA.pfx文件,选择“本地计算机”,然后点击“下一步”,再次点击“下一步”,输入密码,然后点击“下一步”,选择“将所有证书放入下列存储区:”,点击“浏览”,选择“受信任的根证书颁发机构”,然后点击“下一步”,最后点击“完成”。

现在您的CA证书已被Windows信任。当您导入并使用$NAME证书时,它将自动被Windows和Chrome信任。

7
许多网络浏览器和操作系统内置了有限数量的受信任的证书颁发机构(CA)。虽然任何人都可以成为CA,但要让别人信任他们的证书,他们需要让人们手动将其添加为受信任的CA(就像我们在手动导入证书时告诉Chrome要做的那样)。 - JellicleCat
9
太好了!对于像我这样的Mac用户,有两点需要注意:在最后一行中,由于https://superuser.com/questions/1492643/chrome-neterr-cert-revoked-for-trusted-self-signed-root-ca,请使用“-days 825”代替“-days 1825”。值得注意的是,要将根证书导入到密钥串访问中,您不仅需要“文件>导入文件”,还需要在列表中找到它,右键单击它,展开“>信任”,并选择“始终信任”。 - michielbdejong
9
如果你的本地开发服务器需要 PEM 文件而不是 CRT 文件,不用担心,只需将 .crt 和 .csr 文件合并并将它们保存为 .pem 文件,就可以使用了。请注意,这样做不会改变原来的意思。 - Kerem Baydoğan
8
终于成功了!这个答案棒极了。请不要忘记将myCA.pem加载到您的Chrome或Firefox中(设置>管理证书>机构>导入)。 - Fractal Mind
11
在Windows上使用Chrome/ium时,当您尝试导入证书时,.pem格式的文件不会出现在可用的文件扩展名列表中,但仍可以导入它(只需选择“所有文件”筛选器)。 - 8ctopus
显示剩余35条评论

274

在页面的任何位置单击并输入BYPASS_SEQUENCE

BYPASS_SEQUENCE Chrome版本
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'));

或者

除了手动输入短语,您还可以将代码部分粘贴到控制台中。

sendCommand(SecurityInterstitialCommandId.CMD_PROCEED)

24
我非常怀疑这会不会真的有效,感觉就像在游戏中输入作弊代码一样。但说来惊人,“thisisunsafe” 确实适用于 Chrome 86。 - Martin Melka
4
如果你看到“证书无效”页面,只需要输入字母,窗口就会重新加载并显示页面的内容。(我也使用Chrome 91,对我来说它仍然有效。) - KarlKode
1
问题在于按钮在本地主机上没有显示。 - KarlKode
5
不要输入短语,你可以在控制台中粘贴代码部分: sendCommand(SecurityInterstitialCommandId.CMD_PROCEED) - Gedweb
2
这在Chrome 100版本(2022年4月)上仍然有效。 - Paul
显示剩余5条评论

193

Chrome 58+更新(发布于2017年4月19日)

从Chrome 58开始,仅使用commonName 无法识别主机。证书现在必须使用subjectAltName来识别它们的主机。进一步的讨论bug跟踪器

如果您过去的自签名证书工作正常,但突然在Chrome 58中出现错误,请注意这一点。

因此,无论您使用何种方法生成自签名证书(或由自签名CA签名的证书),请确保服务器的证书包含一个正确的DNS和/或IP条目的subjectAltName即使只是针对一个单独的主机

对于openssl,这意味着您的OpenSSL配置(Ubuntu上的/etc/ssl/openssl.cnf)应该为单个主机具有类似于以下内容:

[v3_ca]   # and/or [v3_req], if you are generating a CSR
subjectAltName = DNS:example.com

或对于多个主机:

[v3_ca]   # and/or [v3_req], if you are generating a CSR
subjectAltName = DNS:example.com, DNS:host1.example.com, DNS:*.host2.example.com, IP:10.1.2.3

在 Chrome 的证书查看器中(已移至 F12 下的“安全”选项卡),您应该在 扩展名 下看到它列在 证书主题备用名称 中:

Chrome 证书查看器


嗨,我添加了主题备用名称,但是导入到我的商店并且CA机构在受信任的存储中,重新启动Chrome但仍然显示缺少SAN。 - eliassal
v3_req选项对我有用,可以在CSR中获取subjectAltName。 但是,在使用自签名CA生成证书时,它被忽略了。(使用LibreSSL 2.6.5)如OpenSSL cookbook 所示(请参见“创建适用于多个主机名的证书”),后者所需的是创建一个名为myserver.ext的文本文件,其中包含subjectAltName=DNS:localhost。然后我运行命令openssl x509 -req ... -extfile myserver.ext。我可以通过 "openssl x509 -text -in myserver.crt -noout"确认添加了SAN。 - Glen Mazza

154

在 Mac 上,您可以使用“钥匙串访问”实用程序将自签名证书添加到系统钥匙串中,然后 Chrome 将接受它。我在这里找到了逐步说明:

Google Chrome、Mac OS X 和自签名 SSL 证书

基本上操作如下:

  1. 双击带有 X 的锁图标,并将证书图标拖放到桌面上;
  2. 打开该文件(以 .cer 扩展名结尾),这将打开密钥链应用程序,允许您批准该证书。

3
打开钥匙串应用程序中的证书后,编辑信任设置并将 SSL 设置为“始终信任”。 - chrishiestand

134

在 Mac 上,您可以通过以下方式创建一个完全受 Chrome 和 Safari 系统级信任的证书:

# create a root authority cert
./create_root_cert_and_key.sh

# create a wildcard cert for mysite.com
./create_certificate_for_domain.sh mysite.com

# or create a cert for www.mysite.com, no wildcards
./create_certificate_for_domain.sh www.mysite.com www.mysite.com

上述使用以下脚本和支持文件v3.ext,以避免主题备用名称丢失错误

如果您想创建一个新的自签名证书,并使用自己的根授权机构完全信任它,可以使用这些脚本完成。

create_root_cert_and_key.sh

#!/usr/bin/env bash
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

创建用于域名的证书.sh

#!/usr/bin/env bash

if [ -z "$1" ]
then
  echo "Please supply a subdomain to create a certificate for";
  echo "e.g. www.mysite.com"
  exit;
fi

if [ ! -f rootCA.pem ]; then
  echo 'Please run "create_root_cert_and_key.sh" first, and try again!'
  exit;
fi
if [ ! -f v3.ext ]; then
  echo 'Please download the "v3.ext" file and try again!'
  exit;
fi

# Create a new private key if one doesnt exist, or use the xeisting one if it does
if [ -f device.key ]; then
  KEY_OPT="-key"
else
  KEY_OPT="-keyout"
fi

DOMAIN=$1
COMMON_NAME=${2:-*.$1}
SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME"
NUM_OF_DAYS=825
openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr
cat v3.ext | sed s/%%DOMAIN%%/"$COMMON_NAME"/g > /tmp/__v3.ext
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext 

# move output files to final filenames
mv device.csr "$DOMAIN.csr"
cp device.crt "$DOMAIN.crt"

# remove temp file
rm -f device.crt;

echo 
echo "###########################################################################"
echo Done! 
echo "###########################################################################"
echo "To use these files on your server, simply copy both $DOMAIN.csr and"
echo "device.key to your webserver, and use like so (if Apache, for example)"
echo 
echo "    SSLCertificateFile    /path_to_your_files/$DOMAIN.crt"
echo "    SSLCertificateKeyFile /path_to_your_files/device.key"

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
    
[alt_names]
DNS.1 = %%DOMAIN%%

再多一步-如何使自签名证书在Chrome/Safari中被完全信任

要使自签名证书在Chrome和Safari中完全信任,您需要将新的证书颁发机构导入到您的Mac中。请按照以下说明进行操作,或按照 mitmproxy网站上有关此过程的更详细说明进行操作:

您可以通过两种方式之一,在命令行中使用以下命令,该命令会提示您输入密码:

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

或者您可以使用 Keychain Access 应用程序:

  1. 打开 Keychain Access
  2. 在“钥匙串”列表中选择“系统”
  3. 在“类别”列表中选择“证书”
  4. 选择“文件|导入项目…”
  5. 浏览到上面创建的文件“rootCA.pem”,选择它,然后单击“打开”
  6. 在“证书”列表中选择您新导入的证书。
  7. 单击“i”按钮,或右键单击证书,然后选择“获取信息”
  8. 展开“信任”选项
  9. 将“使用此证书时”更改为“始终信任”
  10. 关闭对话框,然后会提示您输入密码。
  11. 关闭并重新打开正在使用目标域的任何标签页,它将以安全方式加载!

额外附赠的内容是:如果您需要让 Java 客户端信任证书,您可以通过将证书导入 Java 密钥库来实现。请注意,这将从密钥库中删除证书(如果已存在),因为它需要更新它以反映可能的变化。当然,这只对导入的证书执行此操作。

import_certs_in_current_folder_into_java_keystore.sh

KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";

function running_as_root()
{
  if [ "$EUID" -ne 0 ]
    then echo "NO"
    exit
  fi

  echo "YES"
}

function import_certs_to_java_keystore
{
  for crt in *.crt; do 
    echo prepping $crt 
    keytool -delete -storepass changeit -alias alias__${crt} -keystore $KEYSTORE;
    keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
    echo 
  done
}

if [ "$(running_as_root)" == "YES" ]
then
  import_certs_to_java_keystore
else
  echo "This script needs to be run as root!"
fi

在运行 $ ./create_root_cert_and_key.sh 时,出现了 "Error opening Private Key rootCA.key" 错误。操作系统为 macOS 10.12.4,OpenSSL 版本为 0.9.8zh 14 Jan 2016。 - donut
1
在运行 $ ./create_root_cert_and_key.sh 命令之前运行 $ openssl genrsa -out rootCA.key 2048 命令可以解决我遇到的 "Error opening Private Key rootCA.key" 错误。 - donut
2
找到了解决方案(如果其他人遇到同样的问题),就是将“-key”更改为“-keyout”... openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout device.key -subj "$SUBJECT" -out device.csr - Lenny
5
在我的计算机上使用Chrome访问本地主机时仍然出现错误:证书错误。该网站的证书链存在问题(net::ERR_CERT_COMMON_NAME_INVALID)。 - Greg Blass
1
是的,“再来一步 - 如何使自签名证书在Chrome / Safari中完全受信任”这一步基本上意味着“如何使此证书在您的系统中除Java之外的所有地方都受信任” - 因此,如果您也希望它在Java中工作,请遵循那部分的步骤! - Brad Parks
显示剩余17条评论

100

Linux

如果您正在使用Linux,您也可以遵循官方wiki页面:

基本上:

  • 单击带有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

如果仍然无法正常工作,可能是受到了这个 bug 的影响: Issue 55050: Ubuntu SSL error 8179 另外,请确保您已经安装了 libnss3-tools,才能使用上述命令。
如果没有安装,请执行以下操作进行安装:
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-client-auth参数运行Chrome

    google-chrome --auto-ssl-client-auth


非常棒,我喜欢你的脚本。不过你不需要 QUIT(因为根本没有这样的 HTTP 命令),也不需要 sed,nss 工具可以在 BEGIN 和 END CERT 之间过滤证书。所以 download_cert.sh 可以简单地写成这样:echo | openssl s_client -connect $1:443 - Paul Tobias
我已经尝试了其他选项,但目前只有这个在Chrome 4x for linux中有效,它拒绝使用内置工具导入到任何商店。 - Kendrick
在Ubuntu 20.04上使用Chrome,我无法通过传递"P,,"来使其工作,但最终成功使用CT,c,c使其工作。 - Joseph

93

更新于2017年11月:这个答案可能不适用于大多数更新版本的Chrome。

更新于2016年02月:Mac用户可以在这里找到更好的说明。

  1. 在想要添加的网站上,右键点击地址栏中的红色锁形图标:enter image description here

    1. 点击标签页连接,然后点击证书信息

    2. 点击详细信息标签页,然后点击复制到文件...按钮。这将打开证书导出向导,请点击下一步以跳转至导出文件格式屏幕。

    3. 选择DER 编码的二进制 X.509 (.CER),然后点击下一步

    4. 点击浏览...并将文件保存到您的计算机上。给它取一个描述性的名称。点击下一步,然后点击完成

    5. 打开Chrome设置,向下滚动到底部,然后点击显示高级设置...

    6. HTTPS/SSL下,点击管理证书...

    7. 点击受信任的根证书颁发机构标签页,然后点击导入...按钮。这将打开证书导入向导。点击下一步以跳转至导入文件屏幕。

    8. 点击浏览...并选择您之前保存的证书文件,然后点击下一步

    9. 选择将所有证书放入以下存储。所选的存储应该是受信任的根证书颁发机构。如果不是,请点击浏览...并选择它。点击下一步完成

    10. 在安全警告上点击

    11. 重新启动Chrome。


2
@AJeneral 是的,Chrome又改了。这篇文章中的指示最近对我有效。 - kmgdev
2
截至本评论日期,此选项在 Mac Chrome 最新版中不存在。 - Josh Hibschman
2
@kgrote,Chrome没有自己的证书存储。 它所做的只是添加和删除 Windows 存储。因此,更好的方法是直接使用 certmgr.msc 来添加和删除证书。 - Pacerier
2
对我有用,谢谢。必须重新启动Chrome,并且我的证书必须在2017年之前到期,SHA-1的问题。 - ioan
2
Chrome又一次进行了更改!现在步骤“在地址栏中,单击带有X的小锁定图标。这将弹出一个小的信息屏幕。”已经不再适用。 - Bruno Bronosky
显示剩余5条评论

92

更新于2020年4月23日

由Chromium团队推荐

https://www.chromium.org/Home/chromium-security/deprecating-powerful-features-on-insecure-origins#TOC-Testing-Powerful-Features

快速超级简单的解决方案

在错误页面中输入一个秘密的绕过短语即可使Chrome忽略安全错误:thisisunsafe(在早期版本的Chrome中,输入badidea,甚至更早的版本中,输入danger)。除非你完全理解为什么需要使用它,否则不要使用!

来源:

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

(Note that window.atob('dGhpc2lzdW5zYWZl') resolves to thisisunsafe)
最新版本的源代码在https://chromium.googlesource.com/chromium/src/+/refs/heads/master/components/security_interstitials/core/browser/resources/interstitial_large.jswindow.atob函数可以在JS控制台中执行。
有关Chrome团队为什么更改了绕过短语(第一次)的背景:

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

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

对于快速的单次操作,如果“继续前进”选项不可用,也无法使用绕过短语,则此黑客技巧效果很好:

  1. 启用此标志,允许来自 localhost 的证书错误(注意,在更改标志值后,Chrome 需要重新启动):

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

    (并且投票支持 @Chris 的答案 https://dev59.com/PGsz5IYBdhLWcg3w6MNS#31900210

  2. 如果您要连接的站点是 localhost,则已完成。否则,请在本地侦听端口 8090 上设置 TCP 隧道,并在端口 443 上连接到 broken-remote-site.com,确保已安装 socat 并在终端窗口中运行以下命令:

    socat tcp-listen:8090,reuseaddr,fork tcp:broken-remote-site.com:443

  3. 在浏览器中转到 https://localhost:8090

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

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

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

ngrok http https://localhost

ngrok会启动并为您提供一个主机名,您可以连接到该主机名,并且所有请求将被隧道传回到您的本地计算机。

任何试图在Chrome 60 Ubuntu 14.04上使用https的本地主机与服务工作者的人,第一个If-all-fails点对我有效。 - formatkaka
这将仍然将证书视为无效,并使密码管理器拒绝工作。 - Ray Foss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接