網站如何免費升級到HTTPS?

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

證書申請:

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

升級策略分析:

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。
在這裏插入圖片描述

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服務器,最後如果因爲混合內容而前功盡棄就太不值了。火狐瀏覽器混合顯示內容會這樣指示:
在這裏插入圖片描述
混合腳本執行時整個原始頁面會受到影響,原因是瀏覽器阻止混合內容的加載。

於是乎又要去解決這個混合內容的問題,先配置好upyun https訪問,upyun地址我們添加的二級域名,發現之前申請的證書只能和主域名綁定用不了,重新針對這個二級域名再申請一個免費的證書,然後在upyun側配置好SSL。
在這裏插入圖片描述
這裏瞭解到證書對域名的支持有泛域名證書和多域名證書,
泛域名證書支持所有二級域名*.domain.com,
多域名證書可以支持www.domain.comwww.domain.cnwww.domain.net

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

繼續往上走看域名和阿里雲ECS是否還要做什麼配置,發現前兩天剛部署了一臺阿里雲SLB,就是SLB在nginx之前做了一道攔截,443端口的監聽都被它轉發了,重新配置好SLB的證書。
在這裏插入圖片描述
需要把之前nginx ssl的配置刪除掉,不然會衝突,再次訪問一切正常。

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

歷史文章:
JAVA微信企業付款到零錢(十分鐘搞定)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章