本地看到https的小绿锁【改】——你们Chrome真的很严格

三年前写了一篇博客讲如何建立自签名的CA给本地https调试时候用。没想到最近没用了。看到 https://127.0.0.1 的前面再次打上了一条红色的斜线还有“不安全”三个大字,心里很不是滋味。

查了一下发现你们Chrome现在不许在使用者name里直接写IP了,而且域名和ip都要写到Altername里去。于是就来说说怎么重新看到https的小绿锁。

没读过三年前那篇文章的读者,千万不要去看!只看这篇就够了!


先来存一个root ca的配置文件,保存成 ca.cnf 。对应项大家看着改改。其中countryName是国家名,只能两个字母。最好查查对应国家的两字母简称名。下面的字符串的名字都可以随便写。

[ req ]
distinguished_name  = req_distinguished_name
x509_extensions     = root_ca

[ req_distinguished_name ]
countryName             = CN
countryName_min         = 2
countryName_max         = 2
stateOrProvinceName     = Shanghai
localityName            = Pudong
0.organizationName      = Noname Kani\'s Aiai Sub
organizationalUnitName  = Software Imports
commonName              = nonamekanica.cyaron.moe
commonName_max          = 64
emailAddress            = [email protected]
emailAddress_max        = 64

[ root_ca ]
basicConstraints            = critical, CA:true

然后在安装好openssl工具的bash命令行下执行下面的命令:

openssl req -x509 -newkey rsa:2048 -out ca.crt -outform PEM -keyout ca.key -days 10000 -verbose -config ca.cnf -nodes -sha256 -subj \"/CN=Noname Kani\'s Aiai Sub ROOT CA\"

执行完毕之后本地会多出两个文件:ca.crt 就是根证书,ca.key 就是ROOT CA的私钥。

然后按照正常流程给域名发request,因为我们这次把127.0.0.1写在alt name里,所以CN我就写了localhost。

openssl req -newkey rsa:2048 -keyout server.key -out server.req -subj \"/CN=localhost\" -sha256 -nodes

同样这个执行完后也会多出两个文件:server.req Request文件,和 server.key 服务器私钥

然后写一个扩展文件,保存成 localhost.ext,如果还有其他的IP和域名就按照这个格式继续往下加

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

[alt_names]
DNS.1   = localhost
DNS.2   = localkani.cyaron.moe
IP.1   = 127.0.0.1

最后用CA证书和CA私钥给req文件签发证书:

openssl x509 -req -CA ca.crt -CAkey ca.key -in server.req -out server.crt -days 3650 -extfile localhost.ext -sha256 -set_serial 0x1111

-set_serial 后面是证书的序号,可以随便设。

就这样了。这段执行完后就会签出server.crt,拿着这个文件和上一步生成的key和再上一步生成的根证书就可以去部署服务器了。

测试了一下,完美绿锁。

图我就不贴了,反正也没人看。