老闆急壞了,公司網站的 HTTPS 過期了

端午出去玩的時候,老闆打電話說公司網站的 HTTPS 過期了,訪問不了(見下圖),要我立馬升級一下。可惜我當時沒帶電腦,無能為力,可把老闆急壞了。

沒辦法,急就先急着,只能等我有電腦了才能搞。點擊高級,可以看到以下信息:

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 證書申請和管理。下載地址如下:

//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 後,重新訪問一下網站,發現網站恢復正常了。

好了,HTTPS 它回來了,趕緊給老闆吱一聲,網站幾天不能用,少賣不少酒,少掙不少錢啊,嘿嘿。

同學們,學到了吧?網站想從 HTTP 升級到 HTTPS 並不難,按照我給出的這份攻略,五分鐘就能輕鬆搞定,關鍵是還免費,真香警告!

我是沉默王二,一枚有趣的程序員。如果覺得文章對你有點幫助,請微信搜索「 沉默王二 」第一時間閱讀,回復【666】更有我為你精心準備的 500G 高清教學視頻(已分門別類)。

本文 GitHub 已經收錄,有大廠面試完整考點,歡迎 Star。

原創不易,莫要白票,請你為本文點個贊吧,這將是我寫作更多優質文章的最強動力。