无效的自签名SSL证书 - "主题备用名称缺失"

时间:2017-04-27 18:17:51

标签: google-chrome ssl https pkix

最近,Chrome已停止使用我的自签名SSL证书,并认为他们不安全。当我查看DevTools | Security标签中的证书时,我可以看到它显示

  

主题备用名称缺失此站点的证书有   不包含包含域的主题备用名称扩展名   名称或IP地址。

     

证书错误网站的证书链存在问题   (净:: ERR_CERT_COMMON_NAME_INVALID)。

我该如何解决这个问题?

11 个答案:

答案 0 :(得分:84)

要解决此问题,您需要在创建证书时向openssl提供额外参数,基本上

-sha256 -extfile v3.ext

其中v3.ext是这样的文件,%%DOMAIN%%替换为您用作Common Name的相同名称。更多信息hereover here。请注意,通常您需要将Common Name%%DOMAIN%%设置为您尝试为其生成证书的域。因此,如果它是www.mysupersite.com,那么您将两者都使用它。

v3.ext

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

[alt_names]
DNS.1 = %%DOMAIN%%

注意:解决此问题的脚本和create fully trusted ssl certs for use in Chrome, Safari and from Java clients can be found here

另一个注意事项 :如果您要查看自签名证书时阻止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证书。

  

self-signed-tls bash script

安装证书后,请务必重新启动chrome(chrome://restart)。在Chrome 65.x上进行了测试,它仍然有效。

值得一试的另一个(更强大的)工具是CloudFlare的cfssl工具包:

  

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

从这里复制 https://ksearch.wordpress.com/2017/08/22/generate-and-import-a-self-signed-ssl-certificate-on-mac-osx-sierra/

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 = localhostDNS.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)

2021 年 6 月更新 - Windows 10 - Chrome v91 答案是 Output in Dev-C++