之前生成是代码签名证书,现在生成的是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证书在上,中间证书在下.