Boss說,我們買了個權威證書,不如做全站式的https吧,讓用戶打開主頁就能看到受信任的綠標。於是我們就開始了填坑之旅。 【只上主域好不好?】 不好。。。console會報出一大堆warning因為圖片域沒有https~瀏覽器證書符號也不是綠色的~ 【在哪裡解密SSL?】 大網站都是架構複雜的啦~
Boss說,我們買了個權威證書,不如做全站式的https吧,讓用戶打開主頁就能看到受信任的綠標。於是我們就開始了填坑之旅。
【只上主域好不好?】
不好。。。console會報出一大堆warning因為圖片域沒有https~瀏覽器證書符號也不是綠色的~
【在哪裡解密SSL?】
大網站都是架構複雜的啦~各層負載均衡和動靜分離~其中最經典的就是圖片和應用分離,這也導致了我們要給兩個域配證書。
想過在NginX配,好處是在一臺機上只配一個證書,壞處是多個機器的配置難以管理,所以只好在前面HA層配~
具體怎麼配網上很多教程啦~大概就是配置指向一個文本文件,裡面是功能變數名稱和證書的列表。
【測試環境怎麼辦?】
涼拌唄~用openssl生成幾個自簽證書就結了~然後自己手動導入到瀏覽器就可以愉快玩耍了~
大概會是這樣
http://www.centoscn.com/CentOS/config/2014/0220/2423.html
有幾個要點:
1.剛開始的私鑰是有密碼保護的,但是放在伺服器中一般是直接使用的,所以要把該私鑰轉換成無密碼保護的。
2.pem文件等於:crt證書+私鑰,密碼體系pem、X509之類的各種國際標準就不展開了,總之就是些機構信息、密鑰、摘要等。
3.想偷懶的可以簽給*.主域.com,但這樣就沒法提前在測試環境踩坑填坑了,多證書的情況終歸是不同的。
4.密鑰和證書的400許可權設置,非生產環境可隨意~
【HSTS好不好?】
當然好,全站式https就該開啟HSTS嚴格傳輸安全,直接在瀏覽器就幫你把http轉為https請求,而不用301回來跳轉。
然而如果有個別頁面確實還沒上https,那就沒辦法了~
【爛鬼證書商,在手機瀏覽器打不開?】
怎麼可能啊,證書供應商是權威機構,怎麼會在安卓里沒根證書啊?一般排查之後發現,安卓里確實是有證書商的根證書的。再幾番查資料之後才發現,要配置ca-bundle證書鏈,也就是受信任的根證書層層簽下來的這個依賴關係~手機瀏覽器也能愉快玩耍了~
【你的https安全性如何?】
舉個百度的慄子(也不知道ip對不對,不是a.shifen.com那個~)
https://www.ssllabs.com/ssltest/analyze.html?d=baidu.com&s=103.235.46.39
我們網站就類似這樣。。。神馬貴賓犬漏洞啊心臟流血漏洞啊全都露出來了~讀完一大堆英文警告,說什麼會被中間人攻擊利用之類之類的,最後其實就一句話。。。要升級openssl版本,要提高TSL版本。。。
可以看看這篇文章 http://www.oschina.net/news/56159/ssl-v3-poodle
【要不要用SNI?】
買CDN服務的時候雲服務商問要不要非SNI支持啊?SNI是什麼呢?Server Name Indication是TSL協議的擴展,用於支持一個IP綁定多個證書。所以非SNI,就是IE7等舊版本瀏覽器的相容問題。。。請用現代瀏覽器。。。
【客戶端報錯peer not authenticated】
瀏覽器、手機和一般客戶端訪問似乎是沒問題的,然而天殺的某外部系統接入調用就出問題了。。。網上都說是沒裝證書,然而我們是權威證書啊怎麼會~
然後我寫了個簡單的httpclient調用,在伺服器端啟動調用的返回是正常的,在IDE中啟動調用就報SSL這個錯誤。
幾番排查確認,在jdk1.7中運行正常,在jdk1.6中報錯,這裡用的httpclient是4.1。
然後兩個懷疑,一個是httpclient或jdk中是否有什麼bug,另一個是舊版jdk是否用了太舊的SSL協議而服務端不允許。
這個問題還有待驗證和有待解決。歡迎大牛提建議。
至此,近似全站https就跑起來了~好多概念和操作細節就不一一展開了。
最後奉上阮大神對SSL/TSL的原理分析,篇幅不長,但是精要地解釋了https握手和通信的過程。
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html