09
2016
12

Let's Encrypt免费证书的NGINX应用案例

 1.要求

python(版本2.7以上)
openssl
 
2.准备
2.1 生成一个帐号私钥
# openssl genrsa 4096 > account.key
2.2 生成一个域名私钥
# openssl genrsa 4096 > domain.key
2.3 生成证书签名请求CSR文件,通常至少包含祼域名和带www主机名的两个域名。
# openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:lianglong.org,DNS:www.lianglong.org")) > domain.csr
 
其中openssl.cnf路径可根据自己的实际情况修改 或者直接搜索 find / -name "openssl.cnf"
域名也按照自己的实际情况修改
2.4 位于自己网站的根目录建立目录 /.well-known/acme-challenge/ ,即 http://domain/.well-known/acme-challenge/能访问到.
2.5 下载acme_tiny.py脚本(https://www.lianglong.org/upload/acme_tiny.py)
acme-tiny脚本会生成验证文件并写入到你指定的目录下,然后通过 ".well-known/acme-challenge/" 这个URL来访问到验证文件. 注意: Let's Encrypt 会对你的服务器做一次http请求来进行验证,因此你需要保证80端口能够访问.
2.6 生成signed.crt
# chmod +x acme_tiny.py  
# python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir DOCUMENTROOT/.well-known/acme-challenge/ > ./signed.crt
 
针对nginx, 你还需要将 Let's Encrypt 的中间件证书 intermediate.pem 内容附加在签名证书signed.crt之后:
# wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem  
# cat signed.crt intermediate.pem > chained.pem
 
利用domain.key和合成的chained.pem来配置你的nginx
server {
   listen 443;
   server_name lianglong.org www.lianglong.org;
 
   ssl on;
   ssl_certificate /path/to/chained.pem;
   ssl_certificate_key /path/to/domain.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
   ssl_session_cache shared:SSL:50m;
   ssl_prefer_server_ciphers on;
 
   #...你的其他配置
}
 
3.定时更新
恭喜!你的网站已经使用上了HTTPS。 但Let's Encrypt 证书有效期只有90天, 所以需要定期更新。现在只需要写一个更新脚本并把它放到定时任务中即可。
 
#!/usr/bin/sh
python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir DOCUMENTROOT/.well-known/acme-challenge/ > ./signed.crt || exit
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat signed.crt intermediate.pem > chained.pem
 
定时任务可以设置为每个月执行一次:
0 0 1 * * /path/to/renew_cert.sh 2>> /var/log/acme_tiny.log
 
« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。