HTTPS
HTTPS便是HTTP Over SSL,使用SSL協議來加密HTTP通訊過程。SSL協議本質上是提供了一個加密通道,我們在這個通道中傳輸HTTP,便是HTTPS協議。
證書
要想進行SSL通信,服務器需要有一個權威機構認證的證書。證書是一個二進制文件,里面包含有一些信息(服務器的公鑰,域名,有效時間等)。證書分為很多類型,首先分為三級認證:
- 域名認證(Domain Validation, DV):最低級的認證,CA只檢查申請者擁有某個域名,對于這種證書,瀏覽器會在地址欄顯示一把綠色的小鎖。
- 組織認證(Organization Validation, OV):CA除了檢查域名所有權以外,還會審核組織信息。對于這類認證,瀏覽器會在地址欄中顯示公司信息。
- 擴展認證(Extended Validation, EV):最高級別的認證,相比于組織認證,CA會對組織信息進行更加嚴格的審核。
很顯然,認證級別越高,覆蓋范圍越廣,證書價格越貴。本方案以騰訊云提供的域名型DV SSL為例。So Let's qcloud ssl~~
配置過程
申請證書
通過騰訊云控制臺的SSL證書管理界面,便可免費申請DV SSL。申請完后需進行域名驗證。通過添加域名解析指定的DNS記錄驗證您的域名所有權,指定如主機記錄 –> TXT記錄類型 –> 記錄值的解析格式。域名驗證成功后,便可以下載SSL證書。
配置Nginx
上傳證書到服務器后,便可配置nginx采用上傳的證書文件并開啟https。注意安裝nginx時要額外添加ssl模塊:
./configure --with-http_ssl_module
Nginx開啟https配置如下:
server {
listen 80;
server_name www.lwblog.site;
#使用 301 重定向,將 HTTP 協議的訪問導向 HTTPS 協議。
return 301 https://$server_name$request_uri;
}
server {
# SSL Configuration
listen 443 ssl;
server_name www.lwblog.site;
ssl on;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# specify cert files
ssl_certificate /usr/local/nginx/conf/conf.d/1_www.lwblog.site_bundle.crt;
ssl_certificate_key /usr/local/nginx/conf/conf.d/2_www.lwblog.site.key;
location / {
root html;
index index.html index.htm;
}
}
重啟nginx,nginx -s relaod。
開啟443端口
/sbin/iptables -I INPUT -p tcp --dport 443 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables restart
再次訪問便可以看到網站一啟用了https。
安全措施
訪問網站時,用戶很少直接在地址欄輸入https://,總是通過點擊鏈接,或者3xx重定向,從HTTP頁面進入HTTPS頁面。攻擊者完全可以在用戶發出HTTP請求時,劫持并篡改該請求。
另一種情況是惡意網站使用自簽名證書,冒充另一個網站,這時瀏覽器會給出警告,但是許多用戶會忽略警告繼續訪問。
"HTTP嚴格傳輸安全"(簡稱 HSTS)的作用,就是強制瀏覽器只能發出HTTPS
請求,并阻止用戶接受不安全的證書。
它在網站的響應頭里面,加入一個強制性聲明。以下例子摘自維基百科
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
上面這段頭信息有兩個作用。
1 在接下來的一年(即31536000秒)中,瀏覽器只要向example.com或其子域名發送HTTP請求時,必須采用HTTPS來發起連接。用戶點擊超鏈接或在地址欄輸入http://www.example.com/,瀏覽器應當自動將http轉寫成https,然后直接向https://www.example.com/發送請求。
2 在接下來的一年中,如果example.com服務器發送的證書無效,用戶不能忽略瀏覽器警告,將無法繼續訪問該網站。
HSTS 很大程度上解決了 SSL 剝離攻擊。只要瀏覽器曾經與服務器建立過一次安全連接,之后瀏覽器會強制使用HTTPS,即使鏈接被換成了HTTP。
該方法的主要不足是,用戶首次訪問網站發出HTTP請求時,是不受HSTS保護的。