前言
一直想擼一下https瓣窄,最近剛好有點(diǎn)空尝胆,就實(shí)現(xiàn)了一下桩皿。之前看過一篇教你快速擼一個免費(fèi)HTTPS證書的文章霞捡,通過Certbot
來管理Let's Encrypt
的證書,使用前需要安裝一堆庫苫幢,覺得不太友好。所謂條條大路通羅馬垫挨,肯定還有其他方法可以做這個事情韩肝。
經(jīng)過一番研究,發(fā)現(xiàn)了 acme.sh 這個庫棒拂,這個是用Shell腳本編寫的伞梯,不需要安裝其他東西玫氢,比較純凈,覺得比較適合自己谜诫,記錄一下過程漾峡。
準(zhǔn)備工作
- 一個已解析好的域名(可以用http來訪問)。
- 開啟服務(wù)器的443端口防火墻喻旷。
步驟
一生逸、安裝acme.sh
curl https://get.acme.sh | sh
這個命令后會將acme.sh安裝到~/.acme.sh/
目錄下
重新載入~/.bashrc
source ~/.bashrc
二、生成證書
acme.sh --issue -d www.your-domin.com --webroot /srv/your-domin.com/
這個命令的意思是用http方式將www.your-domin.com生成一個證書且预,/srv/your-domin.com/
是你的網(wǎng)站根目錄槽袄。(這個過程中acme.sh
會全自動的生成驗(yàn)證文件, 并放到網(wǎng)站的根目錄, 然后自動完成驗(yàn)證. 最后又自動刪除驗(yàn)證文件.)
三、安裝或copy證書到nginx目錄
默認(rèn)生成的證書都放在安裝目錄下: ~/.acme.sh/锋谐,這個目錄一般來說不能讓nginx或Apache直接使用遍尺。所以我們需要將證書放到一個指定的目錄,習(xí)慣是放在/etc/nginx/ssl/
目錄下涮拗。acme提供了--installcert來安裝證書乾戏,只需指定目標(biāo)位置, 然后證書文件會被copy到相應(yīng)的位置。
先確保存在/etc/nginx/ssl/
目錄
mkdir /etc/nginx/ssl
copy證書并指定nginx reload命令
acme.sh --installcert -d www.your-domin.com \
--key-file /etc/nginx/ssl/www.your-domin.com.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"
service nginx force-reload是為了在讓acme自動更新時候能夠重啟nginx使得證書生效三热。執(zhí)行完命令可以在/etc/nginx/ssl/
看到多了www.your-domin.com.key
和www.your-domin.com.cer
的文件鼓择。
四、生成 dhparam.pem 文件
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
這一步不是必須就漾,但最好加上呐能,后面配置好后會通過ssllabs.com 來驗(yàn)證一下,如果這一步ssl_dhparam 未配置抑堡,將導(dǎo)致 ssllabs.com 的評分降到 B摆出。A+是最好。
五夷野、配置nginx
證書已安裝完畢懊蒸,接下來就是讓nginx來使用這個證書了。由于我這個服務(wù)器有幾個站點(diǎn)悯搔,而目前只是一個站點(diǎn)配置了證書骑丸,因此只修改當(dāng)前站點(diǎn)的conf即可
server {
listen 80;
server_name www.your-domin.com;
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
ssl_certificate /etc/nginx/ssl/www.your-domin.com.cer;
ssl_certificate_key /etc/nginx/ssl/www.your-domin.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
...
}
ssl_prefer_server_ciphers on;
這個配置能提高證書的評分。
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
能提高證書評分妒貌,這個文件是在第四步時生成的通危,若沒有做則不需要寫這句。
nginx -t
驗(yàn)證一下nginx配置是否正確灌曙,然后systemctl restart nginx
重啟一下nginx菊碟,就可以用https://www.your-domin.com測試一下你的站點(diǎn)啦。
六在刺、證書更新
Let's Encrypt 的證書有效期是 90 天的逆害,需要定期重新申請头镊,不過acme在安裝的時候就已經(jīng)設(shè)置了自動更新,所以這一步不用關(guān)心魄幕,很省心相艇。
這里了解一下acme.sh的自動更新:安裝acme時會自動為你創(chuàng)建 cronjob, 每天 0:00 點(diǎn)自動檢測所有的證書, 如果快過期了, 需要更新, 則會自動更新證書.
查看任務(wù)
# crontab -l
47 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
手動renew一下證書可以通過這個命令
acme.sh --cron -f
七、設(shè)置軟件自動更新
目前由于 acme 協(xié)議和 letsencrypt CA 都在頻繁的更新, 因此 acme.sh 也經(jīng)常更新以保持同步.所以為了省心省力纯陨,最好還是設(shè)置一下軟件的自動更新坛芽,執(zhí)行下面的命令就可以了。
acme.sh --upgrade --auto-upgrade
其他
在這個網(wǎng)站可以驗(yàn)證一下你的證書級別翼抠,根據(jù)我上面的配置可以評級為A咙轩。
https://www.ssllabs.com/ssltest/analyze.html?d=www.fengxianqi.com