WhatAKitty Daily

A Programmer's Daily Record

使用Let's Encrypt进行HTTPS部署

WhatAKitty   阅读次数loading...

在部署站点之后,为了安全性考虑,给自己的博客站点增加了HTTPS证书。而对于个人而言,Let’s Encrypt是最合适的选择。下面记录一下本次HTTPS证书的部署过程。

创建账户

1
openssl genrsa 4096 > account.key

创建CSR文件

创建RSA私钥

1
openssl genrsa 4096 > blog.domain.key

创建CSR文件

1
openssl req -new -sha256 -key blog.domain.key -subj "/" -reqexts SAN -config <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:xuqiang.me,DNS:blog.xuqiang.me,DNS:blog.gonode.cn,DNS:blog.whatakitty.com")) > blog.domain.csr

配置验证服务

因为使用Let’s Encrypt服务创建HTTPS证书的时候,需要对网站所有权进行验证,我们使用证书工具进行证书生成的时候,工具会自动在配置的路径中生成随机文件进行校验
所以需要配置验证路径:

1
2
mdkir /path/to/web/document/.well-known
mkdir /path/to/web/document/.well-known/acme-challenge

获取网站证书

我们使用acme_tiny.py脚本直接获取网站证书
获取python脚本

1
wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py

指定账户私钥、CSR 以及验证目录,执行脚本

1
python acme_tiny.py --account-key ./account.key --csr ./blog.domain.csr --acme-dir /path/to/web/document/.well-known/acme-challenge/ > ./blog.domain.crt

在执行后,会在当前目录下生成blog.domain.crt文件,这个就是申请后的证书文件
之后下载中间证书

1
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem

根据中间证书和根证书生成最终的证书

1
cat blog.domain.crt intermediate.pem > chained.pem

将生成的证书chained.pem和blog.domain.key配置到对应的HTTP服务器的配置文件中。
之后重启HTTP服务器即可
现在输入https域名,即可正常访问,效果如下:
upload successful

自动续期

因为证书本身只有90天有效期,所以可以使用自动化工具,自动对证书续期。

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

#create dirs
mkdir /path/to/web/document/.well-known
mkdir /path/to/web/document/.well-known/acme-challenge

cd /path/to/web/ssl/
python acme_tiny.py --account-key ./account.key --csr ./blog.domain.csr --acme-dir /path/to/web/document/.well-known/acme-challenge/ > ./blog.domain.crt || exit
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat blog.domain.crt intermediate.pem > chained.pem
/path/to/apache/bin/httpd -k restart

将以上保存为renew.sh文件
对该文件做计划任务crontab -e
输入内容

1
0 0 1 * * /path/renew_cert.sh >/dev/null 2>&1

每个月都会进行一次自动更新

参考资料

https://imququ.com/post/letsencrypt-certificate.html