免费https证书-Let’s Encrypt证书申请并自动更新
http是明文通讯,十分的不安全。而且有可能被无良运营商劫持。
https是在http的基础上增加了SSL加密。使得通讯变的安全。
Let’s Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务。
主要赞助商包括电子前哨基金会,Mozilla基金会,Akamai以及思科。
2015年4月9日,ISRG与Linux基金会宣布合作。
Let’s Encrypt可免费为我们的域名颁发为期90天的https证书。到期后可以重新申请颁发。
Let’s Encrypt本身有自动话颁发工具“letsencrypt-auto”
具体可以到“https://github.com/letsencrypt/letsencrypt”查看
由于“letsencrypt-auto”不是很好用。所以本文主要介绍的是另外一种方案“acme-tiny”
以下是在centos6.5-x64 Python2.6环境下。
建立工作文件夹
mkdir /usr/local/letsencrypt/
mkdir -p /home/www/ssl/
生成账户私钥
openssl genrsa 4096 >/home/www/ssl/account.key
生成域名私钥("xx.com"替换成你自己的域名)
openssl genrsa 4096 >/home/www/ssl/xx.com.key
生成CSR 对于单个域名,执行下面命令 ("xx.com"替换成你自己的域名)
openssl req -new -sha256 -key /home/www/ssl/xx.com.key -subj "/CN=xx.com" > /home/www/ssl/xx.com.csr
对于多域名,执行下面命令("xx.com","yy.com"替换成你自己的域名)
openssl req -new -sha256 \
-key /home/www/ssl/xx.com.key \
-subj "/C=CN/ST=GuangDong/L=ShenZhen/O=EDA/OU=Devops/CN=xx.com" \
-reqexts SAN \
-config <(cat /etc/pki/tls/openssl.cnf \
<(printf "[SAN]\nsubjectAltName=DNS:xx.com,DNS:yy.com")) \
-out /home/www/ssl/xx.com.csr
新建认证用的文件夹。
mkdir -p /home/www/freessl
配置nginx:
在server字段新建一个location
location /.well-known/acme-challenge/ {
alias /home/www/freessl/;
try_files $uri =404;
}
验证域名所有者,就是通过在 /.well-known/acme-challenge/里写文件,然后通过公网来访问,看能不能访问到来判断的。
记得修改/home/www文件夹所有者为nginx的运行用户。
chown -R nginx:nginx /home/www
切换到工作目录
cd /usr/local/letsencrypt/
克隆letsencrypt项目
git clone https://github.com/diafygi/acme-tiny
然后执行
python2.6 /usr/local/letsencrypt/acme-tiny/acme_tiny.py --account-key /home/www/ssl/account.key --csr /home/www/ssl/xx.com.csr --acme-dir /home/www/freessl/ > /home/www/ssl/xx.com.crt
即可生成证书。
最终证书和key路径为:
crt文件:/home/www/ssl/xx.com.crt
key文件:/home/www/ssl/xx.com.key
由于证书有效期为90天。可以写个脚本。定时每月1号执行一次。
vim /usr/local/sh/upssl.sh
#!/bin/bash
#删除旧的证书文件
rm -rf /tmp/xx.com.crt
rm -rf /tmp/intermediate.pem
mv /usr/local/letsencrypt/acme-tiny/xx.com.crt /usr/local/letsencrypt/acme-tiny/xx.com.crt.bak
#运行证书申请
/usr/bin/usr/bin/python2.6 /usr/local/letsencrypt/acme-tiny/acme_tiny.py --account-key /home/www/ssl/account.key --csr /home/www/ssl/san.csr --acme-dir /home/www/freessl/ > /tmp/san.crt
#下载中间证书
wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > /tmp/intermediate.pem
#合并证书
cat /tmp/xx.com.crt /tmp/intermediate.pem > /home/www/ssl/xx.com.crt
#重启nginx
/sbin/service nginx restart
crontab -e
0 0 1 * * /scripts/upssl.sh
如果遇到错误:
Traceback (most recent call last):
File "/usr/local/letsencrypt/acme-tiny/acme_tiny.py", line 2, in
import argparse, subprocess, json, os, sys, base64, binascii, time, hashlib, re, copy, textwrap, logging
ImportError: No module named argparse
是因为缺少python-argparse 执行
yum install python-argparse

本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
本文出自阿伟的博客,转载时请注明出处及相应链接。
本文永久链接: https://blog.awei.me/lets-encrypt-ssl-autoupdate/
2条评论
暂时还没有考虑HTTPS,相比于HTTP,HTTPS的优势只是安全吗?
除了安全、http2目前主流浏览器只支持https形式的http2。这也是上https的一个主要推动力