openssl 生成自签名多域名证书
文章目录
之前生成是代码签名证书,现在生成的是web服务器用的HTTPS证书.
目前web服务器证书分两种,分别是RSA和ECC.
公用配置文件
先创建一个配置文件multi-domain-https.cnf
两个都使用这个文件.
其中
DNS.1
DNS.2
就是你想要签名的证书.
可以加很多DNS.50都可以,理论上应该有个上限,具体不清楚.
生成的域名都支持通配符域名.
但是只能是*.getce.cn
不能是*.*.cn
不能是*
不能是*.*
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
commonName = Common Name (eg, your name or your server's hostname)
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
#证书吊销列表 CRL
crlDistributionPoints=@crl_section
#在线证书状态协议 OCSP
authorityInfoAccess=@ocsp_section
[ crl_section ]
#证书吊销列表地址
URI.0 = http://crl.getce.cn/inter/inter.crl
[ ocsp_section ]
#CA 证书
caIssuers;URI.0 = http://crl.getce.cn/inter/inter.crt
#验证地址
OCSP;URI.0 = http://ocsp1.getce.cn
[alt_names]
DNS.1 = houwei-tech.com
DNS.2 = *.houwei-tech.com
DNS.3 = yge.me
DNS.4 = *.yge.me
DNS.5 = getce.cn
DNS.6 = *.getce.cn
RSA证书
生成CSR和KEY文件
使用RSA2046加密
openssl req -passout 'pass:123456' -newkey rsa:2046 -keyout ./client_web/web.key -out ./client_web/web.csr -config ./multi-domain-https.cnf -extensions v3_req
终端会让你输入证书名,仅仅是一个名字,和网站域名没关系.
Common Name (eg, your name or your servers hostname) [] :
比如我输入的Y.A.K.E Web Cert
删除key密码(可选)
openssl rsa -in ./client_web/web.key -out ./client_web/web.key
终端会让你输入密码,也就是前面的123456.
生成最终证书
我这里使用faketime 伪造了起始时间.
faketime '2000-01-01 00:00:02' openssl x509 -req -sha256 -days 36522 -CAcreateserial -CA ./inter/inter.crt -CAkey ./inter/inter.key -in ./client_web/web.csr -out ./client_web/web.crt -extfile ./multi-domain-https.cnf -extensions v3_req
ECC证书
生成KEY
openssl ecparam -genkey -name prime256v1 -out ./client_web_ecc/web.key
这是无密码的,指定了ECC加密.
生成CSR
这步会让你在终端输入证书名字.
openssl req -new -key ./client_web_ecc/web.key -out ./client_web_ecc/web.csr -config ./multi-domain-https.cnf -extensions v3_req
终端会让你输入证书名,仅仅是一个名字,和网站域名没关系.
Common Name (eg, your name or your servers hostname) [] :
比如我输入的Y.A.K.E Web ECC Cert
生成证书
faketime '2000-01-01 00:00:02' openssl x509 -req -sha256 -days 36522 -CAcreateserial -CA ./inter/inter.crt -CAkey ./inter/inter.key -in ./client_web_ecc/web.csr -out ./client_web_ecc/web.crt -extfile ./multi-domain-https.cnf -extensions v3_req
和上面RSA证书命令一样.
注意下面其中
-CAcreateserial
-CA ./inter/inter.crt
-CAkey ./inter/inter.key
指定的是之前生成的中间证书.
可以看我之前的博文 --> openssl生成代码签名证书(中间证书篇)
测试证书信息
RSA
ECC
支持域名列表
可以看到我添加的6个域名都在上面.
证书时间也是1999年到2099年.
浏览器支持
实际上浏览器都支持,只要自己安装了CA证书后浏览器不会弹出证书错误.
但是firefox浏览器会有个提示(要手动浏览器地址栏的锁图标才会有提示,不主动显示.)
其他浏览器正常.没提示.
但是有个注意的,如果没有架设oscp服务器.
最好是需要自己合并证书web证书和中间链证书
顺序是web证书在上,中间证书在下.