本地看到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和再上一步生成的根证书就可以去部署服务器了。
测试了一下,完美绿锁。
图我就不贴了,反正也没人看。