克隆腳本
sudo git clone https://github.com/diafygi/acme-tiny.git
cd acme-tiny
創(chuàng)建Let's Encrypt私鑰
openssl genrsa 4096 > account.key
創(chuàng)建CSR(Certificate Signing Request,證書簽名請(qǐng)求) 文件
openssl genrsa 4096 > domain.key
openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:yoursite.com,DNS:www.yoursite.com")) > domain.csr
注意:openssl.cnf 文件的位置可能會(huì)因?yàn)閘inux版本的不同而有變
證明你擁有該域名
acme-tiny腳本會(huì)生成驗(yàn)證文件并寫入到你指定的目錄下,然后通過(guò) ".well-known/acme-challenge/" 這個(gè)URL來(lái)訪問(wèn)到驗(yàn)證文件. 注意: Let's Encrypt 會(huì)對(duì)你的服務(wù)器做一次http請(qǐng)求來(lái)進(jìn)行驗(yàn)證,因此你需要保證80端口能夠訪問(wèn).
手動(dòng)生成challenges目錄,用來(lái)存放驗(yàn)證文件(路徑可以根據(jù)需要修改)
mkdir -p /var/www/challenges
配置nignx的80端口
server {
listen 80;
server_name yoursite.com www.yoursite.com;
# 讓 Let's Encrypt 成功訪問(wèn)到驗(yàn)證文件不受 301 影響
if ( $request_uri !~ "/.well-known/acme-challenge/*" ) {
# 注意進(jìn)行301重定向到https,否則通過(guò)http仍能訪問(wèn)你的站點(diǎn)
return 301 https://yoursite.com$request_uri;
}
location /.well-known/acme-challenge/ {
alias /var/www/challenges/;
try_files $uri =404;
}
#...你的其他配置
}
重要-重啟nginx
service nginx restart
獲取簽名證書
sudo chmod +x acme_tiny.py
sudo python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /var/www/challenges/ > ./signed.crt
安裝證書
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat www.crt intermediate.pem > www.pem
server {
listen 443;
server_name yoursite.com www.yoursite.com;
ssl on;
ssl_certificate /path/to/chained.pem;
ssl_certificate_key /path/to/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_prefer_server_ciphers on;
#...你的其他配置
}
證書自動(dòng)更新定時(shí)任務(wù)
恭喜!你的網(wǎng)站已經(jīng)使用上了HTTPS。 但Let's Encrypt 證書有效期只有90天, 所以需要定期更新?,F(xiàn)在只需要寫一個(gè)更新腳本并把它放到定時(shí)任務(wù)中即可。
腳本內(nèi)容:
#!/usr/bin/sh
python /path/to/acme_tiny.py --account-key /path/to/account.key --csr /path/to/domain.csr --acme-dir /var/www/challenges/ > /tmp/signed.crt || exit
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat /tmp/signed.crt intermediate.pem > /path/to/chained.pem
service nginx reload
定時(shí)任務(wù)可以設(shè)置為每個(gè)月執(zhí)行一次:
0 0 1 * * sudo bash /path/to/renew_cert.sh 2>> /var/log/acme_tiny.log