2018-07 from–https://blog.csdn.net/c_base_jin/article/details/81229643
Chrome58以后对https的证书认证较为严格,证书里必须带有正确的Common Name,也就是必须有DNS Name=ajax.googleapis.com, IP Address=127.0.0.1这样的信息,浏览器才认为真正安全。
制作步骤
(1)安装或者编译一个OpenSSL, 在bin目录里有OpenSSL可执行程序 (Linux, Windows, MacOX 都可以的)
(2)修改openssl.cnf文件。
在[ req ]一节下找到req_extensions = v3_req 取消注释(去掉#号)
在[ v3_req ] 一节 增加 subjectAltName = @alt_names
在[ v3_req ] 一节 的上方增加一节
[ alt_names ]
DNS.1 = ajax.googleapis.com
DNS.2 = localhost
IP.1 = 127.0.0.1
IP.2 = 192.168.11.70
1
2
3
4
5
6
7
8
9
10
11
12
13
(3)输入制作证书命令
//想知道这些命令的详细含义,可以在网上搜索资料“用OpenSSL生成Nginx证书”
openssl genrsa -des3 -out googleapis.key 2048
openssl req -new -sha256 -key googleapis.key -out googleapis.csr //这一步会填一些东西,随便填
cp googleapis.key googleapis.key.old
openssl rsa -in googleapis.key.old -out googleapis.key //从秘钥中移除密码
openssl x509 -req -days 3650 -in googleapis.csr -signkey googleapis.key -out googleapis.cer -extensions v3_req -extfile C:/openssl_out/ssl/openssl.cnf (linux:/usr/ssl/openssl.cnf)
1
2
3
4
5
6
7
8
9
10
11
(4)安装googleapis.cer到系统中(Windows的是双击,选择“受信任的根证书颁发机构”)
(5)把googleapis.key和googleapis.cer的路径配置到nginx服务器里或者需要使用的地方
验证结果
查看证书 应该包含 基本约束,密钥约束和使用者可选名称这3项, 使用者可选名称里有DNS.1 = ajax.googleapis.com这样的内容,浏览器访问https://ajax.googleapis.com是绿色的锁,如下图:
from–https://www.codenong.com/43665243/
关于谷歌浏览器:无效的自签名SSL证书 – “主题备用名称丢失”
2019-08-27
google-chromehttpspkixssl
Invalid self signed SSL cert – “Subject Alternative Name Missing”
最近,Chrome已停止使用我自己签署的SSL证书,并认为它们不安全。 当我在DevTools | Security标签中查看证书时,我可以看到它说
Subject Alternative Name Missing The certificate for this site does
not contain a Subject Alternative Name extension containing a domain
name or IP address.
Certificate Error There are issues with the site’s certificate chain
(net::ERR_CERT_COMMON_NAME_INVALID).
我怎样才能解决这个问题?
相关讨论
要解决此问题,您需要在创建证书时为openssl提供额外的参数
-sha256 -extfile v3.ext
其中v3.ext是这样的文件,%%DOMAIN%%替换为您用作Common Name的相同名称。更多信息在这里和这里。请注意,通常您将Common Name和%%DOMAIN%%设置为您尝试为其生成证书的域。所以,如果它是www.mysupersite.com,那么你就可以使用它。
v3.ext
1
2
3
4
5
6
7
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = %%DOMAIN%%
注意:可以在此处找到解决此问题的脚本,并创建用于Chrome,Safari和Java客户端的完全受信任的ssl证书
另一个注意事项:如果你想要做的就是在查看自签名证书时阻止chrome抛出错误,你可以通过一个特殊的命令行选项告诉Chrome忽略所有站点的所有SSL错误,详见此处在SuperUser上
相关讨论
以下解决方案为我在chrome 65(ref)上工作 –
创建一个OpenSSL配置文件(例如:req.cnf)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[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
创建引用此配置文件的证书
1
2
openssl req -x509 -nodes -days 730 -newkey rsa:2048 \
-keyout cert.key -out cert.pem -config req.cnf -sha256
相关讨论
我创建了一个bash脚本,以便更轻松地生成在Chrome中有效的自签名TLS证书。
self-signed-tls bash script
安装证书后,请确保重新启动chrome(chrome://restart)。在Chrome 65.x上测试它仍然有效。
值得一试的另一个(更强大的)工具是CloudFlare的cfssl工具包:
cfssl
相关讨论
我只是使用-subj参数添加机器的ip地址。所以只用一个命令解决了。
1
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,以生成证书而不会被提示。
相关讨论
在主目录中制作OpenSSL配置的副本:
1
cp /System/Library/OpenSSL/openssl.cnf ~/openssl-temp.cnf
或者在Linux上:
1
cp /etc/ssl/openssl.cnf ~/openssl-temp.cnf
在[v3_ca]下将主题备用名称添加到openssl-temp.cnf:
1
2
[ v3_ca ]
subjectAltName = DNS:localhost
将localhost替换为要为其生成该证书的域。
生成证书:
1
2
3
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
在MAC上
从chrome版本67.0.3396.99开始,我的自签名证书停止工作。
所有写在这里的东西再生都没有用。
UPDATE
有机会确认我的方法今天有效:)。如果它不起作用,请确保您使用此方法
1
2
3
4
5
6
7
8
9
v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 =
$
从这里复制
Generate and import a Self-Signed SSL certificate on Mac OS X Sierra
结束更新
最后只有在从系统中删除我的证书时才能看到绿色安全,并将其添加到本地钥匙串。 (如果有的话 – 首先丢弃它)。不确定它是否匹配,但在我的情况下,我通过chrome下载了证书,并确认创建日期是今天 – 所以它是我刚创建的那个。
希望有人花一天时间来帮助它。
永远不会更新铬!
通过更改v3.ext文件的DNS.1值,我能够摆脱(net :: ERR_CERT_AUTHORITY_INVALID)
[alt_names]
DNS.1 = domainname.com
使用您自己的域名更改domainname.com。