pjo*_*son 1080 ssl google-chrome certificate self-signed
我为localhost CN创建了一个自签名SSL证书.Firefox正如预期的那样在最初抱怨之后接受此证书.然而,Chrome和IE拒绝接受它,即使在将证书添加到Trusted Roots下的系统证书存储区之后也是如此.即使我在Chrome的HTTPS弹出窗口中单击"查看证书信息"时列出的证书已正确安装,但仍然坚持认证证书不可信.
我该怎么办才能让Chrome接受证书并停止抱怨?
Chr*_*ris 640
不是为了PROD
只需将其粘贴到您的chrome中:
chrome://flags/#allow-insecure-localhost
Run Code Online (Sandbox Code Playgroud)
您应该看到突出显示的文本说:允许从localhost加载的资源的无效证书
点击localhost.
kel*_*len 487
这对我有用:
Chrome Settings > Show advanced settings > HTTPS/SSL > Manage Certificates.Authorities选项卡并向下滚动以在您为证书提供的组织名称下查找证书.你现在应该在你的页面上得到漂亮的绿色锁.
编辑:我在一台新机器上再次尝试了这一点,只是从红色不受信任的证书页面继续,证书没有出现在"管理证书"窗口中.我必须做以下事情:
https://以红色划掉),单击锁定>证书信息.注意:在较新版本的chrome上,您必须打开Developer Tools > Security并选择View certificate.Details tab > Export.选择PKCS #7, single certificate文件格式.Authorities tab > Import并选择导出证书的文件,并确保选择 PKCS #7, single certificate 作为文件类型.Jel*_*Cat 338
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.com # 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
Run Code Online (Sandbox Code Playgroud)
回顾一下:
myCA.pem为“管理局”(不是在你的Chrome浏览器设置为“您的证书”)(设置>管理证书>机构>导入)$NAME.crt和$NAME.key文件额外步骤(至少对于 Mac):
extendedKeyUsage=serverAuth,clientAuth下面basicConstraints=CA:FALSE,并确保将“CommonName”设置为与$NAME要求设置时相同您可以检查您的工作以确保正确构建证书:
openssl verify -CAfile myCA.pem -verify_hostname bar.mydomain.com mydomain.com.crt
Run Code Online (Sandbox Code Playgroud)
Tob*_*s J 154
更新58+更新(续期2017-04-19)
从Chrome 58开始,仅commonName 删除使用主机.另见这里的讨论,并在这里bug跟踪系统.过去,subjectAltName仅用于多主机证书,因此某些内部CA工具可能不包含它们.
如果您的自签名证书在过去工作正常但突然开始在Chrome 58中产生错误,这就是原因.
因此,无论您使用何种方法生成自签名证书(或由自签名CA签名的证书),请确保服务器的证书包含subjectAltName具有正确subjectAltName和/或DNS条目/条目的证书,即使它仅适用于单个主机.
对于openssl,这意味着您的OpenSSL配置(IP在Ubuntu上)应该具有类似于以下内容的单个主机:
[v3_ca] # and/or [v3_req], if you are generating a CSR
subjectAltName = DNS:example.com
Run Code Online (Sandbox Code Playgroud)
或多个主机:
[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
Run Code Online (Sandbox Code Playgroud)
在Chrome的浏览器证书(已移至下F12"安全"选项卡上),你应该看到它下面列出/etc/ssl/openssl.cnf的Extensions:
bjn*_*ord 138
在Mac上,您可以使用Keychain Access实用程序将自签名证书添加到系统钥匙串,然后Chrome将接受它.我在这里找到了分步说明:
基本上:
Yev*_*yev 108
单击页面上的任意位置并键入BYPASS_SEQUENCE
" thisisunsafe"是Chrome版本65的BYPASS_SEQUENCE
" badidea"Chrome版本62 - 64.
" danger"曾用于早期版本的Chrome
您不需要查找输入字段,只需键入它即可.这感觉很奇怪,但它确实有效.
我在Mac High Sierra上试过了.
要仔细检查是否再次更改它,请转到最新的铬源代码
要查找BYPASS_SEQUENCE,目前它看起来像:
var BYPASS_SEQUENCE = window.atob('dGhpc2lzdW5zYWZl');
Run Code Online (Sandbox Code Playgroud)
现在他们伪装了,但要看到真正的BYPASS_SEQUENCE,您可以在浏览器控制台中运行以下行.
console.log(window.atob('dGhpc2lzdW5zYWZl'));
Run Code Online (Sandbox Code Playgroud)
kmg*_*dev 90
更新11月11日:这个答案可能不适用于大多数较新版本的Chrome.
更新02/2016:可以在这里找到更好的Mac用户说明.
在要添加的站点上,右键单击地址栏中的红色锁图标:
单击标签为Connection的选项卡,然后单击Certificate Information
单击" 详细信息"选项卡,单击" 复制到文件... "按钮.这将打开"证书导出向导",单击" 下一步"进入" 导出文件格式"屏幕.
选择DER编码二进制X.509(.CER),单击" 下一步"
单击" 浏览..."并将文件保存到计算机.将其命名为描述性的.单击Next,然后单击Finish.
打开Chrome设置,滚动到底部,然后点击显示高级设置...
在HTTPS/SSL下,单击管理证书...
单击" 受信任的根证书颁发机构"选项卡,然后单击" 导入..." 按钮.这将打开"证书导入向导".单击" 下一步"转到" 要导入的文件"屏幕.
单击" 浏览..."并选择之前保存的证书文件,然后单击" 下一步".
选择将所有证书放在以下存储中.所选商店应为受信任的根证书颁发机构.如果不是,请单击" 浏览..."并选择它.单击下一步并完成
在安全警告上单击是.
重启Chrome.
ken*_*orb 89
如果您使用的是Linux,也可以按照以下官方维基页面进行操作:
基本上:
现在,以下命令将添加证书(其中YOUR_FILE是导出的文件):
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n YOUR_FILE -i YOUR_FILE
Run Code Online (Sandbox Code Playgroud)
要列出所有证书,请运行以下命令:
certutil -d sql:$HOME/.pki/nssdb -L
Run Code Online (Sandbox Code Playgroud)
如果它仍然不起作用,您可能会受到此错误的影响: 问题55050:Ubuntu SSL错误8179
PS libnss3-tools在使用上述命令之前,请确保您有.
如果您没有,请通过以下方式安装:
sudo apt-get install libnss3-tools # on Ubuntu
sudo yum install nss-tools # on Fedora, Red Hat, etc.
Run Code Online (Sandbox Code Playgroud)
作为奖励,您可以使用以下方便的脚本:
$ 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'
Run Code Online (Sandbox Code Playgroud)
用法:
add_cert.sh [FILE]
list_cert.sh
download_cert.sh [DOMAIN]
Run Code Online (Sandbox Code Playgroud)
使用--auto-ssl-client-auth参数运行Chrome
google-chrome --auto-ssl-client-auth
Bra*_*rks 85
在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
Run Code Online (Sandbox Code Playgroud)
v3.ext,以避免主题备用名称丢失错误如果要使用自己的root权限创建一个完全受信任的新自签名证书,则可以使用这些脚本执行此操作.
#!/usr/bin/env bash
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
Run Code Online (Sandbox Code Playgroud)
#!/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"
Run Code Online (Sandbox Code Playgroud)
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = %%DOMAIN%%
Run Code Online (Sandbox Code Playgroud)
要允许在Chrome和Safari中完全信任自签名证书,您需要将新的证书颁发机构导入Mac.为此,请遵循这些说明,或在mitmproxy网站上有关此一般过程的更详细说明:
您可以在命令行中执行以下两种方法之一,使用此命令将提示您输入密码:
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.pem
Run Code Online (Sandbox Code Playgroud)
或者使用Keychain Access应用程序:
作为奖励,如果您需要Java客户端信任证书,您可以通过将证书导入java密钥库来实现.请注意,如果密钥库已经存在,它将从密钥库中删除证书,因为它需要在事情发生变化时进行更新.它当然只对导入的证书执行此操作.
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
Run Code Online (Sandbox Code Playgroud)
Lun*_*irl 56
如果您使用的是Mac而没有看到导出选项卡或如何获取证书,这对我有用:
点击"证书信息"
现在你应该看到这个:

拖动那个小证书图标做你的桌面(或任何地方).
双击下载的.cer文件,这应该将其导入您的钥匙串并打开Keychain Access到您的证书列表.
在某些情况下,这已足够,您现在可以刷新页面.
除此以外:
现在重新加载有问题的页面,它应该是问题解决了!希望这可以帮助.
为了使这更容易,您可以使用以下脚本(源):
将以下脚本另存为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
Run Code Online (Sandbox Code Playgroud)使脚本可执行(从shell):
chmod +x whitelist_ssl_certificate.ssh
Run Code Online (Sandbox Code Playgroud)运行所需域的脚本(只需复制/粘贴完整的URL工作):
./whitelist_ssl_certificate.ssh https://your_website/whatever
Run Code Online (Sandbox Code Playgroud)Ram*_*man 43
更新于 4月3/2018
有一个秘密旁路短语,可以输入错误页面,让Chrome继续运行,尽管存在安全错误:thisisunsafe(在早期版本的Chrome中,键入badidea,甚至更早,危险).DO NOT USE,除非你明白究竟为什么需要它!
资源:
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,该window.atob功能可以在一个JS控制台.
有关Chrome团队为何更改旁路短语(第一次)的背景知识:
https://bugs.chromium.org/p/chromium/issues/detail?id=581189
如果没有"Proceed Anyway"选项,并且旁路短语不起作用,那么对于快速的一次性,这个hack工作正常:
localhost通过启用此标记允许证书错误(注意Chrome更改标志值后需要重新启动):
chrome://flags/#allow-insecure-localhost
(并通过@Chris 投票回答/sf/answers/2233014731/)
如果您要连接的网站是localhost,那么您就完成了.否则,设置TCP隧道以在本地侦听端口8090并连接到broken-remote-site.com端口443,确保已socat在终端窗口中安装并运行类似这样的内容:
socat tcp-listen:8090,reuseaddr,fork tcp:broken-remote-site.com:443
在浏览器中转到https:// localhost:8090.
小智 34
对于测试环境
您可以--ignore-certificate-errors在启动chrome时使用命令行参数(在Ubuntu上使用版本28.0.1500.52).
这将导致它忽略错误并在没有警告的情况下连接.如果您已经运行了chrome版本,则需要在从命令行重新启动之前关闭它,否则它将打开一个新窗口但忽略这些参数.
我将Intellij配置为在进行调试时以这种方式启动chrome,因为测试服务器永远不会有有效的证书.
我不建议这样的正常浏览,因为证书检查是一个重要的安全功能,但这可能对某些人有所帮助.
UUH*_*IVS 18
WINDOWS JUN/2017 Windows Server 2012
我跟着@Brad Parks的回答.在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
Run Code Online (Sandbox Code Playgroud)
其中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
Run Code Online (Sandbox Code Playgroud)
然后,在我的情况下,我有一个自托管的Web应用程序,所以我需要绑定证书与IP地址和端口,证书应该在我的商店与私人密钥信息,所以我导出到pfx格式.
openssl pkcs12 -export -out device.pfx -inkey device.key -in device.crt
Run Code Online (Sandbox Code Playgroud)
使用mmc控制台(文件/添加或删除管理单元/证书/添加/计算帐户/本地计算机/确定)我在个人存储中导入了pfx文件.
后来我用这个命令绑定证书(你也可以使用HttpConfig工具):
netsh http add sslcert ipport=0.0.0.0:12345 certhash=b02de34cfe609bf14efd5c2b9be72a6cb6d6fe54 appid={BAD76723-BF4D-497F-A8FE-F0E28D3052F4}
Run Code Online (Sandbox Code Playgroud)
certhash =证书Thumprint
appid = GUID(您的选择)
首先,我尝试以不同的方式在受信任的根证书颁发机构上导入证书"device.crt",但我仍然得到相同的错误:
但我意识到我应该导入root权限证书而不是域名证书.所以我使用了mmc控制台(文件/添加或删除管理单元/证书/添加/计算帐户/本地计算机/确定)我在受信任的根证书颁发机构存储中导入了rootCA.pem.
重启Chrome和etvoilà它有效.
使用localhost:
或者使用IP地址:
我唯一无法实现的是,它有过时的密码(图片上的红色方块).在这一点上,对此表示赞赏.
使用makecert,无法添加SAN信息.使用New-SelfSignedCertificate(Powershell),您可以添加SAN信息,它也可以.
Ari*_*iel 17
在受信任的根 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
注意:如果执行此操作时浏览器已经打开,错误将继续显示。所以,请关闭浏览器并重新开始。更好的是,隐身或开始新会话以立即生效。
Ira*_*ney 13
您确定该网站的地址与证书相同吗?我在使用Chrome和自签名证书方面遇到了同样的问题,但最后我发现它对证书上域名的验证非常挑剔(应该是这样).
Chrome没有自己的证书商店,并使用Window自己的.但是,Chrome无法将证书导入商店,因此您应该通过IE添加它们.
另外,请看一下创建自签名证书的几种不同方法(我假设您正在使用IIS,因为您没有提到过).
这对我有用。请参阅: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
您需要关注如何获取证书文件的博客,之后您可以使用上面的命令并且应该很好.
我无法在Linux上的Chromium上管理SSL证书的GUI正常工作。但是,他们的文档给出了正确的答案。技巧是运行下面的命令以导入自签名SSL证书。刚刚更新的名称<certificate-nickname>和certificate-filename.cer,然后重新启动铬/铬。
从文档中:
在Linux上,Chromium使用NSS共享数据库。如果内置管理器对您不起作用,则可以使用NSS命令行工具配置证书。
获取工具
Debian / Ubuntu:
sudo apt-get install libnss3-tools软呢帽:
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 <certificate-nickname> -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 <certificate nickname>
摘录自: https : //chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_cert_management.md
截至 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
Run Code Online (Sandbox Code Playgroud)
mydomain.local.conf创建仅包含以下内容的配置文件:
[req]
distinguished_name=req
[SAN]
subjectAltName=DNS:mydomain.local
Run Code Online (Sandbox Code Playgroud)
注意:在 subcjectAltName 中,您可以定义更多域(可选),例如:
subjectAltName=DNS:mydomain.local, DNS:*.mydomain.local, DNS:otherdomain.local, IP:192.168.1.10
创建证书:
[req]
distinguished_name=req
[SAN]
subjectAltName=DNS:mydomain.local
Run Code Online (Sandbox Code Playgroud)
将证书添加到受信任的根证书颁发机构
Install Certificate从上下文菜单中选择。Local Machine在弹出窗口中选择。Place all certificates in the following store。Browse。Trusted Root Certification Authorities。单击URL旁边的小划线锁图标时,您将看到如下所示的框:

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

它告诉您哪个证书存储是正确的,它是受信任的根证书颁发机构存储.
您可以使用其他答案中列出的方法之一将证书添加到该商店或使用:
certutil -addstore -user "ROOT" cert.pem
Run Code Online (Sandbox Code Playgroud)
ROOT 是前面提到的证书存储的内部名称.cert.pem 是您自签名证书的名称.小智 6
修复 Windows 上的 Chrome。
首先,您需要导出证书。
导入
这篇文章已经充满了回复,但我根据其他一些答案创建了一个bash脚本,以便更容易生成在Chrome中有效的自签名TLS证书(已测试Chrome 65.x).希望它对其他人有用.
安装(并信任)证书后,不要忘记重启Chrome(chrome://restart)
值得一试的另一个工具是CloudFlare的cfssl工具包:
对于 MacOS 上的 Chrome,如果您已准备好证书:
小智 5
这是不断出现的东西——尤其是对于 Mac OS X Yosemite 上的 Google Chrome!
值得庆幸的是,我们的开发团队之一今天向我发送了此链接,该方法运行可靠,同时仍允许您控制接受证书的站点。
jersully 帖子:
如果您不想打扰内部证书...
- 输入
chrome://flags/在地址栏中。- 滚动到或搜索记住决定以在指定的时间长度内处理 SSL 错误。
- 选择记住三个月。
从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
Run Code Online (Sandbox Code Playgroud)将导入server.crt到您的KeyChain中,然后双击证书,展开Trust,然后选择Always Trust
在Google Chrome浏览器中刷新页面https://domain.dev,这样绿色的锁又回来了。
小智 5
我自己解决了这个问题,而没有更改任何具有正确 SSL 认证的浏览器上的设置。我使用的是 mac,因此它需要对我的 ssl 认证进行钥匙串更新。我必须将主题替代名称添加到 chrome 的 ssl 认证中才能接受它。截至今天,这是 Chrome 版本号:62.0.3202.94
我的例子很容易使用命令和配置文件:
添加这些文件,这个例子都在一个根目录中
配置文件
[ 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
Run Code Online (Sandbox Code Playgroud)
运行命令创建证书:
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'
Run Code Online (Sandbox Code Playgroud)
对于macs只添加可信认证(必填):
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ./certificate.pem
Run Code Online (Sandbox Code Playgroud)
对于 Windows,您必须找到如何在本地独立验证我们的 ssl 证书。我不使用 Windows。对不起 windows 伙计们和 gals。
我正在使用带有 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);
Run Code Online (Sandbox Code Playgroud)
将来我可能会为其他后端框架执行此操作,因此我可以在将来为其他人更新此示例。但这是我在 Node.js 中针对该问题的修复。清除浏览器缓存并在 https:// 上运行您的应用程序
下面是在 Node.js 服务器上为 Mac 用户运行https://localhost的示例:
https://github.com/laynefaler/Stack-Overflow-running-HTTPS-localhost
快乐编码!
当我尝试在浏览器中导入证书时,它对我不起作用......在 chrome 中打开开发人员工具 > 安全性,然后选择查看证书。单击详细信息选项卡并将其导出。
// Linux
sudo apt-get install libnss3-tools
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n [EXPORTED_FILE_PATH] -i [EXPORTED_FILE_PATH]
Run Code Online (Sandbox Code Playgroud)
运行此命令,如果您看到您刚刚导入的文件,您就可以开始了!
certutil -d sql:$HOME/.pki/nssdb -L
Run Code Online (Sandbox Code Playgroud)
// 窗户
Start => run => certmgr.msc
Run Code Online (Sandbox Code Playgroud)
在左侧选择受信任的根证书颁发机构 => 个人。单击操作选项卡 => 所有操作/导入,然后选择您之前从浏览器导出的文件
别忘了重启chrome!!!
祝你好运!;)
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
)
Run Code Online (Sandbox Code Playgroud)
对于Fedora,Ubuntu,Linux,如果example.com Not a Certification authority使用gui添加证书以添加新的根权限时遇到错误。如果您想信任服务器自签名证书,则它不能提及无效的授权 ...即使是它本身。我只能通过信任我的授权并使用该授权密钥来签署服务器证书来使其正常工作。
这是它接受的自签名CA证书。这是我发现可以解决问题的唯一方法,我花cert_authority_invalid了好几个小时试图让它接受自签名的终点证书,没有雪茄。只要声明了,UI就会接受自签名的权限CA:TRUE。之后,Chrome会接受该密钥使用正确的DN签名的所有证书,而无需单独添加它们。
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果那不起作用:
chrome://restart 实际重启
尝试使用firefox获取有关该错误的更多详细信息,它倾向于更好地解释错误...虽然chrome会说ERR_CERTIFICATE_INVALID,但firefox会抛出: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的https://blogs.oracle.com/meena/about-trust-flags-of-certificates-in-nss-database-that-can-be-be-can-modified-by-certutil
对于Firefox,添加例外证书的UI确实可以工作,一旦您这样做,它将信任它。
也许您有一些时髦的设置/etc/pki/tls/openssl.cnf可以与您的配置合并。
也许您没有在配置或命令行中添加扩展名,例如v3_req
请注意,我的方法通过仅使用授权密钥对证书签名并添加开发服务器的详细信息来绕过CSR的需要。CSR允许更多的密钥以实现实际的安全性。
我尝试了所有操作,但是chrome需要具有基本约束CA:true设置的权限。服务器证书必须全部由有效的授权机构签发……即使那只是用CA:true自己签名的另一个证书。
要在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!!
Run Code Online (Sandbox Code Playgroud)
完成此操作后,证书将被保存到“ 个人\证书”存储下的“本地计算机”证书中。
您要将此证书复制到“ 受信任的根证书颁发机构\证书”存储。
一种方法是:单击Windows“开始”按钮,然后键入certlm.msc。然后,根据以下屏幕截图,将新创建的证书拖放到“ 受信任的根证书颁发机构\证书”存储中。

Filippo Valsorda编写了一个跨平台工具,mkcert用于许多信托商店。我想他之所以写它,是由于这个问题有很多答案的原因:对由受信任的根CA签名的SubjectAltName证书执行“正确”的事情很痛苦。
mkcert Windows,macOS和几种Linux版本的主要程序包管理系统中都包含该程序。
证书
mkcert是制作本地信任的开发证书的简单工具。它不需要任何配置。Run Code Online (Sandbox Code Playgroud)$ 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" ?
这里我的WINDOWS解决方案可能适用于 LINUX
Git 有 openssl
C:\Program Files\Git\usr\bin\openssl.exe。
导航到 C:\Program Files\Git\usr\bin\ 但最好添加到 PATH
为证书创建一个文件夹
创建一个文件 req.cnf
更改像我公司一样的值
不要删除
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
Chrome 抱怨
C = CA
CA 是两个字母的国家/地区代码 CA=加拿大、美国...
ST = ON 是省份 ON = 安大略省
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = CA
ST = ON
L = Toronto
O = MyCompany
OU = MyDivision
CN = localhost
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = www.mydomainname.com
DNS.3 = mydomainname.com
Run Code Online (Sandbox Code Playgroud)
在CMD中创建证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt -config req.cnf -sha256
cat server.crt server.key > server.pem
Run Code Online (Sandbox Code Playgroud)
覆盖开发者证书
yourproject\node_modules\webpack-dev-server\ssl with the **server.pem**
Run Code Online (Sandbox Code Playgroud)
在 chrome 设置 -> 管理证书中
将server.crt导入受信任的证书授权 重新启动 chrome
在package.json中
"scripts": {
"start": "set HTTPS=true&&react-scripts start",
Run Code Online (Sandbox Code Playgroud)
我刚刚allow-insecure-localhost在 Chrome 中启用了标志,仅此而已。
脚步。
chrome://flags您的 chrome 选项卡。allow-insecure-localhost标志并启用它。现在您将不会看到 https://localhost 站点的不安全警告。
| 归档时间: |
|
| 查看次数: |
1070106 次 |
| 最近记录: |