在部署站点之后,为了安全性考虑,给自己的博客站点增加了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 | mdkir /path/to/web/document/.well-known |
获取网站证书
我们使用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域名,即可正常访问,效果如下:
自动续期
因为证书本身只有90天有效期,所以可以使用自动化工具,自动对证书续期。
1 | !/bin/bash |
将以上保存为renew.sh
文件
对该文件做计划任务crontab -e
输入内容
1 | 0 0 1 * * /path/renew_cert.sh >/dev/null 2>&1 |
每个月都会进行一次自动更新