1. 程式人生 > >網站如何免費升級到HTTPS?

網站如何免費升級到HTTPS?

最近在做網站SSL升級,看似簡單的操作還是會遇到各種問題,現在和大家分享一下。

https

證書申請:

公司是創業公司,為了省成本準備申請免費證書,對比了一些證書商,最後選擇使用沃通wosign提供的證書服務,發現有不同配置的證書可以選擇:
EV SSL: 擴充套件驗證型SSL(Extended Validation SSL)
OV SSL: 機構驗證型SSL(Organization Validation SSL)
DV SSL: 域名驗證型SSL(Domain Validation SSL) 證書配置不同瀏覽器信任級別也不同,低配證書在瀏覽器安全級別設定過高時可能會有安全警告。
沒有錢,先選免費的DV型證書用著,等後續有財力後可以再提升配置,按流程申請好會有一個回執訂單,下載即可。

https

升級策略分析:

https比 http 要消耗更多cpu資源(主要是在建立連線,之後還要對內容加密),所以對普通網站,只需要對部分地方採用https即可,大部分開放內容是沒必要的。不過我們的業務場景為了提高網站可信度,採用的是全站https方案。

應用伺服器用的Nginx + Tomcat,只需要針對nginx這一側實現ssl即可(nginx和tomcat處於同一個區域網內,安全問題暫時忽略)使用者首先和Nginx建立連線,完成SSL握手,而後Nginx 作為代理以 http 協議將請求轉給 tomcat 處理,Nginx再把 Tomcat的輸出通過SSL 加密發回給使用者,Tomcat只是在處理 http 請求而已。因此,這種情況下不需要配置 Tomcat 的SSL,只需要配置 Nginx 的SSL。

https

nginx詳細配置

上線之前先本地環境測試,證書和本地域名不一致可以先手工新增列外,先驗證功能。
upstream mytomcats {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name local.domain.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
ssl on;
server_name local.domain.com;
ssl_certificate D:\\workspace\\nginx-1.6.3\\security\\local.crt;
ssl_certificate_key D:\\workspace\\nginx-1.6.3\\security\\local.key;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

location ~* \.(jpg|gif|png|swf|svg|map|ttf|woff|woff2|eot|otf|ico|txt|jpeg|html|htm|css|js|json|bmp)$ {
root D:\\workspace\\code\\main-server\\WebContent;
}
location / {
proxy_pass http://mytomcats;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}

本地服務執行後,https可以訪問到站點,但是發現很多樣式和圖片出不來,排查發現我們很多靜態檔案有用到upyun提供的CDN服務,upyun的訪問地址還是用的http,頁面中存在混很內容,導致部分資源載入失敗。
混合內容是指:在https的頁面中混合了非https的資源請求,比如圖片、css、js 等等。

注意:

(1)在http頁面混有https內容時,頁面排版不會發生亂排現象
(2)在https頁面,只有包含以http方式引入的資源(如圖片,js等)時,才算作混合內容

只有頁面本身和所有引用的資源都是 https 的瀏覽器才認為是安全的,只要其中引用了非安全資源(即使圖片),瀏覽器都會給出不安全的提示,特別是有 js 的情況。如果瀏覽器提示不安全,那樣我們就達不到原來目的了。我們費了半天功夫去申請 SSL 證書,配置Web伺服器,最後如果因為混合內容而前功盡棄就太不值了。火狐瀏覽器混合顯示內容會這樣指示:

https

混合指令碼執行時整個原始頁面會受到影響,原因是瀏覽器阻止混合內容的載入。

於是乎又要去解決這個混合內容的問題,先配置好upyun https訪問,upyun地址我們新增的二級域名,發現之前申請的證書只能和主域名繫結用不了,重新針對這個二級域名再申請一個免費的證書,然後在upyun側配置好SSL。

https

這裡瞭解到證書對域名的支援有泛域名證書和多域名證書,
泛域名證書支援所有二級域名*.domain.com,
多域名證書可以支援www.domain.com、www.domain.cn、www.domain.net

混合內容解決好後本地跑通OK,部署上線,開啟網站發現訪問超時,檢查配置檔案、檢視埠監聽,重啟服務,排查了可能影響的設定後問題還是沒能找到,於是換了一臺同樣配置的測試伺服器發現又是能工作正常。這時基本可以排是配置的問題。

繼續往上走看域名和阿里雲ECS是否還要做什麼配置,發現前兩天剛部署了一臺阿里雲SLB,就是SLB在nginx之前做了一道攔截,443埠的監聽都被它轉發了,重新配置好SLB的證書。

https

需要把之前nginx ssl的配置刪除掉,不然會衝突,再次訪問一切正常。

如果你的網站也有升級https的需求,那麼一定要提前了可能對其他功能產生影響的點,選擇合適自己的升級路線。

本文來自碼客幫(www.make8.com)首席架構師徐凱的分享。