ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

当您说Firefox最初抱怨它时,您的意思是它要求您添加证书例外吗?如果证书已正确安装,则不应发生这种情况。在我看来,这三个浏览器都在抱怨,但 Firefox 允许您取消它的抱怨。我将此作为评论发布,因为我没有具体的答案,但我已经做到了这一点,并且它在所有三个浏览器中都可以正常工作。我建议你先尝试让它在 IE 上运行,然后再担心其他两个。对不起,我不能提供更多帮助!
Firefox 不使用系统证书存储。
如果您的证书签名使用 SHA-1,则最新版本的 Chrome(大约 57)将显示警告即使您已经能够成功添加自定义证书。无论如何,开发人员工具的“安全”面板会更具体地说明问题所在,例如:net::ERR_CERT_WEAK_SIGNATURE_ALGORITHM
我刚刚停止使用 Chrome 进行开发,因为它对开发人员不友好。通常,最终陷入这种情况的人无论如何都知道自己在做什么。谢谢,但不谢谢。我对 Chrome 已经受够了挫折!
2021 年,仍然没有简单的方法将本地主机或任何 IP 标记为安全。来吧......谷歌正在放弃照片中的无限存储空间。广告像过去一样出现在您的面前,而广告拦截器已变得无用。根据您要查找的内容,搜索结果似乎被“谴责”。回顾一下,也许是时候少用谷歌的生态系统了?是的!

M
Michael

仅适用于本地主机

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

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

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

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

单击启用。

其他网站

尝试在窗口的任意位置输入 thisisunsafe,然后输入 the browser should let you visit the page

-或者-

对于避免神秘命令、专业知识和手动步骤的本地自签名证书,请尝试 this answer 中的 mkcert


禁用警告......还有缓存! bugs.chromium.org/p/chromium/issues/detail?id=103875
如果您在隐身模式下使用 chrome(例如切换身份),这将不起作用,但否则非常干净
这 - 如果你能忍受恼人的红色不安全味精。否则,就是几个小时的神秘 openssl 咒语,然后尝试处理 Chrome 中的内部证书管理器。
我不知道为什么对这个答案进行了投票,但是无效证书和自签名证书之间存在区别。问题是关于自签名证书。
根本不适合我。对我有用的是生成包含 subjectAltName 的自签名证书,如以下答案所述:stackoverflow.com/a/42917227/2873507
S
Shawn

这对我有用:

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

您现在应该在您的页面上获得漂亮的绿色锁。

编辑:我在新机器上再次尝试了这个,证书没有出现在“管理证书”窗口中,只是从红色的不受信任的证书页面继续。我必须执行以下操作:

在带有不受信任证书的页面上(https:// 被红色划掉),单击锁 > 证书信息。注意:在较新版本的 chrome 上,您必须打开开发人员工具 > 安全性,然后选择查看证书。单击详细信息选项卡 > 导出。选择 PKCS #7,单一证书作为文件格式。然后按照我原来的说明进入“管理证书”页面。单击 Authorities 选项卡 > Import 并选择要将证书导出到的文件,并确保选择 PKCS #7, single certificate 作为文件类型。如果提示证书存储,请选择受信任的根证书颁发机构选中所有框并单击确定。重新启动 Chrome。


备用步骤 2:导航到 chrome://settings/certificates。此外,如果您一直在搞乱生成自签名证书并且制作了多个证书,请尝试使用此页面查找并删除以前导入的证书,然后重新导入。
chrome://settings/certificates 不再有效,Chrome 设置 > 安全 > 管理证书中没有“权限”选项卡。有没有人有更新的说明?
Windows 下的 Chrome 不存在 chrome://settings/certificates。证书部分仅打开 Windows 证书链工具 - Chrome 似乎没有自己的 Windows 下的证书存储区
使用 Chrome 版本 99.0.4844.51 的原始答案的编辑步骤对我有用。为了保存为 PKCS #7,我使用了 .p7b 扩展名并按照此处所述导入了单个证书。
S
Stephen Ostermiller

只需 5 个 openssl 命令,您就可以完成此任务。

(请不要更改您的浏览器安全设置。)

使用以下代码,您可以 (1) 成为您自己的 CA,(2) 然后将您的 SSL 证书签署为 CA。 (3) 然后将 CA 证书(不是 SSL 证书,它进入您的服务器)导入 Chrome/Chromium。 (是的,这甚至适用于 Linux。)

注意:对于 Windows,一些报告说 openssl 必须与 winpty 一起运行以避免崩溃。

######################
# 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

回顾一下:

成为 CA 使用您的 CA 证书+密钥签署您的证书 在 Chrome 设置(设置 > 管理证书 > 授权 > 导入)中将 myCA.pem 作为“授权”(而不是“您的证书”)导入使用 $NAME.crt 和服务器中的 $NAME.key 文件

额外步骤(至少对于 Mac):

在“文件>导入文件”处导入CA证书,然后在列表中找到它,右键单击它,展开“>信任”,然后选择“始终”在basicConstraints=CA:FALSE下面添加extendedKeyUsage=serverAuth,clientAuth,并制作确保在要求设置时将“CommonName”设置为与 $NAME 相同

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

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

@maverick 浏览器和操作系统附带了他们信任的有限数量的 CA。尽管任何人都可以成为 CA,但要让任何人信任他们的证书,他们需要人们手动将它们添加为受信任的 CA(正如我们在手动导入证书时告诉 Chrome 所做的那样)。
伟大的!对于像我这样的 Mac 用户,请注意两点:在最后一行,由于 superuser.com/questions/1492643/…,使用 -days 825 而不是 -days 1825,值得注意的是,将根证书导入 Key Chain Access,您不仅需要“文件> 导入文件”,然后还要在列表中找到它,右键单击它,展开“> 信任”,然后选择“始终”。
如果您的本地开发服务器需要 PEM 文件而不是 CRT 文件,请不要担心,只需合并 .crt 和 .csr 文件并将它们保存为 .pem 文件,您就可以开始了。
最后它起作用了!这个答案太棒了。请不要忘记将 myCA.pem 加载到您的 Chrome 或 Firefox(设置 > 管理证书 > 授权 > 导入)
在 Windows 上的 Chrome/ium 中,当您尝试导入证书时,pem 未列在可用的文件扩展名中,但它仍然可以导入它(只需选择所有文件过滤器)。
Y
Yevgeniy Afanasyev

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

thisisunsafe”是 Chrome 版本 65 的 BYPASS_SEQUENCE

badidea”Chrome 版本 62 - 64。

danger”曾在早期版本的 Chrome 中工作

您无需查找输入字段,只需键入即可。感觉很奇怪,但它正在工作。

我在 Mac High Sierra 上试过了。

要仔细检查他们是否再次更改,请转到最新的铬 Source Code

要查找 BYPASS_SEQUENCE,目前它看起来像这样:

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

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

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

我很怀疑这是否真的有效,感觉就像在游戏中输入作弊码一样。但你瞧,thisisunsafe 确实确实适用于 Chrome 86。
如果您看到“此证书无效”页面,只需输入字母,窗口就会重新加载并显示页面内容。 (我也在 Chrome 91 上,对我来说它仍然有效。)
问题是该按钮没有出现在本地主机上。
您可以将部分代码粘贴到控制台 sendCommand(SecurityInterstitialCommandId.CMD_PROCEED) 中,而不是输入短语
这仍然适用于 2022 年 4 月的 Chrome 版本 100。
T
Tobias J

Chrome 58+ 更新(2017-04-19 发布)

从 Chrome 58 开始,仅使用 commonName was removed 即可识别主机。证书现在必须使用 subjectAltName 来识别它们的主机。进一步参见 discussion herebug tracker here。过去,subjectAltName 仅用于多主机证书,因此某些内部 CA 工具不包含它们。

如果您的自签名证书过去运行良好,但突然开始在 Chrome 58 中产生错误,这就是原因。

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

对于 openssl,这意味着 your OpenSSL config(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 下的“安全”选项卡)中,您应该会看到它在 Extensions 下列为 Certificate Subject Alternative Name

https://i.stack.imgur.com/cPzxl.png


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

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

Google Chrome, Mac OS X and Self-Signed SSL Certificates

基本上:

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


在钥匙串应用程序中打开证书后,编辑信任设置并将 SSL 设置为“始终信任”
B
Brad Parks

在 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

create_certificate_for_domain.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。为此,请遵循以下说明,或有关此一般流程 on the mitmproxy website 的更详细说明:

您可以在命令行中使用以下两种方法之一执行此操作,该命令将提示您输入密码:

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

或使用 Keychain Access 应用程序:

打开 Keychain Access 在“Keychains”列表中选择“System” 在“Category”列表中选择“Certificates” 选择“File | Import Items...” 浏览到上面创建的文件“rootCA.pem”,选择它,然后单击“打开” 在“证书”列表中选择您新导入的证书。单击“i”按钮,或右键单击您的证书,然后选择“获取信息”展开“信任”选项将“使用此证书时”更改为“始终信任”关闭对话框,系统会提示您输入密码。关闭并重新打开正在使用您的目标域的所有选项卡,它将安全地加载!

作为奖励,如果您需要 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 时出现“打开私钥 rootCA.key 时出错”。 macOS 10.12.4 和 OpenSSL 0.9.8zh 2016 年 1 月 14 日。
$ ./create_root_cert_and_key.sh 之前运行 $ openssl genrsa -out rootCA.key 2048 修复了我遇到的“打开私钥 rootCA.key 时出错”错误。
@donut-感谢您指出这一点-我复制了那条线,所以我确定它导致了您看到的问题...
想出解决方案(以防其他人遇到此问题)是将 -key 更改为 -keyout... openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout device.key -subj "$SUBJECT" -out device.csr
为 localhost 执行此操作时,我的机器上的 Chrome 仍然出现错误:证书错误站点的证书链存在问题 (net::ERR_CERT_COMMON_NAME_INVALID)。
k
kenorb

Linux

如果你使用 Linux,你也可以关注这个官方 wiki 页面:

在 Linux 上配置 SSL 证书。

NSS 共享数据库和 LINUX

NSS 共享数据库指南

基本上:

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

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

PS 还请确保您有 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(反正没有 QUIT 这样的 HTTP 命令),也不需要 sed,nss 工具可以过滤掉 BEGIN 和 END CERT 之间的证书。所以 download_cert.sh 可以是这样的:echo | openssl s_client -connect $1:443
我尝试了其他选项,但目前只有这个选项适用于 Chrome 4x for linux,它拒绝使用内置工具导入任何商店。
在 Ubuntu 20.04 上使用 Chrome,我无法通过 "P,," 让它工作,但最终能够使用 CT,c,c 让它工作
T
TetraDev

更新 11/2017:此答案可能不适用于大多数较新版本的 Chrome。更新 02/2016:可以在此处找到针对 Mac 用户的更好说明。

在要添加的站点上,右键单击地址栏中的红色锁形图标: 单击标有连接的选项卡,然后单击证书信息 单击详细信息选项卡,单击复制到文件...按钮。这将打开证书导出向导,单击下一步进入导出文件格式屏幕。选择 DER 编码二进制 X.509 (.CER),单击 Next 单击 Browse... 并将文件保存到您的计算机。将其命名为描述性的。单击下一步,然后单击完成。打开 Chrome 设置,滚动到底部,然后单击显示高级设置... 在 HTTPS/SSL 下,单击管理证书... 单击受信任的根证书颁发机构选项卡,然后单击导入...按钮。这将打开证书导入向导。单击“下一步”进入“要导入的文件”屏幕。单击浏览...并选择您之前保存的证书文件,然后单击下一步。选择将所有证书放在以下存储中。选定的存储应该是受信任的根证书颁发机构。如果不是,请单击浏览... 并选择它。单击下一步并完成 在安全警告上单击是。重新启动 Chrome。


@AJeneral 是的,Chrome 又变了。 this article 中的说明最近对我有用。
截至本评论发布之日,Mac Chrome 最新版本中不存在此选项。
@kgrote,Chrome 没有自己的证书存储区。 它所做的只是添加和删除 Windows。因此,更好的方法是简单地使用 certmgr.msc 添加和删除证书。
为我工作,谢谢。必须重新启动 Chrome,最重要的是我的证书必须在 2017 年之前过期。SHA-1 的东西。
铬再次改变!现在步骤“在地址栏中,单击带有 X 的小锁。这将弹出一个小信息屏幕。”不起作用。
R
Raman

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,甚至更早,危险)。除非您完全了解为什么需要它,否则不要使用它!

资源:

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

(注意 window.atob('dGhpc2lzdW5zYWZl') 解析为 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)

如果“仍然继续”选项不可用,或者绕过短语也不起作用,则为了快速一次性使用,此 hack 效果很好:

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

如果一切都失败了(解决方案#2)

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

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

ngrok http https://localhost

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


任何尝试将 localhost 与 https 用于服务人员的人,If-all-fails 的第一点在 chrome 60 ubuntu 14.04 上为我工作
这仍然会将证书视为无效并使密码管理拒绝工作
N
Nitsan Baleli

如果您在 Mac 上并且没有看到导出选项卡或如何获取这对我有用的证书:

单击 https:// 之前的锁 转到“连接”选项卡 单击“证书信息” 现在您应该会看到:将那个小证书图标拖到您的桌面(或任何地方)。双击已下载的 .cer 文件,这应将其导入您的钥匙串并打开钥匙串访问您的证书列表。在某些情况下,这已经足够了,您现在可以刷新页面。否则:双击新添加的证书。在信任下拉菜单下,将“使用此证书时”选项更改为“始终信任”

现在重新加载有问题的页面,应该可以解决问题了!希望这可以帮助。

从沃尔夫编辑

为了使这更容易一点,您可以使用以下脚本 (source):

将以下脚本另存为 whitelist_ssl_certificate.ssh:#!/usr/bin/env bash -e SERVERNAME=$(echo "$1" | sed -E -e 's/https?:\/\///' -e ' s/\/.*//') echo "$SERVERNAME" if [[ "$SERVERNAME" =~ .*\..* ]];然后 echo "为 $SERVERNAME 添加证书" echo -n | openssl s_client -connect $SERVERNAME:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | tee /tmp/$SERVERNAME.cert sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" /tmp/$SERVERNAME.cert else echo "用法:$0 www.site.name " echo "http:// 等将被自动删除" fi 使脚本可执行(从 shell): chmod +x whitelist_ssl_certificate.ssh 为您想要的域运行脚本(只需复制/粘贴完整的 url 即可): ./whitelist_ssl_certificate.ssh https://your_website/whatever


这种方法在 OS X Mavericks 上对我有用,没有可用的导出选项,如上面的最佳答案中所述。
效果很好。 https之前的锁还是被划掉了,不过没关系,因为没有烦人的弹窗了。
K
Kieran Moore

对于测试环境

您可以在启动 chrome 时使用 --ignore-certificate-errors 作为命令行参数(在 Ubuntu 上使用版本 28.0.1500.52)。

这将导致它忽略错误并在没有警告的情况下连接。如果您已经运行了某个版本的 chrome,则需要在从命令行重新启动之前关闭它,否则它将打开一个新窗口但忽略参数。

我将 Intellij 配置为在进行调试时以这种方式启动 chrome,因为测试服务器从来没有有效的证书。

我不建议像这样正常浏览,因为证书检查是一项重要的安全功能,但这可能对某些人有所帮助。


它在 Windows 8 中对我有用!我只是右键单击 chrome 快捷方式 > 属性 > 像这样更改了“目标”字段(请注意,应在引号后添加“--ignore-certificate-errors”,并带有空格):“C:\Program Files (x86)\ Google\Chrome\Application\chrome.exe" --ignore-certificate-errors
这不能回答问题,而且很危险。问题是如何让 Chrome 信任自签名服务器证书;不是如何忽略警告和错误。
这是在 Windows 7(64 位)的 Chrome(63.0.3239.108)上对我有用的唯一解决方案。关于安全性,我在桌面上创建了特殊图标,仅在本地虚拟机上开发时才会启动。导入自签名本地证书、调整 chrome://flags 和 HSTS 域并没有帮助。 Chrome 绝对应该保留那个旧的好按钮“添加安全例外”——它可以让我节省 2 个小时来处理无用的设置。
本教程就像一个魅力! youtube.com/watch?v=qoS4bLmstlk
U
UUHHIVS

WINDOWS 2017 年 6 月 Windows Server 2012

我跟着@Brad Parks 回答。在 Windows 上,您应该在 Trusted Root Certificates Authorities 存储中导入 rootCA.pem。

我做了以下步骤:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -newkey rsa:4096 -sha256 -days 1024 -out rootCA.pem
openssl req -new -newkey rsa:4096 -sha256 -nodes -keyout device.key -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 2000 -sha256 -extfile v3.ext

其中 v3.ext 是:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
IP.1 = 192.168.0.2
IP.2 = 127.0.0.1

然后,在我的例子中,我有一个自托管的网络应用程序,所以我需要将证书与 IP 地址和端口绑定,证书应该在我的商店中,带有私钥信息,所以我导出为 pfx 格式。

openssl pkcs12 -export -out device.pfx -inkey device.key -in device.crt

使用 mmc 控制台(文件/添加或删除管理单元/证书/添加/计算机帐户/LocalComputer/OK)我在个人商店中导入了 pfx 文件。

后来我用这个命令绑定证书(你也可以使用HttpConfig工具):

netsh http add sslcert ipport=0.0.0.0:12345 certhash=b02de34cfe609bf14efd5c2b9be72a6cb6d6fe54 appid={BAD76723-BF4D-497F-A8FE-F0E28D3052F4}

certash=证书指纹

appid=GUID(您的选择)

首先,我尝试以不同的方式在受信任的根证书颁发机构上导入证书“device.crt”,但我仍然遇到相同的错误:

https://i.stack.imgur.com/QkgJy.png

但我意识到我应该导入根授权证书而不是域证书。所以我使用了 mmc 控制台(文件/添加或删除管理单元/证书/添加/计算机帐户/LocalComputer/OK)我在受信任的根证书颁发机构存储中导入了 rootCA.pem。

https://i.stack.imgur.com/occtU.png

重新启动 Chrome,然后它就可以工作了。

使用本地主机:

https://i.stack.imgur.com/xEpjR.png

或使用 IP 地址:

https://i.stack.imgur.com/1Hdl8.png

我唯一无法实现的是,它有过时的密码(图片上的红色方块)。在这一点上的帮助表示赞赏。

使用 makecert 无法添加 SAN 信息。使用 New-SelfSignedCertificate (Powershell) 您可以添加 SAN 信息,它也可以工作。


重要提示:以管理员身份运行 OpenSSL。
这是最好的答案,截至 2019 年 1 月,它仍然适用于 Chrome[71.0.3578.98]
哇,它奏效了,非常感谢(在 Chrome 75 上 - 2019 年 7 月)。除非您使用 Windows 服务器,否则您不需要 netsh http 步骤。另外我认为没有必要将证书文件导出到 pfx。
确认工作:Chrome 81 - 2020 年 5 月 - Windows 7
但是如何运行 Trusted Cert Store 应用程序?这个答案不完整
M
Michael

Filippo Valsorda 为 lots of trust stores 编写了一个跨平台工具 mkcert。我认为他写它的原因与这个问题有这么多答案的原因相同:为受信任的根 CA 签名的 SubjectAltName 证书做“正确”的事情是很痛苦的。

mkcert 包含在 Windows、macOS 和几种 Linux 版本的主要包管理系统中。 Testing Powerful Features 的第 4 步的 Chromium 文档中也提到了这一点。

mkcert mkcert 是用于制作本地受信任的开发证书的简单工具。它不需要配置。 $ mkcert -install 在“/Users/filippo/Library/Application Support/mkcert”创建了一个新的本地 CA 💥 本地 CA 现在已安装在系统信任库中! ⚡️ 本地 CA 现已安装在 Firefox 信任库中(需要重启浏览器)! 🦊 $ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1 在 "/Users/filippo/Library/Application Support/mkcert" 使用本地 CA ✨ 创建了一个对以下内容有效的新证书名字📜 - “example.com” - “*.example.com” - “example.test” - “localhost” - “127.0.0.1” - “::1” 证书位于“./example.com+5” .pem”和“./example.com+5-key.pem”处的密钥✅


我无法让它工作,至少对于我的 sslip.io 服务的子域。
这节省了大量时间!谢谢兄弟 :) 2022 年的作品真棒! macOS M1
到今天为止,在一台全新的 Mac 上,我可以正常工作了——但奇怪的是,Chrome 100.0.48 对“不安全”消息非常挑剔,直到我解开 allow-insecure-localhost 标志并进入钥匙串并检查“全部信任” “在证书上……我猜它现在是“安全的”?另一种解决方法是将证书图标从桌面上的 chrome 中拖出,然后将它们重新导入钥匙串,重新信任它们。
d
d-_-b

正如有人指出的那样,您需要重新启动所有 Chrome,而不仅仅是浏览器窗口。最快的方法是打开一个标签...

chrome://restart


嘿!只是想指出这是为我解决的问题。我正在向信任库添加一个自定义 CA,它一直对我有用。我尝试了 Firefox 并完美地工作,但不是 chrome。最后,这是因为您似乎需要完全重启 chrome,就像您提到的那样。只要这些后台进程仍在运行,Chrome 可能就会一直使用相同的信任库。
A
Ariel

在受信任的根 CA 存储中添加 CA 证书。转到 chrome 并启用此标志!

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

最后,只需使用 *.me 域或任何有效域,如 *.com 和 *.net 并将它们维护在主机文件中。对于我的本地开发人员,我使用 *.me 或 *.com 以及维护如下的主机文件:

添加到主机。 C:/windows/system32/drivers/etc/hosts 127.0.0.1 nextwebapp.me

注意:如果在执行此操作时浏览器已经打开,错误将继续显示。所以,请关闭浏览器并重新开始。更好的是,隐身或开始新的会话以立即生效。


这似乎与 the top-voted answer 相同。
我只将本地开发中允许的域名(即 *.me 站点)添加到 Windows 的主机文件中。人们添加证书,但有时即使证书安装正确,主机也无法验证 SSL 验证。在这种情况下,我们创建一个新会话。我只添加了这些提示。我已经穿过这个兔子洞太深了,所以我想确保有人知道如果需要它该做什么。
I
Ira Rainey

您确定提供该站点的地址与证书相同吗?我在使用 Chrome 和自签名证书时遇到了同样的问题,但最后我发现它对证书上的域名验证非常挑剔(应该如此)。

Chrome 没有自己的证书存储,而是使用 Window 自己的。但是 Chrome 无法将证书导入商店,因此您应该通过 IE 添加它们。

Installing Certificates in Google Chrome

Installing Certificates in Internet Explorer

还请看一下创建自签名证书的几种不同方法(我假设您使用的是 IIS,因为您没有提到)。

How to Create a Self Signed Certificate in IIS 7


有问题的站点是 localhost,证书的 CN 是“localhost”。是的,我确实在 Windows 的证书存储中安装了证书。 IE 和 Chrome 都抱怨证书。
不确定您使用的是 IIS 还是 Apache,但请查看我刚刚添加的为 IIS 创建自签名证书的额外链接。
由于对证书部分的域名验证非常挑剔:有人对此了解更多吗?我在带有根证书的 Android 9 上遇到问题(2019 年),谷歌 Chrome 将其归咎于不安全。 FF 和桌面都可以。
“您确定提供该站点的地址与证书相同吗?” - 好问题,我怎么知道?
J
James Oravec

我继续使用 bjnord 建议的过程:Google Chrome, Mac OS X and Self-Signed SSL Certificates

博客中显示的内容不起作用。

但是,该博客的评论之一是黄金:

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

您需要关注如何获取证书文件的博客,之后您可以使用上面的命令并且应该很好。


T
TetraDev

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

从文档:

在 Linux 上,Chromium 使用 NSS 共享数据库。如果内置管理器不适合您,那么您可以使用 NSS 命令行工具配置证书。获取工具 Debian/Ubuntu: sudo apt-get install libnss3-tools Fedora: su -c "yum install nss-tools" Gentoo: su -c "echo 'dev-libs/nss utils' >> /etc/portage/package .use && Emerge dev-libs/nss"(您需要使用 nss 前缀启动以下所有命令,例如 nsscertutil。) Opensuse: sudo zypper install mozilla-nss-tools 要信任自签名服务器证书,我们应该使用certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n -i certificate-filename.cer 列出所有证书 certutil -d sql:$HOME/.pki/nssdb -L TRUSTARGS 是由零个或多个字母字符组成的三个字符串,用逗号分隔。它们定义了 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


S
Soya Bean

通过此方法允许不安全的本地主机正常工作 chrome://flags/#allow-insecure-localhost

只是您需要将开发主机名创建为 xxx.localhost。


V
Vincil Bishop

这对我有用。请参阅:http://www.robpeck.com/2010/10/google-chrome-mac-os-x-and-self-signed-ssl-certificates/#.Vcy8_ZNVhBc

在地址栏中,单击带有 X 的小锁。这将打开一个小信息屏幕。单击“证书信息”按钮。

单击图像并将其拖动到桌面。它看起来像一个小证书。

双击它。这将打开钥匙串访问实用程序。输入您的密码以解锁它。

确保将证书添加到系统钥匙串,而不是登录钥匙串。单击“始终信任”,即使这似乎没有任何作用。

添加后,双击它。您可能需要再次进行身份验证。

展开“信任”部分。

“使用此证书时”设置为“始终信任”


这似乎有效!最后您可能需要重新启动浏览器。
m
mpowrie

要在 Windows 中创建 Chrome v58 及更高版本将信任的自签名证书,请使用提升的权限启动 Powershell 并键入:

New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -Subject "fruity.local" -DnsName "fruity.local", "*.fruity.local" -FriendlyName "FruityCert" -NotAfter (Get-Date).AddYears(10)
#notes: 
#    -subject "*.fruity.local" = Sets the string subject name to the wildcard *.fruity.local
#    -DnsName "fruity.local", "*.fruity.local"
#         ^ Sets the subject alternative name to fruity.local, *.fruity.local. (Required by Chrome v58 and later)
#    -NotAfter (Get-Date).AddYears(10) = make the certificate last 10 years. Note: only works from Windows Server 2016 / Windows 10 onwards!!

执行此操作后,证书将保存到 Personal\Certificates 存储下的本地计算机证书中。

您希望将此证书复制到 Trusted Root Certification Authorities\Certificates 存储。

https://i.stack.imgur.com/lTZ9q.png


@mpowrie。生成这个之后,我如何将它链接到 Apache 网络服务器?在本地主机服务器上。
Ifedi Okonkwo:抱歉,我不确定 Apache 网络服务器,但是使用 IIS,您可以添加 https 类型的站点绑定,包括完全限定的主机名,然后选择 SSL 证书。
这就像一个魅力。如果您想将该证书分配为绑定,我会说您需要执行一个额外的步骤......并且该证书也需要位于 Personal > Certificates 中。出于某种原因,拖放实际上将其从个人证书中删除并放置在受信任的证书中。因此,请确保复制并粘贴它。
u
user2217751

截至 2020 年 3 月,在使用 Chrome 81 的 MacOS Catalina 上,一旦您使用上述 openssl 创建有效证书,这种情况就会发生变化。

首先,我使用 Safari 浏览到我的站点,然后单击警告页面底部的链接,该链接允许我访问该站点。这将证书添加到我的 Mac 钥匙串(即 Keychain.app)中。 Safari 然后会让我查看页面。 Chrome 显示该证书是受信任的,但不允许我查看该页面。我继续收到 CERTIFICATE_INVALID 错误。

在钥匙串中,选择左下方窗格中的所有项目。然后搜索您的 localhost DNS 名称(即 myhost.example.com)。

双击您的证书。它将为您的证书打开一个编辑对话框。

将“使用此证书时”更改为“始终信任”

这完全违反直觉,因为 SSL 已经设置为始终信任,大概是 Safari 在添加证书时设置的。 Chrome 仅在我将其全局更改为 Always Trust 后才开始工作。当我把它改回来时,它停止工作了。


O
Oliver Salzburg

单击 URL 旁边的小划线锁图标时,您将看到一个如下所示的框:

https://i.stack.imgur.com/LNjw6.png

单击证书信息链接后,您将看到以下对话框:

https://i.stack.imgur.com/8Xe5j.png

它告诉您哪个证书存储是正确的,它是受信任的根证书颁发机构存储。

您可以使用其他答案中概述的方法之一将证书添加到该商店或使用:

certutil -addstore -user "ROOT" cert.pem

ROOT 是前面提到的证书存储的内部名称。

cert.pem 是您的自签名证书的名称。


certutil -addstore -user "ROOT" cert.pem 是 Windows?
@Pacerier:正确,它适用于 Windows。
您可以在 Trusted Root Certification Authorities 中使用它,但问题仍然存在:imgur.com/a/mjlglVz imgur.com/a/n8BFH5S Windows 10、chrome 78
u
user2871617

修复 Windows 上的 Chrome。

首先,您需要导出证书。

在浏览器中找到网址。网址的“https”部分将被红线划掉,左侧会有一个锁定符号。

右键单击划掉的“https”部分。

您将看到一个包含各种信息的信息窗口

点击“详情”。

导出证书,按照指示接受默认设置。

导入

转到 Chrome 设置

点击“高级设置”

在 HTTPS/SSL 下单击“管理证书”

转到“受信任的根证书颁发机构”

点击“导入”

将有一个弹出窗口询问您是否要安装此证书。点击“是”。


它说它找不到私钥。
您可能尝试了“您的证书”选项卡下的导入,您需要使用“权限”选项卡下的导入。
我尝试在所有选项卡下导入,即使在重新启动 chrome 后也没有任何工作
它对我不起作用,imgur.com/a/xoqXaHD Win 10, chrome 78 here。
M
Michael

从 Chrome 58+ 开始,由于缺少 SAN,我开始在 macOS 上收到证书错误。以下是如何再次获得地址栏上的绿色锁。

使用以下命令生成新证书: openssl req \ -newkey rsa:2048 \ -x509 \ -nodes \ -keyout server.key \ -new \ -out server.crt \ -subj /CN=*.domain.dev \ -reqexts SAN \ -extensions SAN \ -config <(cat /System/Library/OpenSSL/openssl.cnf \ <(printf '[SAN]\nsubjectAltName=DNS:*.domain.dev')) \ -sha256 \ -days 720 将server.crt导入你的KeyChain,然后双击证书,展开Trust,选择Always Trust

刷新 Google Chrome 中的页面 https://domain.dev,绿色锁又回来了。


这适用于子域 api.domain.dev,但我在 domain.dev 上仍然有一个警告页面:This server could not prove that it is domain.dev; its security certificate is from *.domain.dev. This may be caused by a misconfiguration or an attacker intercepting your connection. 知道吗?
L
Layne Faler

我为自己解决了这个问题,而没有更改任何具有适当 SSL 认证的浏览器的设置。我使用的是 Mac,因此需要对我的 ssl 认证进行钥匙串更新。我必须在 ssl 认证中添加主题 alt 名称才能让 chrome 接受它。截至今天,这是 Chrome 版本号:62.0.3202.94

我的示例是易于使用的命令和配置文件:

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

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。抱歉,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:// 上运行您的应用

以下是在 Node.js 服务器上为 Mac 用户运行 https://localhost 的示例:

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

快乐编码!


M
Michael

对于 MacOS 上的 Chrome,如果您已准备好证书:

退出 Chrome (cmd+Q)。

启动 Keychain Access 应用程序并打开“证书”类别。

将您的证书文件拖到 Keychain Access 窗口并输入证书文件的密码。

双击您的证书并展开“信任”列表。在“使用此证书时”行中,选择“始终信任”。关闭这些东西并输入您的密码。

在“使用此证书时”行中,选择“始终信任”。

关闭这些东西并输入您的密码。

启动 Chrome 并清除所有缓存。

检查一切是否正常。


H
Hannes Schneidermayer

我尝试了一切,它的工作原理:导入时,选择正确的类别,即受信任的根证书颁发机构:

(抱歉是德语,但请按照图片进行操作)

https://i.stack.imgur.com/OoVUR.png


A
Alex Ivasyuv
mkdir CA
openssl genrsa -aes256 -out CA/rootCA.key 4096
openssl req -x509 -new -nodes -key CA/rootCA.key -sha256 -days 1024 -out CA/rootCA.crt

openssl req -new -nodes -keyout example.com.key -out domain.csr -days 3650 -subj "/C=US/L=Some/O=Acme, Inc./CN=example.com"
openssl x509 -req -days 3650 -sha256 -in domain.csr -CA CA/rootCA.crt -CAkey CA/rootCA.key -CAcreateserial -out example.com.crt -extensions v3_ca -extfile <(
cat <<-EOF
[ v3_ca ]
subjectAltName = DNS:example.com
EOF
)

这是唯一一个对我有用的 chrome 77。谢谢你拯救了我的一天。
如何使用生成的文件?我了解如何使用域 .crt 和 .key 文件,但 .csr 文件有什么用?以及如何使用 rootCA.* 文件?请扩展您的答案...