索引
先解释一下什么是Let’s Encrypt。这是一个让所有人免费用上https证书的机构,可以通过命令在linux机器直接生成证书供网站使用。每个证书最长90天有效期。
所以文本就介绍如何申请、如何自动更新证书。
首次配置
参考:
# 用于在Let's Encrypt申请证书的账号 openssl genrsa 4096 > account.key # 网站私钥 openssl genrsa 4096 > domain.key # 下面这两个命令,挑选一个使用 # openssl > 1.1.1使用: openssl req -new -sha256 -key domain.key -subj "/" -addext "subjectAltName = DNS:yoursite.com, DNS:www.yoursite.com" > domain.csr # 我的腾讯云服务器使用了下面这个 # openssl < 1.1.1使用(这个ssl配置文件路径因不同机器可能不同,多找找,例如/etc/ssl/openssl.cnf、/usr/local/openssl/ssl/openssl.cnf): openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /usr/local/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:geekgao.cn,DNS:www.geekgao.cn")) > domain.csr mkdir -p /var/www/challenges/
# 配置好nginx,因为Let's Encrypt要请求来验证这个域名在你的控制范围内 server { listen 80; server_name yoursite.com www.yoursite.com; # 为了得到证书 location /.well-known/acme-challenge/ { alias /var/www/challenges/; try_files $uri =404; } # 确保其他路径转到https去处理 location / { return 301 https://$host$request_uri; } ...the rest of your config }
# 让上面的nginx配置生效 nginx -s reload # 获取acme_tiny.py脚本 wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py # 申请证书,这步结束就有证书了,把signed_chain.crt和domain.key配置在nginx内即可! python acme_tiny.py --account-key account.key --csr domain.csr --acme-dir /var/www/challenges/ > signed_chain.crt
配置自动更新
证书只有90天有效期,配置好脚本让服务器自动获取新的证书,解放双手。
#!/usr/bin/sh python /root/cert/acme_tiny.py --account-key /root/cert/account.key --csr /root/cert/domain.csr --acme-dir /var/www/challenges/ > /root/cert/signed_chain.crt.tmp || exit mv /root/cert/signed_chain.crt.tmp /root/cert/signed_chain.crt nginx -s reload
# crontab -e,每月1号凌晨1点50自动更新(随便写的时间,防止和其他太多人一起请求新证书网络拥挤) 50 1 9 * * /root/cert/renew_cert.sh 2>> /root/cert/acme_tiny.log
原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2581