端午出去玩的時候,老闆打電話說公司網站的 HTTPS 過時了,訪問不了(見下圖),要我立馬升級一下。惋惜我當時沒帶電腦,無能爲力,可把老闆急壞了。javascript
沒辦法,急就先急着,只能等我有電腦了才能搞。點擊高級,能夠看到如下信息:css
z.xxxx.cn 一般會使用加密技術來保護您的信息。Google Chrome 這次嘗試鏈接到 z.xxxx.cn 時,此網站發回了異常的錯誤憑據。這多是由於有攻擊者在試圖冒充 z.xxxx.cn,或 Wi-Fi 登陸屏幕中斷了這次鏈接。請放心,您的信息仍然是安全的,由於 Google Chrome 還沒有進行任何數據交換便中止了鏈接。html
您目前沒法訪問 z.xxxx.cn,由於此網站使用了 HSTS。網絡錯誤和攻擊一般是暫時的,所以,此網頁稍後可能會恢復正常。java
我使用的是 FreeSSL 證書,緣由很簡單,老闆不捨得掏錢,這個證書每次申請只能無償使用一年。git
FreeSSL 是一個免費提供 HTTPS 證書申請、HTTPS 證書管理和 HTTPS 證書到期提醒服務的網站,旨在推動 HTTPS 證書的普及與應用,簡化證書申請的流程。程序員
因爲我以前已經註冊過了,因此從「控制檯」的證書列表裏就能夠看到過時信息。github
不過很遺憾,沒有直接從新申請的選項。只能在首頁從新填寫域名,點擊「建立免費的 SSL 證書」。面試
品牌證書選擇「TRUSTAsia」就好了,能夠無償使用一年,到期了從新再申請一下就能夠了。雖然麻煩點,但能給老闆省點錢,看我這良心員工啊。算法
完過後會跳轉到下圖這個頁面,注意填寫一下郵箱。apache
有些同窗可能對選項不太瞭解,我這裏統一解釋下:
1)證書類型
我選擇的是 RSA,那 ECC 又是什麼,二者有什麼區別?
HTTPS 經過 TLS 層和證書機制提供了內容加密、身份認證和數據完整性三大功能,能夠有效防止數據被監聽或篡改,還能抵禦 MITM(中間人)攻擊。TLS 在實施加密過程當中,須要用到非對稱密鑰交換和對稱內容加密兩大算法。
對稱內容加密強度很是高,加解密速度也很快,只是沒法安全地生成和保管密鑰。在 TLS 協議中,應用數據都是通過對稱加密後傳輸的,傳輸中所使用的對稱密鑰,則是在握手階段經過非對稱密鑰交換而來。常見的 AES-GCM、ChaCha20-Poly1305,都是對稱加密算法。
非對稱密鑰交換能在不安全的數據通道中,產生只有通訊雙方纔知道的對稱加密密鑰。目前最經常使用的密鑰交換算法有 RSA 和 ECDHE:RSA 歷史悠久,支持度好,但不支持 PFS(Perfect Forward Secrecy);而 ECDHE 是使用了 ECC(橢圓曲線)的 DH(Diffie-Hellman)算法,計算速度快,支持 PFS。
是否是一會兒就點醒了你?
2)驗證類型
我選擇的是文件驗證,那 DNS 驗證又是什麼,二者有什麼區別?
首先,咱們須要明白一點,CA(Certificate Authority,證書頒發機構) 須要驗證咱們是否擁有該域名,這樣纔給咱們頒發證書。
文件驗證(HTTP):CA 將經過訪問特定 URL 地址來驗證咱們是否擁有域名的全部權。所以,咱們須要下載給定的驗證文件,並上傳到您的服務器。
DNS 驗證:CA 將經過查詢 DNS 的 TXT 記錄來肯定咱們對該域名的全部權。咱們只須要在域名管理平臺將生成的 TXT 記錄名與記錄值添加到該域名下,等待大約 1 分鐘便可驗證成功。
因此,若是對服務器操做方便的話,能夠選擇文件驗證;若是對域名的服務器操做比較方便的話,能夠選擇 DNS 驗證。若是兩個都方便的話,請隨意選啦。
3)CSR 生成
我選擇的是離線生成,這也是 FreeSSL 如今推薦的方式,那到底三個選項之間有什麼區別呢?
離線生成:私鑰在本地加密存儲,更安全;公鑰自動合成,支持常見證書格式轉換,方便部署;支持部分 WebServer 的一鍵部署,很是便捷。
離線生成的時候,須要先安裝 KeyManager,能夠提供安全便捷的 SSL 證書申請和管理。下載地址以下:
瀏覽器生成:在瀏覽器支持 Web Cryptography 的狀況下,會使用瀏覽器根據用戶的信息生成 CSR 文件。
Web Cryptography,網絡密碼學,用於在 Web 應用程序中執行基本加密操做的 JavaScript API。不少瀏覽器並不支持
我有 CSR:能夠粘貼本身的 CSR,而後建立。
明白區別以後,選擇「點擊建立」,若是沒有安裝 KeyManager 的話,會彈出提示對話框,讓你安裝。
直接點擊「安裝 KeyManager」進行下載。
雙擊運行安裝,成功後打開 KeyManager。
填寫密碼後點擊「開始」,稍等片刻,出現以下界面。
回到 FreeSSL 首頁,點擊下圖中紅色框中的連接「再次嘗試啓動 KeyManager」。
注意 KeyManager 界面的變化,會出現如下界面中的信息。
能夠回到瀏覽器頁面,點擊「繼續」按鈕:
會跳出文件驗證的提示信息:
點擊右下角的「下載文件」。
好了,如今連接服務器,將下載好的文件上傳到「文件路徑」處指出的路徑下,必定要路徑匹配上,不然沒法完成驗證。
文件上傳成功後,就能夠「點擊驗證」,稍等片刻後,就會出現如下提示信息:
點擊「保存到 KeyManager」,能夠看到證書的有效期延長了。
選擇「導出證書」:
個人服務器軟件使用的是 Tomcat,因此選擇導出的格式是 jks。記住你的私鑰加密密碼,後面要用。
完過後點擊「導出」按鈕。
將生成好的證書,上傳到服務器。
接下來,打開 Tomcat 的 server.xml 文件,配置一下 Connector 連接。
<Connector port="81" protocol="HTTP/1.1"
maxThreads="250" maxHttpHeaderSize="8192" acceptCount="100" connectionTimeout="60000" keepAliveTimeout="200000"
redirectPort="8443"
useBodyEncodingForURI="true" URIEncoding="UTF-8"
compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,application/xml,application/json,text/javascript,application/javascript,text/css,text/plain,text/json,image/png,image/gif"/>
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/home/backup/xxx.cn.jks" keystorePass="Chenmo"
clientAuth="false" sslProtocol="TLS"
useBodyEncodingForURI="true" URIEncoding="UTF-8"
compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,application/xml,application/json,text/javascript,application/javascript,text/css,text/plain,text/json,image/png,image/gif"
/>
複製代碼
其中 keystorePass 爲導出證書時私鑰的加密密碼。
重啓 Tomcat 後,從新訪問一下網站,發現網站恢復正常了。
好了,HTTPS 它回來了,趕忙給老闆吱一聲,網站幾天不能用,少賣很多酒,少掙很多錢啊,嘿嘿。
同窗們,學到了吧?網站想從 HTTP 升級到 HTTPS 並不難,按照我給出的這份攻略,五分鐘就能輕鬆搞定,關鍵是還免費,真香警告!
我是沉默王二,一枚有趣的程序員。若是以爲文章對你有點幫助,請微信搜索「 沉默王二 」第一時間閱讀,回覆【666】更有我爲你精心準備的 500G 高清教學視頻(已分門別類)。
本文 GitHub 已經收錄,有大廠面試完整考點,歡迎 Star。
原創不易,莫要白票,請你爲本文點個贊吧,這將是我寫做更多優質文章的最強動力。