最近,Chrome已停止使用我的自签名SSL证书,并认为他们不安全。当我查看DevTools | Security
标签中的证书时,我可以看到它显示
主题备用名称缺失此站点的证书有 不包含包含域的主题备用名称扩展名 名称或IP地址。
证书错误网站的证书链存在问题 (净:: ERR_CERT_COMMON_NAME_INVALID)。
我该如何解决这个问题?
答案 0 :(得分:84)
要解决此问题,您需要在创建证书时向openssl
提供额外参数,基本上
-sha256 -extfile v3.ext
其中v3.ext
是这样的文件,%%DOMAIN%%
替换为您用作Common Name
的相同名称。更多信息here和over here。请注意,通常您需要将Common Name
和%%DOMAIN%%
设置为您尝试为其生成证书的域。因此,如果它是www.mysupersite.com
,那么您将两者都使用它。
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = %%DOMAIN%%
另一个注意事项 :如果您要查看自签名证书时阻止chrome抛出错误,您可以告诉Chrome忽略通过使用特殊命令行选项as detailed here on SuperUser
启动所有站点的所有SSL错误答案 1 :(得分:18)
以下解决方案适用于chrome 65(ref) -
创建一个OpenSSL配置文件(例如:req.cnf)
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = company.net
创建引用此配置文件的证书
openssl req -x509 -nodes -days 730 -newkey rsa:2048 \
-keyout cert.key -out cert.pem -config req.cnf -sha256
答案 2 :(得分:14)
我创建了 bash脚本,以便更轻松地生成在Chrome中有效的自签名TLS证书。
安装证书后,请务必重新启动chrome(chrome://restart
)。在Chrome 65.x
上进行了测试,它仍然有效。
值得一试的另一个(更强大的)工具是CloudFlare的cfssl
工具包:
答案 3 :(得分:4)
我只是使用-subj
参数添加机器IP地址。所以只用一个命令解决了。
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -sha256 -subj '/CN=my-domain.com/subjectAltName=DNS.1=192.168.0.222/' -keyout my-domain.key -out my-domain.crt
您可以添加其他属性,如C,ST,L,O,OU,emailAddress,以生成证书而不会被提示。
答案 4 :(得分:1)
在macOS / Chrome上使用自签名证书时,我遇到了很多问题。最终,我找到了Mkcert,“一个简单的零配置工具,可以使用您想要的任何名称制作本地信任的开发证书。” https://github.com/FiloSottile/mkcert
答案 5 :(得分:0)
我能够通过更改v3.ext文件的DNS.1值来摆脱(net :: ERR_CERT_AUTHORITY_INVALID)
[alt_names] DNS.1 = domainname.com
使用您自己的域名更改domainname.com。
答案 6 :(得分:0)
在 MAC 上 从Chrome版本67.0.3396.99开始,我的自签名证书停止工作。
使用此处编写的所有内容进行再生均无效。
更新
有机会对我的方法今天有效:)。如果对您不起作用,请确保您正在使用此方法
v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = <specify-the-same-common-name-that-you-used-while-generating-csr-in-the-last-step>
$
END UPDATE
最后,只有将我的证书从系统删除并添加到本地后,我才能看到绿色的安全证书。 >钥匙串。 (如果有,请先删除)。 不确定它是否有效,但就我而言,我是通过chrome下载的证书,并验证了创建日期是今天-所以它是我刚刚创建的日期。
希望这对某人花一天的时间会有所帮助。
从不更新Chrome!
答案 7 :(得分:0)
在您的主目录中复制您的OpenSSL配置:
cp /System/Library/OpenSSL/openssl.cnf ~/openssl-temp.cnf
或在Linux上:
cp /etc/ssl/openssl.cnf ~/openssl-temp.cnf
在openssl-temp.cnf
下的[v3_ca]
中添加使用者备用名称:
[ v3_ca ]
subjectAltName = DNS:localhost
用您要为其生成证书的域替换localhost
。
生成证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-config ~/openssl-temp.cnf
-keyout /path/to/your.key -out /path/to/your.crt
然后您可以删除openssl-temp.cnf
答案 8 :(得分:0)
这是创建Chrome将信任的IP证书的非常简单的方法。
ssl.conf文件...
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[ req_distinguished_name ]
commonName = 192.168.1.10
[ req_ext ]
subjectAltName = IP:192.168.1.10
其中192.168.1.10当然是我们希望Chrome信任的本地网络IP。
创建证书:
openssl genrsa -out key1.pem
openssl req -new -key key1.pem -out csr1.pem -config ssl.conf
openssl x509 -req -days 9999 -in csr1.pem -signkey key1.pem -out cert1.pem -extensions req_ext -extfile ssl.conf
rm csr1.pem
在Windows上,将证书导入到所有客户端计算机上的“受信任的根证书存储”中。在Android手机或平板电脑上,下载证书以进行安装。现在,Chrome将信任Windows和Android上的证书。
在Windows dev框中,获取openssl.exe的最佳位置是从“ c:\ Program Files \ Git \ usr \ bin \ openssl.exe”
答案 9 :(得分:0)
如果要运行服务器本地主机,则需要设置CN = localhost
和DNS.1 = localhost
。
[req]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
prompt = no
prompt = no
x509_extensions = v3_req
[req_distinguished_name]
C = BR
CN = localhost
emailAddress=contact@example.com
L = Sao Paulo
O = example.com
OU = example.com
ST = Sao Paulo
[v3_req]
authorityKeyIdentifier = keyid, issuer
basicConstraints = CA:FALSE
extendedKeyUsage = serverAuth
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
答案 10 :(得分:0)