HTTPS 那些事
鵝廠Bugly公眾號這篇《全站HTTPS來了》寫得比較全面了,不再廢話。
Let's Encrypt 介紹
Let's Encrypt 是一個(gè)免費(fèi)、開放,自動(dòng)化的證書頒發(fā)機(jī)構(gòu),由 ISRG(Internet Security Research Group)運(yùn)作。
ISRG 是一個(gè)關(guān)注網(wǎng)絡(luò)安全的公益組織,其贊助商從非商業(yè)組織到財(cái)富100強(qiáng)公司都有,包括 Mozilla、Akamai、Cisco、Facebook,密歇根大學(xué)等等。ISRG 以消除資金,技術(shù)領(lǐng)域的障礙,全面推進(jìn)加密連接成為互聯(lián)網(wǎng)標(biāo)配為自己的使命。
Let's Encrypt 項(xiàng)目于2012年由 Mozilla 的兩個(gè)員工發(fā)起,2014年11年對外宣布公開,2015年12月3日開啟公測。
Let's Encrypt 目前處于公測期間,文檔,工具還不完善,請謹(jǐn)慎用于生產(chǎn)環(huán)境。
Let's Encrypt ?指南
Let's Encrypt 安裝
Let's Encrypt 目前僅支持 Unix-like 系統(tǒng),需要 Python 2.6 或 2.7,暫不支持 Python 3。
可以使用 pip 安裝 Let's Encrypt 客戶端,或到其 wiki 上查看已打包的各操作系統(tǒng)安裝方式。
下面以官方推薦的 letsencrypt-auto 腳本為例進(jìn)行安裝:
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help
Let's Encrypt ?驗(yàn)證方式
Let's Encrypt 使用兩種方式對申請的域名進(jìn)行驗(yàn)證:
1、 手動(dòng)驗(yàn)證 按照提示在申請證書的服務(wù)器上使用一個(gè)指定的URL提供一個(gè)指定的文件內(nèi)容來進(jìn)行驗(yàn)證,進(jìn)行手動(dòng)驗(yàn)證的服務(wù)器IP地址會被 Let's Encrypt 服務(wù)端記錄在案。
2、 自動(dòng)驗(yàn)證 在 目標(biāo)服務(wù)器 (指域名解析對應(yīng)的IP地址的服務(wù)器,下同)上運(yùn)行客戶端,并啟動(dòng)一個(gè) 80 或 443 端口進(jìn)行自動(dòng)驗(yàn)證。包括獨(dú)立模式和其他web sever驗(yàn)證模式,在 Plugins 中詳細(xì)解釋
Let's Encrypt Plugins
Let's Encrypt 使用不同的 Plugins 來進(jìn)行證書的獲取和安裝
Manual
當(dāng)你在非 目標(biāo)服務(wù)器 上申請證書,或希望進(jìn)行手動(dòng)驗(yàn)證時(shí),可以使用 manual 插件,運(yùn)行命令:
$ ./letsencrypt-auto certonly --manual -d test.example.com
會得到提示:

選擇 Yes 繼續(xù)后,便會提示創(chuàng)建一個(gè)指定內(nèi)容的 URL 用來驗(yàn)證對域名及服務(wù)器的所有權(quán),注意這個(gè)URL仍然需要部署在 目標(biāo)服務(wù)器 上:
Make sure your web server displays the following content at
http://test.example.com/.well-known/acme-challenge/N4mCfskoOSX_7ikZDoEH3iyIqFAUg4Kdg36ecpeUwkw before continuing:
N4mCfskoOSX_7ikZDoEH3iyIqFAUg4Kdg36ecpeUwkw.J7NHjRSPwMW99A2XJv49FTnNu-MSCCebRjccMFZVRic
If you don't have HTTP server configured, you can run the following
command on the target server (as root):
mkdir -p /tmp/letsencrypt/public_html/.well-known/acme-challenge
cd /tmp/letsencrypt/public_html
printf "%s" N4mCfskoOSX_7ikZDoEH3iyIqFAUg4Kdg36ecpeUwkw.J7NHjRSPwMW99A2XJv49FTnNu-MSCCebRjccMFZVRic > .well-known/acme-challenge/N4mCfskoOSX_7ikZDoEH3iyIqFAUg4Kdg36ecpeUwkw
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"
Press ENTER to continue
Standalone
使用獨(dú)立模式進(jìn)行自動(dòng)驗(yàn)證,需要在 目標(biāo)服務(wù)器 上運(yùn)行 Let's Encrypt 客戶端,并指定 certonly 和 --standalone參數(shù)。本模式需要綁定 80 或 443 端口進(jìn)行域名驗(yàn)證,所以如果服務(wù)器上已有web server運(yùn)行并偵聽這2個(gè)端口,則需要先關(guān)閉web server。
Webroot
如果 目標(biāo)服務(wù)器 已有web server運(yùn)行,并且不能夠關(guān)閉服務(wù)來獲取和安裝證書,可以使用 Webroot plugin。在運(yùn)行 Let's Encrypt 客戶端時(shí)指定 certonly 和 --webroot 參數(shù),并使用 --webroot-path 或 -w 參數(shù)來指定 webroot 目錄,比如 --webroot-path /usr/share/nginx/html
Apache
Apache plugin 可以用來為 Apache 2.4 服務(wù)器自動(dòng)獲取和安裝證書,需要運(yùn)行在基于 Debian 的操作系統(tǒng)上,并且要求1.0+以上版本的 libaugeas0。如需要運(yùn)行 Apache plugin,在運(yùn)行客戶端時(shí)指定 --apache 參數(shù)。本 plugin 仍處在 Alpha 階段。
Nginx
Nginx plugin 用于為 Nginx 服務(wù)器自動(dòng)獲取和安裝證書,仍然處在實(shí)驗(yàn)階段,并且 letsencrypt-auto 沒有安裝這個(gè) plugin,如需使用,運(yùn)行 pip install letsencrypt-nginx 進(jìn)行安裝后,通過 --nginx 參數(shù)調(diào)用 plugin。
證書位置
所有版本已申請的證書放在 /etc/letsencrypt/archive下,/etc/letsencrypt/live是指向最新版本的符號鏈接。web server中關(guān)于證書的配置建議指向 live 目錄下的文件,以免證書更新后還需要更改配置。
每個(gè)域名一個(gè)目錄,主要包含以下幾個(gè)文件:
cert.pem 申請的服務(wù)器證書文件
privkey.pem 服務(wù)器證書對應(yīng)的私鑰
chain.pem 除服務(wù)器證書外,瀏覽器解析所需的其他全部證書,比如根證書和中間證書
fullchain.pem 包含服務(wù)器證書的全部證書鏈文件
證書更新
Let's Encrypt 頒發(fā)的服務(wù)器證書有效期為90天,官方表示此為出于安全原因,降低錯(cuò)發(fā)證書,證書泄漏的危害。通過自動(dòng)續(xù)期來解決有效期短的問題,官方建議每2個(gè)月更新證書。
如果到期沒有更新證書,CA會向申請證書時(shí)提交的郵件地址發(fā)送提醒email。
自動(dòng)續(xù)期可以使用 crontab 實(shí)現(xiàn)。注意更新證書后重啟 web server !
申請頻率限制
注冊IP限制:每IP每3個(gè)小時(shí)不超過10次
域名數(shù)量限制:每個(gè)域名(包含子域名)每7天不超過5個(gè)
安裝實(shí)踐
系統(tǒng)環(huán)境
Ubuntu 14.04.3 LTS x86_64
Nginx 1.9.3
Python 2.7.6
獲取證書
由于 www.saxieyu.com 的 nginx 已在運(yùn)行中,故使用 webroot 模式來獲取證書,使用命令:
$ ./letsencrypt-auto certonly --webroot --webroot-path /usr/share/nginx/html -d www.saxieyu.com --agree-tos --email admin@saxieyu.com
證書申請成功后會提示證書的文件路徑,以及證書到期時(shí)間:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.saxieyu.com/fullchain.pem. Your cert will
expire on 2016-04-01. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
配置Nginx
生成2048位 DH parameters:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048
接下來,修改 nginx 配置文件:
server {
listen 443 ssl;
server_name www.saxieyu.com;
ssl_certificate /etc/letsencrypt/live/www.saxieyu.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.saxieyu.com/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparams.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
……
}
配置 http 強(qiáng)制跳轉(zhuǎn)到 https:
server {
listen 80;
server_name www.saxieyu.com;
return 301 https://$server_name$request_uri;
}
驗(yàn)證服務(wù)器證書
如上修改過 nginx 配置,并 reload 過 nginx 服務(wù)后,使用瀏覽器訪問 https://www.saxieyu.com,驗(yàn)證服務(wù)器證書是否正確生效

查看服務(wù)器證書信息

使用 ssllabs 在線測試服務(wù)器證書強(qiáng)度及配置正確性
