1、生成根证书密钥
#] openssl genrsa -des3 -out ca.key 2048
2、自签证书
#] openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
参数说明:
req: 生成证书签署请求
-news: 新请求
-key /path/to/keyfile: 指定私钥文件
-out /path/to/somefile:
-x509: 生成自签署证书
-days n: 有效天数
3、准备必要文件:
#] touch /etc/pki/CA/{index.txt,serial}
#] echo 01 > /etc/pki/CA/serial
4、制作网站证书并用此CA签名,假设网站域名为web1
生成证书密钥:
#] openssl genrsa -des3 -out web1.pem 1024
制作解密后的web1证书私钥:
#] openssl rsa -in web1.pem -out web1.key
生成签名请求,在common name中填入网站域名,如web1即可生成改站点的证书,同时也可以使用泛域名如*.web1来生成所有二级域名可用的网站证书:
#] openssl req -new -key web1.pem -out web1.csr
用CA进行签名:
#] openssl ca -policy policy_anything -days 365 -cert ca.crt -keyfile ca.key -in web1.csr -out web1.crt
其中,policy参数允许签名的CA和网站证书可以有不同的国家、地名等信息,days参数则是签名时限。
最后,把ca.crt的内容粘贴到web1.crt后面。这个比较重要!因为不这样做,可能会有某些浏览器不支持。
5、配置nginx支持https
在nginx.conf配置文件server配置中增加一下配置:
listen 443;
ssl on;
ssl_certificate /path/to/web1.crt;
ssl_certificate_key /path/to/web1.key;
其中的路径是刚刚生成的网站证书的路径。
然后使用一下命令检测配置和重新加载nginx:
检测配置:
nginx -t
重新加载:
nginx -s reload
6、优化nginx配置
在http{}中加入:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
据官方文档所述,cache中的1m可以存放4000个session。
在配置https的虚拟主机server{}中加入:
keepalive_timeout 70;
7、客户端浏览器导入根证书和网站证书
打开证书管理工具:运行certmgr.msc命令(也可以在浏览器中导入证书)
将根证书ca.crt导入至受信任的根证书颁发机构,网站证书web1.crt导入到个人正式中。
然后在浏览器中输入https://domain,地址栏左侧会出现一把绿色的锁,如下图: