创建一个 Let’s Encrypt 账户私钥
1 | mkdir -p /acme-tiny/account |
创建网站域名私钥
1 | mkdir -p /acme-tiny/domain |
创建申请域名证书的请求文件(CSR)
单个域名申请,以open.service.lee23.top
为例
1 | cd /acme-tiny/domain |
多个域名同时申请,以open.service.lee23.top
,open.source.lee23.top
,blog.lee23.top
为例
1 | cd /acme-tiny/domain |
备注:
/etc/pki/tls/openssl.cnf
是openssl
的配置文件位置,不同系统可能位置不同,可以通过命令openssl version -a
查看,其中OPENSSLDIR
就是openssl.cnf
的位置目录
配置一个让 Let’s Encrypt 能验证你拥有域名所有权的服务
我们用csr通过acme-tiny的脚本申请证书时,先在服务器上生成一个随机验证文件,Let’s Encrypt通过创建 CSR 时指定的域名访问该文件,如果可以访问则表明你对这个域名有控制权
创建验证目录
1 | mkdir -p /www/challenge |
Nginx 服务配置,让 Let’s Encrypt 能访问验证文件,创建challenge.conf
1 | location /.well-known/acme-challenge/ { |
Nginx 引入challenge.conf
1 | server { |
获取签名证书
我们用acme-tiny获取签名证书
1 | cd /acme-tiny |
用python的docker镜像运行脚本,不用再单独安装python,但需要安装docker
1 | docker run -it --rm --name acme-tiny-script -v /acme-tiny:/acme-tiny -w /acme-tiny python:2 python /acme-tiny/acme-script/acme_tiny.py --account-key /acme-tiny/account/lets.encrypt.account.key --csr /acme-tiny/domain/lee23.top.csr --acme-dir /www/challenge/ > /acme-tiny/domain/lee23.top.signed.crt |
备注:
-v
docker目录映射-w
docker工作目录--account-key
Let’s Encrypt账户私钥 lets.encrypt.account.key--csr
创建域名证书申请的请求文件 lee23.top.csr--acme-dir
Let’s Encrypt验证域名所有权目录lee23.top.signed.crt
生成的证书文件,该文件里有打印脚本执行过程,可打开查看debug,若没报错,则证明一切顺利,debug记录无需删除
crt 转化成 pem 文件,得到SSL证书的最终文件lee23.top.chained.pem
1 | yum install -y ca-certificates |
Nginx配置SSL证书
创建SSL配置lee23.top.ssl.conf
1 | #证书和域名私钥,尽量不要写绝对路径,有可能报错,如果证书和私钥不在工作目录,可以用脚本cp过去 |
备注:
ssl_certificate
SSL证书pem文件位置ssl_certificate_key
域名私钥位置
新增Nginx配置,端口为443,引入SSL配置
1 | server { |
原来的80端口的Nginx配置不能删除,并配置强制跳转443端口,即强制跳转https (可选)
1 |
|
备注:
强制跳转443端口的代码段须配置在
challenge.conf
下面,避免Let’s Encrypt 验证域名所有权失败
配置自动更新证书
把上面的主要流程写进脚本 refresh.lee23.top.ssl.sh
1 |
|
备注
/usr/local/nginx/sbin/nginx -s reload
Nginx配置重载
配置crontab
定时执行脚本自动更新证书,证书有效期3个月,我们每个月28日更新一次
1 | 0 0 28 * * /acme-tiny/refresh-ssl/refresh.lee23.top.ssl.sh 2>> /acme-tiny/refresh-ssl/refresh.lee23.top.error.log |
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章