Http的裸奔特質已經被越來越多的人所了解,當前從Http轉向Https已經是大勢所趨。google和百度相繼宣布支持Https, 並且承諾在搜索結果中,Https網站會獲得更好的排名。本文將以nginx服務器為例,介紹快速從http轉https網站的完整步驟。
第一步:獲得Https證書
- 進入專業Https服務站certbot.eff.org,如下圖所示,選擇服務器類型和操作係統版本。看是否有滿足您操作係統環境和服務要求的版本。本文以centos/nginx為例做說明。特別難能可貴的是:這個網站提供的https證書是免費的!連注冊啥的都不需要,零門檻!
假設我們選擇的是centos7+nginx(當然其他服務器類型apache/http也可以!)
- 安裝certbot程序,這個程序用來給網站下載安裝Https證書。
sudo yum install certbot
- 執行certbot certonly獲取證書。一次可以為多個域名獲取證書。其中/var/www/example和/var/www/thing/分別是網站根目錄, example.com/www.examplec.com/thing.is/m.thing.is是域名。
- 已經開啟Http服務的情況下, 執行下麵的命令,需要保證網站根目錄下的有.well-known/目錄且可以訪問。
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is
注1:安裝的過程根據提示輸入自己的郵箱。
注2:如果提示.well-known不能訪問,在nginx配置中加入:location ~ /.well-known { allow all;}
- 沒有開啟Http服務的情況下,執行下麵的命令(推薦)。
certbot certonly --standalone -d example.com -d www.example.com
- 執行上麵的命令之後,Http證書就成功安裝了,一般位於:/etc/letsencrypt/目錄,詳見安裝提示。
- 已經開啟Http服務的情況下, 執行下麵的命令,需要保證網站根目錄下的有.well-known/目錄且可以訪問。
- Https證書一般90天過期,所以需要設置自動更新證書。
- 更新證書的命令
certbot renew --dry-run
- 一般在crontab中設置定期執行renew程序,實現Https證書自動更新。下麵的命令是每天6:30/18:30點更新。
30 6,18 * * * certbot renew --quiet
- 更新證書的命令
- 到這裏,Https證書就安裝成功了。注意:上麵的步驟除了centos+nginx,也支持其他係統。
第二步:配置nginx服務器支持Https
- 在服務器nginx配置中加入下麵的代碼即可。注意:1)Https監聽的端口是443;2)初一將域名改成你自己的。
server { listen 443 ssl; server_name vimsky.com alias www.vimsky.com; root /usr/share/nginx/html/vimsky; access_log /etc/nginx/logs/www.vimsky.com-access.log; error_log /etc/nginx/logs/www.vimsky.com-error.log; # Nginx Https關鍵配置,開始位置 #ssl (其實實際是tls) ssl on; ssl_prefer_server_ciphers on; # 支持的加密協議 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 支持的加密套件 ssl_ciphers HIGH:!RC4:!3DES:!aDSS:!aNULL:!kPSK:!kSRP:!MD5:@STRENGTH:+SHA1:+kRSA; # 定義session緩存大小 ssl_session_cache shared:TLSSL:16m; # 定義session過期時間 ssl_session_timeout 20m; # https證書公鑰 ssl_certificate /etc/letsencrypt/live/vimsky.com/fullchain.pem; # https證書私鑰 要注意保存! ssl_certificate_key /etc/letsencrypt/live/vimsky.com/privkey.pem; # nginx默認會使用Diffiel-Hellman交換密鑰是1024位的,相對不安全,所以需要替換使用更安全的。 #使用 openssl dhparam -out dh4096.pem 4096 可以生成,然後我將其與網站證書的密鑰放到了一起, 暫時不啟用這個 #ssl_dhparam /etc/letsencrypt/live/vimsky.com/dh4096.pem; # 禁止被外站frame嵌入引用 add_header X-Frame-Options SAMEORIGIN; # 為響應頭添加要求瀏覽器使用https重定向的 header add_header Strict-Transport-Security max-age=16000000; # Nginx Https關鍵配置,結束位置 location / { # 後麵的配置無關Https省略了.....
- 注意上麵秘鑰的生成,是使用命令:
openssl dhparam -out dh4096.pem 4096
- 配置好之後,重啟nginx服務器:
service nginx restart
第三步:這是可選步驟,將Http重定向到Https,網站同時支持Http和Https是沒有問題的,全部轉到Https更好。
配置如下:
server{
listen 80;
server_name vimsky.com alias www.vimsky.com;
return 301 https://vimsky.com$request_uri;
}
到這裏,網站從Http轉到Https就全部完成了。
延伸閱讀: 你的https網站真的安全嗎?