轉(zhuǎn)載 原文地址
本文記錄了利用 Let’s Encrypt愿吹,免費(fèi)全站開啟 HTTPS 協(xié)議颜骤。
關(guān)于HTTPS
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer)稚铣,是以安全為目標(biāo)的HTTP通道,簡(jiǎn)單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL葛菇,因此加密的詳細(xì)內(nèi)容就需要SSL。
HTTPS優(yōu)勢(shì):安全傳輸橡羞,有效阻止運(yùn)營(yíng)商劫持并注入廣告眯停,以及提供 HTTP/2 協(xié)議的支持,詳情自行 Google
關(guān)于免費(fèi)證書發(fā)放機(jī)構(gòu)
Let’s Encrypt卿泽,是2016年4月12日成立的一家證書授權(quán)中心莺债,提供免費(fèi)的傳輸層安全(TLS)X.509證書,通過自動(dòng)化的過程消除目前安全網(wǎng)站證書需要手工創(chuàng)建签夭,加密齐邦,簽名,安裝以及更新的復(fù)雜性第租。
開啟 HTTPS 操作步驟如下 ↓
Let’s Encrypt 的官網(wǎng)提供了更為自動(dòng)化的腳本措拇,但本文借鑒的是作者:Macken 提供的方法,采用Github上的一個(gè)開源腳本acme-tiny慎宾。
本文基于社區(qū)企業(yè)操作系統(tǒng)CentOS
和高性能的HTTP和反向代理服務(wù)器Nginx
丐吓,其他Linux
版本理論上是可行的,但未嘗試趟据。
克隆腳本
? ~ sudo git clone https://github.com/diafygi/acme-tiny.git
? ~ cd acme-tiny // 下面的操作都在這個(gè)目錄券犁!
創(chuàng)建Let’s Encrypt私鑰
? ~ openssl genrsa 4096 > account.key
創(chuàng)建CSR(Certificate Signing Request,證書簽名請(qǐng)求) 文件
ACME協(xié)議 (Let’s Encrypt所使用的) 需要一個(gè)csr文件汹碱,用來進(jìn)行證書簽名和證書更新粘衬。
將需要加密的域名加到下面的代碼中,目前一張證書最多可以加密 100 個(gè)域名,足夠普通用戶使用:
// acme-tiny 目錄執(zhí)行
? ~ openssl genrsa 4096 > domain.key
? ~ openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:jandou.com,DNS:www.jandou.com")) > domain.csr
注意:openssl.cnf 文件的位置可能會(huì)因?yàn)閘inux版本的不同而有變稚新,自行搜索得到路徑 >>tips
證明你擁有該域名
acme-tiny腳本會(huì)生成驗(yàn)證文件并寫入到你指定的目錄下泼舱,然后通過 “.well-known/acme-challenge/“ 這個(gè)URL來訪問到驗(yàn)證文件。
注意:Let’s Encrypt 會(huì)對(duì)你的服務(wù)器做一次http請(qǐng)求來進(jìn)行驗(yàn)證枷莉,因此你需要保證80端口能夠訪問。
-
手動(dòng)生成challenges目錄尺迂,用來存放驗(yàn)證文件(路徑可以根據(jù)需要修改)
? ~ mkdir -p /var/www/challenges
-
配置nignx的80端口
修改
Nginx
默認(rèn)配置/usr/local/nginx/conf/nginx.conf
中的server
段笤妙,注意備份:server { listen 80; server_name jandou.com www.jandou.com; location /.well-known/acme-challenge/ { alias /var/www/challenges/; try_files $uri =404; } }
暫時(shí)清除虛擬主機(jī)配置
暫時(shí)清除虛擬主機(jī)配置,避免下一步獲取簽名證書 Download
失敗噪裕。
<div class="tip">注意:先備份蹲盘,再刪除/usr/local/nginx/conf/vhost/
下的虛擬配置。</div>
獲取簽名證書
//acme-tiny 目錄執(zhí)行
? ~ sudo chmod +x acme_tiny.py
? ~ python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /var/www/challenges/ > ./signed.crt
注意:如果下載出錯(cuò)膳音,則是Nginx的默認(rèn)配置有誤召衔,或虛擬主機(jī)配置沖突導(dǎo)致。
安裝證書
針對(duì)nginx, 你還需要將 Let’s Encrypt 的中間件證書 intermediate.pem 內(nèi)容附加在簽名證書signed.crt之后:
// acme-tiny 目錄執(zhí)行
? ~ wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
? ~ cat signed.crt intermediate.pem > chained.pem
成功之后祭陷,恢復(fù) Nginx
默認(rèn)配置和虛擬主機(jī)配置苍凛,并重啟 Nginx
? ~ lnmp reload // lnmp系列軟件全部重載
? ~ service nginx reload // 僅重啟 `Nginx`
恭喜!你的網(wǎng)站已經(jīng)使用上了HTTPS兵志。 但Let’s Encrypt 證書有效期只有90天, 所以需要定期更新〈己現(xiàn)在只需要寫一個(gè)更新腳本并把它放到定時(shí)任務(wù)中即可 >> tips
Tips
-
搜索文件技巧
//根目錄搜索`nginx.conf` find / -name 'nginx.conf'
-
證書自動(dòng)更新定時(shí)任務(wù)
腳本
renew_cert.sh
負(fù)責(zé)一鍵更新,我將其存放在root
目錄下想罕,腳本內(nèi)容:!/usr/bin/sh python /root/openssl/acme-tiny/acme_tiny.py --account-key /root/openssl/acme-tiny/account.key --csr /root/openssl/acme-tiny/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 > /root/openssl/acme-tiny/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
如果沒有定時(shí)更新悠栓,可以直接執(zhí)行該腳本
. renew_cert.sh
可能 Download 失敗,參考上面配置nignx的80端口按价,修改
Nginx
默認(rèn)配置惭适。
參考
鳴謝:Let’s Encrypt,站點(diǎn)加密之旅 laravel-china.org (如遇到問題可參考該鏈接下的討論)
原稿:Let’s Encrypt楼镐,站點(diǎn)加密之旅