網站如何免費升級到HTTPS?


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

證書申請:

公司是創業公司,為了省成本准備申請免費證書,對比了一些證書商,最后選擇使用沃通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微信企業付款到零錢(十分鍾搞定)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM