背景
為什么要使用https?
- https可以有效避免無良運(yùn)營商的DNS劫持,可以顯著提升網(wǎng)站逼格彩郊。
- 使用https已經(jīng)是大勢所趨,人心所向,iOS甚至強(qiáng)制要求開發(fā)者使用https磺樱。
為什么要使用Let's Encrypt
?
- 而對于個(gè)人開發(fā)者而言,https證書太貴婆咸,一般都好幾千一年竹捉。
- Let's Encrypt免費(fèi)開源無疑是一個(gè)不錯(cuò)的選擇。
本文將記錄藍(lán)眼博客 (https://blog.eyeblue.cn) 搭建https的整個(gè)過程尚骄。網(wǎng)上有很多使用let's encrypt
代碼生成證書块差,或者使用Certbot來生成證書,但是筆者覺得都沒有直接借助 https://freessl.org/ 來生成證書方便快捷倔丈。
獲取證書
1.填寫域名
打開網(wǎng)站 https://freessl.org/ 填寫自己的域名憨闰,你將看到下圖。這里我們填入 blog.eyeblue.cn
,同時(shí)在下方勾選 Let's Encrypt
,然后點(diǎn)擊“創(chuàng)建免費(fèi)的SSL證書”按鈕即可
2.填寫郵箱乃沙,選擇證書類型起趾,驗(yàn)證類型和CSR生成方式
填寫自己的郵箱
證書品牌只能選擇
Let's Encrypt
證書類型選擇
ECC
。這里主要是選擇數(shù)字簽名的算法警儒,對于普通用戶使用默認(rèn)的ECC
即可训裆。如果需要根據(jù)自己的具體情境來選擇,一般有以下選擇依據(jù):
(1) RSA簽名算法適合于:Verify操作頻度高蜀铲,而Sign操作頻度低的應(yīng)用場景边琉。比如,分布式系統(tǒng)中基于capability的訪問控制就是這樣的一種場景记劝。
(2) ECDSA簽名算法適合于:Sign和Verify操作頻度相當(dāng)?shù)膽?yīng)用場景变姨。比如,點(diǎn)對點(diǎn)的安全信道建立厌丑。
- 驗(yàn)證類型使用
DNS
的方式定欧。
其實(shí)驗(yàn)證類型用來確定你是否是這個(gè)域名的所有者,確認(rèn)的方式有兩種:
1.DNS怒竿。 CA(Certificate Authority 數(shù)字證書認(rèn)證機(jī)構(gòu))將通過查詢 DNS 的 TXT 記錄來確定您對該域名的所有權(quán)砍鸠,因此需要在域名管理平臺(tái)將生成的 TXT 記錄名與記錄值添加到該域名下。
2.文件耕驰。CA 將通過訪問特定 URL 地址來驗(yàn)證您是否有改域名的所有權(quán)爷辱。因此,您需要下載給頂?shù)尿?yàn)證文件,并上傳到您的服務(wù)器饭弓。
- CSR生成選擇
瀏覽器生成
双饥。一般的瀏覽器都支持Web Cryptography
,直接使用默認(rèn)的瀏覽器生成
最方便弟断。
下圖便是我的填寫咏花,填好之后點(diǎn)擊“點(diǎn)擊生成”按鈕。
3.進(jìn)行DNS驗(yàn)證
3.1 在第2步中點(diǎn)擊按鈕后夫嗓,會(huì)彈出下圖內(nèi)容:
3.2 這時(shí)只需要去域名解析控制臺(tái)添加一條TXT的解析記錄即可迟螺。我的域名在阿里云冲秽,因此解析詳情如下圖所示:
完成解析后舍咖,點(diǎn)擊3.1中的“點(diǎn)擊驗(yàn)證”按鈕
4.下載證書
在點(diǎn)擊第3步的按鈕后,會(huì)彈出證書文件下載的按鈕锉桑,此時(shí)點(diǎn)擊“下載證書”即可獲得證書文件full_chain.pem
和私鑰文件private.key
排霉。
配置nginx
nginx的配置如下:
server{
# 監(jiān)聽443端口
listen 443 ssl;
# 域名,如果有多個(gè)空格隔開
server_name blog.eyeblue.cn;
# 啟用ssl
ssl on;
# 證書文件的放置路徑民轴。證書文件即通過上文《獲取證書》的方式獲得攻柠。
ssl_certificate /data/security/letsencrypt/blogeyebluecn/full_chain.pem;
# 私鑰文件的放置路徑。
ssl_certificate_key /data/security/letsencrypt/blogeyebluecn/private.key;
# 藍(lán)眼博客的服務(wù)運(yùn)行在端口6020
location / {
proxy_pass http://127.0.0.1:6020;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass_request_headers on;
client_max_body_size 8m;
}
}
#對于通過http來訪問藍(lán)眼博客的請求后裸,我們默認(rèn)讓其跳轉(zhuǎn)到https. 這樣保持了http訪問的兼容性瑰钮。
server {
listen 80;
server_name blog.eyeblue.cn;
rewrite ^(.*)$ https://blog.eyeblue.cn$1 permanent;
}
修改了配置文件后記得
service nginx restart
驗(yàn)證
打開網(wǎng)頁https://blog.eyeblue.cn
,即可看到地址欄中綠色的小鎖微驶,證明https已經(jīng)成功開啟浪谴。即時(shí)你輸入http://blog.eyeblue.cn
也會(huì)自動(dòng)轉(zhuǎn)跳到https
下的,如此便保證了兼容性因苹。
維護(hù)
Let's Encrypt
證書的有效期只有三個(gè)月苟耻,這就需要我們每隔一段時(shí)間就去更新一下證書,好在https://freessl.org/
可以幫我們管理證書扶檐,注冊登錄之后便可以看到我們的證書管理界面如下:
參考文章
原文發(fā)表于藍(lán)眼博客:https://blog.eyeblue.cn/home/article/9f580b3f-5679-4a9d-be6f-4d9f0dd417af