使用OpenSSL创建自签名CA证书链
受信任的CA都是那些具有公信力机构创建的,自签名的CA本质是与那些受信任的CA没有区别,只是因为自签名的CA并没有默认添加在浏览器或操作系统的信任列表里。
1.生成自签署CA
openssl req -new -x509 -days 3650 -keyout ca.key -out ca.crt -config openssl.cnf
#需要填写一些信息,执行完后,将生成ca.key和ca.crt文件。
2.生成server.key
openssl genrsa -out server.key 2048
3.生成证书签名请求
openssl req -new -key server.key -out server.csr -config openssl.cnf
#Common Name如有多个提示输入,每次填写一个,如果没有那么多,可以直接回车
4.使用自签署的CA,签署server.scr
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
#输入CA的密码,一直按y就可以了
#server.crt server.key就是web服务器中使用的文件。
关于NGINX 双向认证
如果要做NGINX客户端证书验证的话,重复2、3、4,并执行下面命令生成个人证书:
openssl pkcs12 -export -inkey server.key -in server.crt -out server.p12
将个人证书导入pc,同时在nginx ssl基础上增加设置:
ssl_verify_client on;
ssl_client_certificate ca.crt;
关于多域名验证支持
通过修改配置模板,修改 openssl.cnf:
将文件中原来的
commonName = Common Name (eg, your name or your server\'s hostname)
commonName_max = 64
修改为
0.commonName = Common Name (eg, your name or your server\'s hostname)
0.commonName_max = 64
就是在前面加了个序号,有多少序号,便会形成多少次提示输入,前面的序号依次递增即可:
0.commonName = Common Name (eg, your name or your server\'s hostname)
0.commonName_max = 64
1.commonName = other Common Name
1.commonNAme_max = 64
......
修改后,在生成证书时,便会多次提示输入Common Name,每次输入一个域名即可。