端午出去玩的時候,老闆打電話說公司網站的 HTTPS 過期了,通路不了(見下圖),要我立馬更新一下。可惜我當時沒帶電腦,無能為力,可把老闆急壞了。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLxATLzBHd0hWLhZXYq9CX2AzLcBjMwIzLcNXZnFWbp9CXzRXZzNXYvwVbvNmLyV2ZuF2d0lmL3d3dvw1LcpDc0RHaiojIsJye.png)
z.xxxx.cn 通常會使用加密技術來保護您的資訊。Google Chrome 此次嘗試連接配接到 z.xxxx.cn 時,此網站發回了異常的錯誤憑據。這可能是因為有攻擊者在試圖冒充 z.xxxx.cn,或 Wi-Fi 登入螢幕中斷了此次連接配接。請放心,您的資訊仍然是安全的,因為 Google Chrome 尚未進行任何資料交換便停止了連接配接。
您目前無法通路 z.xxxx.cn,因為此網站使用了 HSTS。網絡錯誤和攻擊通常是暫時的,是以,此網頁稍後可能會恢複正常。
我使用的是 FreeSSL 證書,原因很簡單,老闆不舍得掏錢,這個證書每次申請隻能免費使用一年。
FreeSSL 是一個免費提供 HTTPS 證書申請、HTTPS 證書管理和 HTTPS 證書到期提醒服務的網站,旨在推進 HTTPS 證書的普及與應用,簡化證書申請的流程。
由于我之前已經注冊過了,是以從「控制台」的證書清單裡就可以看到過期資訊。
不過很遺憾,沒有直接重新申請的選項。隻能在首頁重新填寫域名,點選「建立免費的 SSL 證書」。
品牌證書選擇「TRUSTAsia」就行了,可以免費使用一年,到期了重新再申請一下就可以了。雖然麻煩點,但能給老闆省點錢,看我這良心員工啊。
完事後會跳轉到下圖這個頁面,注意填寫一下郵箱。
有些同學可能對選項不太了解,我這裡統一解釋下:
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 證書申請和管理。下載下傳位址如下:
https://keymanager.org/
浏覽器生成:在浏覽器支援 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 後,重新通路一下網站,發現網站恢複正常了。