HTTPS
HTTPS便是HTTP Over SSL,使用SSL協(xié)議來加密HTTP通訊過程。SSL協(xié)議本質(zhì)上是提供了一個(gè)加密通道,我們在這個(gè)通道中傳輸HTTP,便是HTTPS協(xié)議。
證書
要想進(jìn)行SSL通信,服務(wù)器需要有一個(gè)權(quán)威機(jī)構(gòu)認(rèn)證的證書。證書是一個(gè)二進(jìn)制文件,里面包含有一些信息(服務(wù)器的公鑰,域名,有效時(shí)間等)。證書分為很多類型,首先分為三級認(rèn)證:
- 域名認(rèn)證(Domain Validation, DV):最低級的認(rèn)證,CA只檢查申請者擁有某個(gè)域名,對于這種證書,瀏覽器會在地址欄顯示一把綠色的小鎖。
- 組織認(rèn)證(Organization Validation, OV):CA除了檢查域名所有權(quán)以外,還會審核組織信息。對于這類認(rèn)證,瀏覽器會在地址欄中顯示公司信息。
- 擴(kuò)展認(rèn)證(Extended Validation, EV):最高級別的認(rèn)證,相比于組織認(rèn)證,CA會對組織信息進(jìn)行更加嚴(yán)格的審核。
很顯然,認(rèn)證級別越高,覆蓋范圍越廣,證書價(jià)格越貴。本方案以騰訊云提供的域名型DV SSL為例。So Let's qcloud ssl~~
配置過程
申請證書
通過騰訊云控制臺的SSL證書管理界面,便可免費(fèi)申請DV SSL。申請完后需進(jìn)行域名驗(yàn)證。通過添加域名解析指定的DNS記錄驗(yàn)證您的域名所有權(quán),指定如主機(jī)記錄 –> TXT記錄類型 –> 記錄值的解析格式。域名驗(yàn)證成功后,便可以下載SSL證書。
配置Nginx
上傳證書到服務(wù)器后,便可配置nginx采用上傳的證書文件并開啟https。注意安裝nginx時(shí)要額外添加ssl模塊:
./configure --with-http_ssl_module
Nginx開啟https配置如下:
server {
listen 80;
server_name www.lwblog.site;
#使用 301 重定向,將 HTTP 協(xié)議的訪問導(dǎo)向 HTTPS 協(xié)議。
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
再次訪問便可以看到網(wǎng)站一啟用了https。
安全措施
訪問網(wǎng)站時(shí),用戶很少直接在地址欄輸入https://,總是通過點(diǎn)擊鏈接,或者3xx重定向,從HTTP頁面進(jìn)入HTTPS頁面。攻擊者完全可以在用戶發(fā)出HTTP請求時(shí),劫持并篡改該請求。
另一種情況是惡意網(wǎng)站使用自簽名證書,冒充另一個(gè)網(wǎng)站,這時(shí)瀏覽器會給出警告,但是許多用戶會忽略警告繼續(xù)訪問。
"HTTP嚴(yán)格傳輸安全"(簡稱 HSTS)的作用,就是強(qiáng)制瀏覽器只能發(fā)出HTTPS
請求,并阻止用戶接受不安全的證書。
它在網(wǎng)站的響應(yīng)頭里面,加入一個(gè)強(qiáng)制性聲明。以下例子摘自維基百科
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
上面這段頭信息有兩個(gè)作用。
1 在接下來的一年(即31536000秒)中,瀏覽器只要向example.com或其子域名發(fā)送HTTP請求時(shí),必須采用HTTPS來發(fā)起連接。用戶點(diǎn)擊超鏈接或在地址欄輸入http://www.example.com/,瀏覽器應(yīng)當(dāng)自動將http轉(zhuǎn)寫成https,然后直接向https://www.example.com/發(fā)送請求。
2 在接下來的一年中,如果example.com服務(wù)器發(fā)送的證書無效,用戶不能忽略瀏覽器警告,將無法繼續(xù)訪問該網(wǎng)站。
HSTS 很大程度上解決了 SSL 剝離攻擊。只要瀏覽器曾經(jīng)與服務(wù)器建立過一次安全連接,之后瀏覽器會強(qiáng)制使用HTTPS,即使鏈接被換成了HTTP。
該方法的主要不足是,用戶首次訪問網(wǎng)站發(fā)出HTTP請求時(shí),是不受HSTS保護(hù)的。