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命令(也可以在浏览器中导入证书)

  使用自签的证书配置nginx的https_openssl

  将根证书ca.crt导入至受信任的根证书颁发机构,网站证书web1.crt导入到个人正式中。

  然后在浏览器中输入https://domain,地址栏左侧会出现一把绿色的锁,如下图:使用自签的证书配置nginx的https_tls_02