系統改造Https方案


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保護的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容