原文網址:https://coolshell.cn/articles/18094.htmlcss
今天,我把CoolShell變成https的安全訪問了。我認可這件事有點晚了,由於以前的HTTP的問題也有網友告訴我,被國內的電信運營商在訪問個人網站時加入了一些彈窗廣告。另外,HTTP的網站在搜索引擎中的rank會更低。因此,這事早就應該幹了。如今用HTTP訪問CoolShell會被獲得一個 301 的HTTPS的跳轉。下面我分享一下啓用HTTPS的過程。html
我用的是 Let’s Encrypt這個免費的解決方案。Let’s Encrypt 是一個於2015年推出的數字證書認證機構,將經過旨在消除當前手動建立和安裝證書的複雜過程的自動化流程,爲安全網站提供免費的SSL/TLS證書。這是由互聯網安全研究小組(ISRG – Internet Security Research Group,一個公益組織)提供的服務。主要贊助商包括電子前哨基金會,Mozilla基金會,Akamai以及Cisco等公司(贊助商列表)。python
2015年6月,Let’s Encrypt獲得了一個存儲在硬件安全模塊中的離線的RSA根證書。這個由IdenTrust證書籤發機構交叉簽名的根證書被用於簽署兩個證書。其中一個就是用於簽發請求的證書,另外一個則是保存在本地的證書,這個證書用於在上一個證書出問題時做備份證書之用。由於IdenTrust的CA根證書目前已被預置於主流瀏覽器中,因此Let’s Encrypt簽發的證書能夠從項目開始就被識別並接受,甚至當用戶的瀏覽器中沒有信任ISRG的根證書時也能夠。nginx
以上介紹文字來自 Wikipedia 的 Let’s Encrypt 詞條。shell
爲你的網站來安裝一個證書十分簡單,只須要使用電子子前哨基金會EFF的 Certbot,就能夠完成。apache
1)首先,打開 https://certbot.eff.org 網頁。瀏覽器
2)在那個機器上圖標下面,你須要選擇一下你用的 Web 接入軟件 和你的 操做系統。好比,我選的,nginx
和 Ubuntu 14.04
緩存
3)而後就會跳轉到一個安裝教程網頁。你就照着作一遍就行了。安全
以Coolshell.cn爲例 – Nginx + Ubuntubash
首先先安裝相應的環境:
1
2
3
4
5
|
$
sudo
apt-get update
$
sudo
apt-get
install
software-properties-common
$
sudo
add-apt-repository ppa:certbot
/certbot
$
sudo
apt-get update
$
sudo
apt-get
install
python-certbot-nginx
|
而後,運行以下命令:
1
|
$
sudo
certbot --nginx
|
certbot
會自動檢查到你的 nginx.conf
下的配置,把你全部的虛擬站點都列出來,而後讓你選擇須要開啓 https 的站點。你就簡單的輸入列表編號(用空格分開),而後,certbot 就幫你下載證書並更新 nginx.conf
了。
你打開你的 nginx.conf
文件 ,你能夠發現你的文件中的 server
配置中可能被作了以下的修改:
1
2
3
4
|
listen 443 ssl;
# managed by Certbot
ssl_certificate
/etc/letsencrypt/live/coolshell
.cn
/fullchain
.pem;
# managed by Certbot
ssl_certificate_key
/etc/letsencrypt/live/coolshell
.cn
/privkey
.pem;
# managed by Certbot
include
/etc/letsencrypt/options-ssl-nginx
.conf;
# managed by Certbot
|
和
1
2
3
4
|
# Redirect non-https traffic to https
if
($scheme !=
"https"
) {
return
301 https:
//
$host$request_uri;
}
# managed by Certbot
|
這裏建議配置 http2,這要求 Nginx 版本要大於 1.9.5。HTTP2 具備更快的 HTTPS 傳輸性能,很是值得開啓(關於性能你能夠看一下這篇文章)。須要開啓HTTP/2其實很簡單,只須要在 nginx.conf
的 listen 443 ssl;
後面加上 http2
就行了。以下所示:
1
2
3
4
|
listen 443 ssl http2;
# managed by Certbot
ssl_certificate
/etc/letsencrypt/live/coolshell
.cn
/fullchain
.pem;
# managed by Certbot
ssl_certificate_key
/etc/letsencrypt/live/coolshell
.cn
/privkey
.pem;
# managed by Certbot
include
/etc/letsencrypt/options-ssl-nginx
.conf;
# managed by Certbot
|
而後,就 nginx -s reload
就行了。
可是,Let’s Encrypt 的證書90天就過時了,因此,你還要設置上自動化的更新腳本,最容易的莫過於使用 crontab
了。使用 crontab -e
命令加入以下的定時做業(每月都強制更新一下):
1
2
|
0 0 1 * *
/usr/bin/certbot
renew --force-renewal
5 0 1 * *
/usr/sbin/service
nginx restart
|
固然,你也能夠天天凌晨1點檢查一下:
1
|
0 1 * * * certbot renew
|
注:crontab 中有六個字段,其含義以下:
這麼方便的同時,我不由要問,若是是一些惡意的釣魚網站也讓本身的站點變成https的,這個對於通常用來講就有點難以防範了。哎……
固然,在nginx或apache上啓用HTTPS後,尚未結束。由於你可能還須要修改一下你的網站,否則你的網站在瀏覽時會出現各類問題。
啓用HTTPS後,你的網頁中的全部的使用 http://
的方式的地方都要改爲 https://
否則你的圖片,js, css等非https的鏈接都會致使瀏覽器抱怨不安全而被block掉。因此,你還須要修改你的網頁中那些 hard code http://
的地方。
對於我這個使用wordpress的博客系統來講,有這麼幾個部分須要作修改。
1)首先是 wordpress的 常規設置中的 「WordPress 地址」 和 「站點地址」 須要變動爲 https 的方式。
2)而後是文章內的圖片等資源的連接須要變動爲 https 的方式。對此,你可使用一個叫 「Search Regex」 插件來批量更新你歷史文章裏的圖片或別的資源的連接。好比:把 http://coolshell.cn
替換成了 https://coolshell.cn
3)若是你像我同樣啓用了文章緩存(我用的是WP-SuperCache插件),你還要去設置一下 「CDN」 頁面中的 「Site URL」 和 「off-site URL」 確保生成出來的靜態網頁內是用https作資源連接的。
基本上就是這些事。但願你們都來把本身的網站更新成 https 的。
嗯,12306,你何時按照這個教程作一下你的證書?