Let’s Encrypt HTTPS证书快速申请并自动续期

思路来自古博,利用的是acme-tiny脚本,需要自备VPS(搭建好了LNMP),且域名要指向它
PS:彩伞空间也可以使用这个来生成证书。

  • 使用前请批量替换以下字段为自己的:
    1. 网站存储路径:/home/wwwroot/ss-cat.top
    2. 证书存储路径:/home/ssl/ss-cat.top/
    3. 使用域名地方:ss-cat.top
    4. 日志存放路径:/home/log/acme_tiny.log

规划存放证书的路径

  • 此例中定为/home/ssl/ss-cat.top/
mkdir /home/ssl/ss-cat.top/
cd /home/ssl/ss-cat.top/

基本设置生成KEY文件

  • 生成account.key, domain.key and dhparam.pem三个文件
yum install openssl
openssl genrsa 2048 > account.key
openssl genrsa 2048 > domain.key
openssl dhparam -out dhparam.pem 2048
  • 生成domain.csr
openssl req -new -sha256 -key domain.key -subj "/CN=ss-cat.top" > domain.csr

Nginx配置文件及验证

  • 在文件中添加下列内容,其中alias /home/wwwroot/ss-cat.top/ 请填写自己的网页文件所在地
server {
    listen 80;
    server_name ss-cat.top;

    location /.well-known/acme-challenge/ {
        alias /home/wwwroot/ss-cat.top/;
        try_files $uri =404;
    }

    #The rest of your Nginx config,你其余的Nginx配置文件
}

获取acme-tiny脚本

利用此脚本可以自动进行注册账号,验证域名及签发证书

  • 安装所需的git工具
apt-get install git
  • 获取Let’s Encrypt申请脚本
git clone https://github.com/diafygi/acme-tiny.git
cd /home/ssl/ss-cat.top/acme-tiny/
  • 自动进行注册账号,验证域名及签发证书
python acme_tiny.py --account-key /home/ssl/ss-cat.top/account.key --csr /home/ssl/ss-cat.top/domain.csr --acme-dir /home/wwwroot/ss-cat.top/ > /home/ssl/ss-cat.top/signed.crt
  • 获取并合并证书
cd /home/wwwroot/ss-cat.top/
wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > intermediate.pem
cat signed.crt intermediate.pem > chained.pem

至此,证书文件已经取得,如果是要安装在其他主机上,请自行通过winscp下载这些文件即可。

VPS配置HTTPS的教程

server {
    listen 443;
    server_name ss-cat.top;

    ssl on;
    ssl_certificate /home/ssl/ss-cat.top/chained.pem;
    ssl_certificate_key /home/ssl/ss-cat.top/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_dhparam /home/ssl/ss-cat.top/dhparam.pem;
    ssl_prefer_server_ciphers on;

    #The rest of your Nginx config,你其余的Nginx配置文件
}

关于将HTTP请求自动跳转到HTTPS,参考这里

自动续期证书脚本

建立自用的一键脚本

vi /home/ssl/ss-cat.top/renew_cert.sh
  • 其实就是上面步骤的命令合体。路径还是/home/ssl/ss-cat.top/,内容如下:
#!/usr/bin/sh
cd /home/ssl/ss-cat.top/acme-tiny/
# Register account, verify the domain and sign the certificate,自动进行注册账号,验证域名及签发证书
python acme_tiny.py --account-key /home/ssl/ss-cat.top/account.key --csr /home/ssl/ss-cat.top/domain.csr --acme-dir /home/ssl/ss-cat.top/ > /home/ssl/ss-cat.top/signed.crt
# Get and combine the intermediate into chained.pem,获取并合并证书
cd /home/ssl/ss-cat.top/
wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > intermediate.pem
cat signed.crt intermediate.pem > chained.pem
service nginx reload
  • 提权
chmod -R 755 renew_cert.sh

建立Cron任务:

  • 每月更新一次,续期脚本结果作为日志输出在/home/log/acme_tiny.log
# example line in your crontab (runs once per month)
0 0 1 * * bash /home/ssl/ss-cat.top/renew_cert.sh 2>> /home/log/acme_tiny.log
# restart Nginx to load the new certificate
10 0 1 * * /etc/init.d/nginx restart

启用HTTPS访问和HTTP/2的好处在于防止运营商劫持插入广告,加快网站载入速度。这是未来互联网的趋势,建议大家尽快部署。

参考教程