制作适用于chrome58版本之后的https证书

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。

上一篇
下一篇