提问人:pjohansson 提问时间:9/28/2011 最后编辑:yanet.moralesrpjohansson 更新时间:11/14/2023 访问量:1802695
让 Chrome 接受自签名的 localhost 证书 [已关闭]
Getting Chrome to accept self-signed localhost certificate [closed]
问:
这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。
2个月前关闭。
社区在 2 个月前审查了是否重新讨论这个问题,并将其关闭:
原始关闭原因未解决
我已经为 localhost CN 创建了一个自签名 SSL 证书。正如预期的那样,Firefox 在最初抱怨它后接受了它。但是,Chrome 和 IE 拒绝接受它,即使将证书添加到“受信任的根”下的系统证书存储中也是如此。即使当我在 Chrome 的 HTTPS 弹出窗口中单击“查看证书信息”时,证书被列为正确安装,但它仍然坚持认为该证书不可信。
我应该怎么做才能让 Chrome 接受证书并停止抱怨?
答:
您确定提供站点的地址与证书相同吗?我在使用 Chrome 和自签名证书时遇到了同样的问题,但最终我发现它对证书上的域名验证非常挑剔(应该如此)。
Chrome 没有自己的证书存储,而是使用 Window 自己的证书存储。但是,Chrome 无法将证书导入商店,因此您应该改为通过 IE 添加证书。
此外,请查看此内容,了解创建自签名证书的几种不同方法(我假设您正在使用 IIS,因为您没有提到)。
评论
在 Mac 上,您可以使用“钥匙串访问”实用工具将自签名证书添加到系统钥匙串,然后 Chrome 将接受该证书。我在这里找到了分步说明:
Google Chrome、Mac OS X 和自签名 SSL 证书
基本上:
- 双击带有 X 的锁定图标,然后将证书图标拖放到桌面,
- 打开此文件(以 .cer 扩展名结尾);这将打开钥匙串应用程序,允许您批准证书。
评论
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
如果仍然不起作用,则可能受到此错误的影响: 问题 55050:Ubuntu SSL 错误 8179
P.S. 在使用上述命令之前,还请确保您有 。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]
故障 排除
使用参数运行 Chrome
--auto-ssl-client-auth
google-chrome --auto-ssl-client-auth
评论
download_cert.sh
echo | openssl s_client -connect $1:443
"P,,"
CT,c,c
这对我有用:
- 使用 Chrome,通过 HTTPS 点击服务器上的页面,然后继续经过红色警告页面(假设您尚未这样做)。
- 开门。
Chrome Settings > Show advanced settings > HTTPS/SSL > Manage Certificates
- 单击选项卡并向下滚动以在您为证书提供的“组织名称”下找到您的证书。
Authorities
- 选择它,单击“编辑”(注意:在最新版本的 Chrome 中,该按钮现在是“高级”而不是“编辑”),选中所有框并单击确定。您可能需要重新启动 Chrome。
您现在应该在页面上获得漂亮的绿色锁。
编辑:我在新计算机上再次尝试此操作,但证书没有出现在“管理证书”窗口中,只需从红色的不受信任的证书页面继续操作即可。我必须执行以下操作:
- 在包含不受信任证书(以红色划掉)的页面上,单击“证书信息”>锁定。注意:在较新版本的 chrome 上,您必须打开 ,然后选择 。
https://
Developer Tools > Security
View certificate
- 单击 .选择作为文件格式。
Details tab > Export
PKCS #7, single certificate
- 然后按照我的原始说明进入“管理证书”页面。单击 并选择将证书导出到的文件,并确保选择作为文件类型。
Authorities tab > Import
PKCS #7, single certificate
- 如果出现提示,请选择“受信任的根证书颁发机构”
- 选中所有复选框,然后单击确定。 重新启动 Chrome。
评论
chrome://settings/certificates
在 Windows 下的 Chrome 中不存在。证书部分仅打开 Windows 证书链工具 – Chrome 似乎没有自己的证书存储空间
99.0.4844.51
.p7b
对于测试环境
您可以在启动 chrome 时用作命令行参数(在 Ubuntu 上处理版本 28.0.1500.52)。--ignore-certificate-errors
这将导致它忽略错误并在没有警告的情况下进行连接。如果您已经运行了一个版本的 chrome,则需要在从命令行重新启动之前关闭它,否则它将打开一个新窗口,但忽略参数。
我将 Intellij 配置为在进行调试时以这种方式启动 chrome,因为测试服务器从未有过有效的证书。
不过,我不建议像这样正常浏览,因为证书检查是一项重要的安全功能,但这可能对某些人有所帮助。
评论
2017 年 11 月更新:此答案可能不适用于大多数较新版本的 Chrome。
更新02/2016:可以在此处找到针对Mac用户的更好说明。
在要添加的站点上,右键单击地址栏中的红色锁图标:
单击标有“连接”的选项卡,然后单击“证书信息”
单击“详细信息”选项卡,单击“复制到文件...”按钮。这将打开证书导出向导,单击“下一步”进入“导出文件格式”屏幕。
选择 DER 编码的二进制 X.509 (.CER),单击下一步
单击“浏览...”,然后将文件保存到计算机。给它起个描述性的名字。单击“下一步”,然后单击“完成”。
打开 Chrome 设置,滚动到底部,然后点击显示高级设置...
在“HTTPS/SSL”下,单击“管理证书...”
单击“受信任的根证书颁发机构”选项卡,然后单击“导入...”按钮。这将打开证书导入向导。单击“下一步”进入“要导入的文件”屏幕。
单击“浏览...”,然后选择之前保存的证书文件,然后单击“下一步”。
选择“将所有证书放入以下存储区”。所选存储应为“受信任的根证书颁发机构”。如果不是,请单击“浏览...”,然后选择它。单击“下一步”和“完成”
单击安全警告上的“是”。
重新启动 Chrome。
评论
certmgr.msc
单击 URL 旁边的小划掉的锁图标时,您会看到一个如下所示的框:
单击“证书信息”链接后,您将看到以下对话框:
它告诉您哪个证书存储是正确的,它是受信任的根证书颁发机构存储。
您可以使用其他答案中概述的方法之一将证书添加到该存储区,也可以使用:
certutil -addstore -user "ROOT" cert.pem
ROOT
是前面提到的证书存储的内部名称。cert.pem
是自签名证书的名称。
评论
certutil -addstore -user "ROOT" cert.pem
是 Windows?
Trusted Root Certification Authorities
如果您在 Mac 上没有看到导出选项卡或如何获取证书,这对我有用:
- 单击 https:// 前的锁
- 转到“连接”选项卡
点击“证书信息”
现在你应该看到这个:
将那个小证书图标拖到桌面(或任何地方)。
双击下载的 .cer 文件,这应该会将其导入到您的钥匙串中,然后打开钥匙串访问以访问您的证书列表。
在某些情况下,这已经足够了,您现在可以刷新页面。
否则:
- 双击新添加的证书。
- 在信任下拉列表下,将“使用此证书时”选项更改为“始终信任”
现在重新加载有问题的页面,它应该有问题了!希望这会有所帮助。
从 Wolph 编辑
为了简化此操作,您可以使用以下脚本(源代码):
将以下脚本另存为:
whitelist_ssl_certificate.ssh
#!/usr/bin/env bash -e SERVERNAME=$(echo "$1" | sed -E -e 's/https?:\/\///' -e 's/\/.*//') echo "$SERVERNAME" if [[ "$SERVERNAME" =~ .*\..* ]]; then echo "Adding certificate for $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 "Usage: $0 www.site.name" echo "http:// and such will be stripped automatically" fi
使脚本可执行(从 shell):
chmod +x whitelist_ssl_certificate.ssh
运行所需域的脚本(只需复制/粘贴完整的 url 即可):
./whitelist_ssl_certificate.ssh https://your_website/whatever
评论
仅适用于(Chrome 119 及更高版本)localhost
只需在 Chrome 中访问此链接:
chrome://flags/#temporary-unexpire-flags-m118
您应该会看到突出显示的文本,内容如下:
暂时取消自 M118 起过期的标志。这些标志将很快被删除。– Mac、Windows、Linux、ChromeOS、Android、Fuchsia、Lacros
点击然后重新调整 Chrome。Enable
仅适用于(Chrome 118 及更低版本)localhost
只需在 Chrome 中访问此链接:
chrome://flags/#allow-insecure-localhost
您应该会看到突出显示的文本,内容如下:
允许从 localhost 加载的资源使用无效证书
点击。Enable
其他站点的选项
尝试在窗口的任意位置键入,浏览器应该允许您访问该页面。
thisisunsafe
评论
这对我有用。请参见:http://www.robpeck.com/2010/10/google-chrome-mac-os-x-and-self-signed-ssl-certificates/#.Vcy8_ZNVhBc
在地址栏中,单击带有 X 的小锁。这将显示一个小信息屏幕。单击显示“证书信息”的按钮。
单击图像并将其拖动到桌面上。它看起来像一个小证书。
双击它。这将打开钥匙串访问实用程序。输入您的密码以将其解锁。
请确保将证书添加到系统钥匙串,而不是登录钥匙串。单击“始终信任”,即使这似乎没有任何作用。
添加后,双击它。您可能需要再次进行身份验证。
展开“信任”部分。
“使用此证书时”设置为“始终信任”
评论
我继续使用 bjnord 建议的过程,即:Google Chrome、Mac OS X 和自签名 SSL 证书
博客中显示的内容不起作用。
然而,博客的一条评论是黄金:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain site.crt
您需要关注有关如何获取证书文件的博客,之后您可以使用上面的命令,并且应该可以开始了。
正如有人指出的那样,您需要重新启动所有Chrome,而不仅仅是浏览器窗口。执行此操作的最快方法是打开一个选项卡以...
chrome://restart
评论
修复了 Windows 上的 Chrome。
首先,您需要导出证书。
- 在浏览器中找到 URL。URL 的“https”段将是 用红线划掉,左边会有一个锁定符号。
- 右键单击划掉的“https”段。
- 您将看到一个包含各种信息的信息窗口
- 点击“详细信息”。
- 导出证书,按照说明接受默认设置。
导入
- 转到 Chrome 设置
- 点击“高级设置”
- 在HTTPS/SSL下,单击“管理证书”
- 转到“受信任的根证书颁发机构”
- 点击“导入”
- 将有一个弹出窗口,询问您是否要安装此证书。点击“是”。
评论
更新4月 23/2020
Chromium 团队推荐
快速、超级简单的解决方案
有一个秘密的绕过短语,可以在错误页面中输入,让 Chrome 在出现安全错误的情况下继续运行:thisisunsafe(在早期版本的 Chrome 中,键入 badidea,甚至更早,键入 danger)。除非您确切了解为什么需要它,否则不要使用它!
源:
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.js,该函数可以在 JS 控制台中执行。window.atob
有关 Chrome 团队更改绕过短语的原因(第一次)的背景信息:
https://bugs.chromium.org/p/chromium/issues/detail?id=581189
如果所有其他方法都失败(解决方案#1)
对于快速的一次性操作,如果“仍然继续”选项不可用,并且绕过短语不起作用,则此技巧效果很好:
通过启用此标志来允许证书错误(请注意,Chrome 在更改标志值后需要重新启动):
localhost
chrome://flags/#allow-insecure-localhost
如果要连接到的站点是 ,则已完成。否则,请设置一个 TCP 隧道以在本地侦听端口 8090 并连接到端口 443,确保您已在终端窗口中安装并运行如下内容:
localhost
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 终止)或通过非 TLS 终结点访问 ngrok http 隧道,因此浏览器不会抱怨证书无效。
下载并安装 ngrok,然后通过以下方式公开它:ngrok.io
ngrok http https://localhost
ngrok 将启动并提供可连接到的主机名,所有请求都将通过隧道传输回本地计算机。
评论
Chrome 58+ 更新(发布于 2017 年 4 月 19 日)
从 Chrome 58 开始,删除了仅使用来识别主机的功能。现在必须使用证书来标识其主机。请参阅此处的进一步讨论和此处的错误跟踪器。过去,仅用于多主机证书,因此某些内部 CA 工具不包括它们。commonName
subjectAltName
subjectAltName
如果您的自签名证书过去运行良好,但突然开始在 Chrome 58 中生成错误,这就是原因。
因此,无论您使用何种方法生成自签名证书(或由自签名 CA 签名的证书),请确保服务器的证书包含具有正确和/或条目/条目的证书,即使它仅适用于单个主机。subjectAltName
DNS
IP
对于 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 下的“安全”选项卡)中,您应该会看到它列在以下位置:Extensions
Certificate Subject Alternative Name
评论
在 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。为此,请遵循以下说明,或 mitmproxy 网站上有关此常规过程的更详细说明:
您可以在命令行中通过以下两种方式之一执行此操作,该命令将提示您输入密码:
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.pem
或使用应用程序:Keychain Access
- 打开钥匙串访问
- 在“钥匙串”列表中选择“系统”
- 在“类别”列表中选择“证书”
- 选择“文件 |导入项目...”
- 浏览到上面创建的文件“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
$ openssl genrsa -out rootCA.key 2048
$ ./create_root_cert_and_key.sh
-key
-keyout
openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout device.key -subj "$SUBJECT" -out device.csr
WINDOWS 2017 年 6 月 Windows Server 2012
我遵循了帕克斯@Brad回答。在 Windows 上,应将 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
然后,就我而言,我有一个自托管的 Web 应用程序,因此我需要将证书与 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}
certhash=证书 Thumprint
appid=GUID(您的选择)
首先,我尝试以不同的方式在受信任的根证书颁发机构上导入证书“device.crt”,但我仍然收到相同的错误:
但是我意识到我应该导入根证书颁发机构的证书,而不是域的证书。所以我使用了 mmc 控制台(文件/添加或删除管理单元/证书/添加/计算机帐户/LocalComputer/OK),我在受信任的根证书颁发机构存储中导入了 rootCA.pem。
重新启动 Chrome 等瞧,它可以工作。
使用 localhost:
或使用 IP 地址:
我唯一无法实现的是,它具有过时的密码(图片上的红色方块)。在这一点上,我们很感激帮助。
使用 makecert 时,无法添加 SAN 信息。 使用 New-SelfSignedCertificate (Powershell) 可以添加 SAN 信息,它也可以工作。
评论
netsh http
从 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
在 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.
我自己解决了这个问题,没有更改任何具有适当SSL认证的浏览器上的设置。我使用的是 mac,因此需要对我的 ssl 认证进行钥匙串更新。我必须将主题替代名称添加到 ssl 认证中,以便 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。对不起,窗户的家伙和女孩。
我正在使用带有 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
祝您编码愉快!
单击页面上的任意位置并键入: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)
评论
thisisunsafe
sendCommand(SecurityInterstitialCommandId.CMD_PROCEED)
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
)
评论
用于在 Linux 上的 Chromium 上管理 SSL 证书的 GUI 对我来说无法正常工作。然而,他们的文档给出了正确的答案。诀窍是运行下面的命令,导入自签名SSL证书。只需更新 和 的名称,然后重新启动 chromium/chrome。<certificate-nickname>
certificate-filename.cer
从文档中:
在 Linux 上,Chromium 使用 NSS 共享数据库。如果内置管理器不适合您,则可以使用 NSS 命令行工具配置证书。
获取工具
Debian/Ubuntu:
sudo apt-get install libnss3-tools
软呢帽:
su -c "yum install nss-tools"
Gentoo:(你需要启动以下所有带有前缀的命令,例如。 Opensuse:
su -c "echo 'dev-libs/nss utils' >> /etc/portage/package.use && emerge dev-libs/nss"
nss
nsscertutil
sudo zypper install mozilla-nss-tools
要信任自签名服务器证书,我们应该使用
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n <certificate-nickname> -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 <certificate nickname>
摘自:https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_cert_management.md
对于 Fedora、Ubuntu、Linux,如果您在使用 GUI 添加证书以添加新的根证书颁发机构时遇到错误。如果要信任服务器自签名证书,则不能提及无效的颁发机构...即使那是它本身。我只能通过信任我的权限并使用该权限密钥来签署服务器证书来使其工作。example.com Not a Certification authority
下面是它接受的自签名 CA 证书。这是我发现工作的唯一方法,我花了几个小时试图让它接受自签名的终点证书,没有雪茄。UI 将接受自签名颁发机构,只要它已声明。之后,Chrome 将接受由该密钥使用正确 DN 签名的所有证书,而无需单独添加它们。cert_authority_invalid
CA:TRUE
openssl req -new -x509 -extensions v3_req -days 8440 -config ca.conf -key rockstor.key -out rockstor.cert
[req]
distinguished_name=dn
req_extensions=v3_req
prompt = no
[v3_req]
basicConstraints=CA:TRUE,pathlen:0
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@alt_names
[alt_names]
DNS.1 = ca.tdpowerskills.com
[dn]
C = US
ST = LA
L = Alexandria
O = TDPS Certification Authority
OU = LEARNOPS
CN = ca.tdpowerskills.com
openssl req -new -x509 -extensions v3_req -days 8440 -config config.conf -key rockstor.key -out rockstor.cert
[req]
distinguished_name=dn
req_extensions=v3_req
prompt = no
[v3_req]
basicConstraints=CA:FALSE
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@alt_names
issuerAltName=DNS:ca.tdpowerskills.com
[alt_names]
DNS.1 = big.tdps.app
[dn]
C = US
ST = LA
L = Alexandria
O = TDPS Certification Authority
OU = LEARNOPS
CN = ca.tdpowerskills.com
如果这不起作用:
chrome://restart
实际重新启动尝试使用Firefox获取有关错误的更多详细信息,它往往会更好地解释错误。虽然 Chrome 会说:,但 Firefox 会抛出:。
ERR_CERTIFICATE_INVALID
MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY
请记住,Chrome 现在需要主题备用名称,并且几乎忽略了 CN。
对于其他人:
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n <nickname> -i <my.crt>
对于服务器证书certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n <nickname> -i <my.crt>
对于 CA对于 Firefox,添加异常证书的 UI 确实有效,一旦您这样做,它就会信任它。
也许你有时髦的设置,其中与你的配置合并。
/etc/pki/tls/openssl.cnf
也许您没有向配置或命令行添加扩展,例如
v3_req
请注意,我的方法绕过了对 CSR 的需求,只需使用颁发机构密钥对证书进行签名并添加开发服务器的详细信息。CSR 允许更多密钥以实现实际安全。
我尝试了所有方法,但 Chrome 需要设置的权限。服务器证书必须全部由有效的颁发机构颁发,即使这只是自己签名的另一个证书。
basicconstraints CA:true
CA:true
通过此方法允许不安全的 localhost 正常工作 chrome://flags/#allow-insecure-localhost
只是您需要将开发主机名创建为 xxx.localhost。
若要在 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!!
执行此操作后,证书将保存到“个人\证书”存储下的“本地计算机”证书中。
您希望将此证书复制到受信任的根证书颁发机构\证书存储中。
一种方法是:单击 Windows 开始按钮,然后键入 。
然后,根据下面的屏幕截图,将新创建的证书拖放到受信任的根证书颁发机构\证书存储中。certlm.msc
评论
Filippo Valsorda 编写了一个跨平台工具 mkcert
,为许多信任商店做到这一点。我猜想他写这篇文章的原因与这个问题有很多答案的原因相同:为受信任的根 CA 签名的证书做“正确”的事情是一件痛苦的事情。SubjectAltName
mkcert
包含在 Windows、macOS 和多种 Linux 版本的主要包管理系统中。在测试强大功能的第 4 步的 Chromium 文档中也提到了它。
mkcert的
mkcert
是用于制作本地受信任的开发证书的简单工具。它不需要任何配置。$ mkcert -install
Created a new local CA at "/Users/filippo/Library/Application Support/mkcert" 💥 The local CA is now installed in the system trust store! ⚡️ The local CA is now installed in the Firefox trust store (requires browser restart)! 🦊
$ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1
Using the local CA at "/Users/filippo/Library/Application Support/mkcert" ✨ Created a new certificate valid for the following names 📜 - "example.com" - "*.example.com" - "example.test" - "localhost" - "127.0.0.1" - "::1" The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ✅
评论
allow-insecure-localhost
在受信任的根 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
注意:如果执行此操作时浏览器已打开,则错误将继续显示。因此,请关闭浏览器并重新开始。更好的是,隐身或开始新的会话以立即生效。
评论
只需 5 个 openssl
命令,您就可以完成此操作。
(请不要更改您的浏览器安全设置。)
使用以下代码,您可以 (1) 成为您自己的 CA,(2) 然后将您的 SSL 证书签名为 CA。 (3) 然后将 CA 证书(而不是进入您服务器的 SSL 证书)导入 Chrome/Chromium。(是的,这即使在 Linux 上也有效。
您只需将下面的代码复制到一个新文件(例如generate_certs.sh),更新变量 NAME 以及 DNS.2 和 IP.1 并保存文件。使其可执行()并运行它,仅此而已。最后,您将为您生成 myCA.pem、$NAME.crt 和$NAME.key。chmod +x generate_certs.sh
注意:对于 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 文件。
您可以检查您的工作,以确保证书已正确生成:
openssl verify -CAfile myCA.pem -verify_hostname bar.mydomain.example mydomain.example.crt
适用于 Mac 的额外步骤
- 在“文件>导入文件”中导入 CA 证书,然后在列表中找到它,右键单击它,展开“>信任”,然后选择“始终”
- 在下面添加,并确保将“CommonName”设置为与要求设置时相同。
extendedKeyUsage=serverAuth,clientAuth
basicConstraints=CA:FALSE
$NAME
适用于 Windows 的额外步骤
通过执行以下操作将 myCA.pem 转换为 myCA.pfx:
openssl pkcs12 -export -out myCA.pfx -inkey myCA.key -in myCA.pem
通过打开(双击)myCA.pfx 文件,选择“本地计算机”和“下一步”,再次输入密码,然后选择“下一步”,然后选择“将所有证书放入以下存储:”,然后单击“浏览”,选择“受信任的根证书颁发机构”,然后选择“下一步”,然后单击“完成”,将 myCA.pfx 导入到 Windows 的受信任证书颁发机构中。
现在,您的 CA 证书受 Windows 信任。当您导入并使用证书时,Windows 和 Chrome 将自动信任该证书。$NAME
评论
-days 825
-days 1825
自 2020 年 3 月起,在使用 Chrome 81 的 MacOS Catalina 上,如上所述,使用 openssl 创建有效证书后,情况已更改。
首先,我使用 Safari 浏览了我的网站,然后单击警告页面底部的链接,该链接允许我无论如何访问该网站。这会将证书添加到我的 Mac 钥匙串(即 Keychain.app)。然后Safari会让我查看该页面。Chrome 显示该证书是受信任的,但不允许我查看该页面。我继续收到CERTIFICATE_INVALID错误。
在“钥匙串”中,选择左下角窗格中的“所有项目”。然后搜索您的本地主机 DNS 名称(即 myhost.example.com)。
双击您的证书。它将打开证书的编辑对话框。
将“使用此证书时”更改为“始终信任”
这完全是违反直觉的,因为SSL已经设置为Always Trust,大概是在添加证书时由Safari设置的。Chrome 只有在我将其全局更改为 Always Trust 后才开始工作。当我把它改回来时,它停止工作了。
2021 年 6 月 - Windows 10 - Chrome v91(简单)
按照 selfsignedcertificate.com 中的证书生成说明进行操作:
示例域名:,将其替换为您的域名。mydomain.local
要生成密钥,请执行以下操作:
openssl genrsa -out mydomain.local.key 2048
创建仅包含以下内容的配置文件:
mydomain.local.conf
[req] distinguished_name=req [SAN] subjectAltName=DNS:mydomain.local
注意:在 subcjectAltName 中,您可以定义更多域(可选),例如:
subjectAltName=DNS:mydomain.local, DNS:*.mydomain.local, DNS:otherdomain.local, IP:192.168.1.10
创建证书:
openssl req -new -x509 -key mydomain.local.key -out mydomain.local.crt -days 3650 -subj /CN=mydomain.local -extensions SAN -config mydomain.local.conf
将证书添加到受信任的根证书颁发机构
- 右键单击 mydomain.local.crt 文件
- 从上下文菜单中选择。
Install Certificate
- 在弹出窗口中选择。
Local Machine
- 选择。
Place all certificates in the following store
- 点击。
Browse
- 选择。
Trusted Root Certification Authorities
- 点击。OkNextFinish
- 重新启动 Chrome。
评论
NET::ERR_CERT_AUTHORITY_INVALID Subject: sslip.io Issuer: sslip.io
评论
net::ERR_CERT_WEAK_SIGNATURE_ALGORITHM