生成SSL证书可能是一项艰巨的任务,充满了挫败和悲伤。但事实并非如此!如果你拥有Windows 10和OpenSSL,并获得了这篇教程的一点帮助,你将会顺利进行。
在本文中,你将学习如何在Windows 10上安装OpenSSL。安装完成后,你将能够生成SSL证书,解决和调试证书问题,并在不同格式之间进行转换。
让我们从PowerShell开始掌握在Windows 10上使用OpenSSL!
相关文章:使用Windows证书管理器和PowerShell管理证书
先决条件
在本文中,你将通过实践学习。虽然OpenSSL历史上是一个Linux操作系统的工具,但你也可以在Windows操作系统上使用它。
- A Windows system with Local Administrator rights – The tutorial will be using Windows 10
- 需要安装Windows PowerShell 5.1(随Windows附带)或PowerShell 7
- 已安装的Chocolatey-用于Windows的软件包管理器。
- 需要安装PowerShell ISE、Visual Studio Code或任何你选择的文本编辑器
本指南中的所有截图都来自Windows 10版本1909和PowerShell 7。
使用PowerShell和Chocolatey在Windows 10上安装OpenSSL
假設您已經按照安裝指示安裝了Chocolatey,您的第一個任務是在Windows 10上安裝OpenSSL。為此,打開PowerShell控制台,並運行以下命令:choco install OpenSSL.Light
,如下所示。

就這樣!您現在已經使用PowerShell安裝了OpenSSL。
設置工作目錄
本教程將創建一些用於學習的證書。為了確保您在這裡做的所有工作都限於一個文件夾中,以便稍後進行清理,請先創建一個文件夾。
本教程將所有證書和相關文件存儲在C:\certs文件夾中。您可以通過運行以下命令在PowerShell中創建文件夾。
現在是時候配置OpenSSL了。
配置OpenSSL
在Windows 10上,默認情況下不會安裝OpenSSL配置文件。這是有意為之,因為有很多配置選項可以自定義。在本指南中,您將使用一個示例配置文件,稍後可以根據您的安全要求進行自定義。
打開PowerShell,運行以下命令。該命令從MIT下載一個示例配置文件,並將其保存為當前工作目錄中的openssl.cnf。
現在您可以打開openssl.cnf文件,應該會看到類似下面的內容。

下載的配置目前可以正常使用。在生產環境中不要使用默認值!
更新 PowerShell Profile 環境變數
為了使事情順利進行,您應該修改您的 PowerShell profile 在 Windows 10 上。設置一些環境變數可以讓您輕鬆切換不同版本的 OpenSSL,您可能已經安裝了多個版本。
I suggest adding two environment variables to your PowerShell profile called path
and OPENSSL_CONF
. You will update the PATH
environment variable to ensure you can run the openssl binary in any location while on the command line.
下面您將看到一種在您尚未擁有的情況下創建 PowerShell profile 的方法。此命令將 OpenSSL 二進制文件的路徑附加到您的 PATH
,並將配置文件的路徑分配給 OPENSSL_CONF
。
要使用這些環境變數,請重新加載您的 profile,輸入 . $profile
或者只需關閉並重新打開 PowerShell。
現在您可以在 PowerShell 中的任何位置輕鬆調用 openssl 二進制文件,如下所示。

在 Windows 10 上使用 OpenSSL 生成 CSR 和私鑰
在您創建SSL證書之前,您必須生成一個證書簽名請求(CSR)。 CSR是一個編碼文件,它提供了一種與證書授權機構(CA)共享您的公鑰的方式。該文件包含識別信息、簽名算法和數字簽名。讓我們創建您的第一個CSR和私鑰。
相關: 您的X509證書指南
要創建CSR,運行以下命令。然後,OpenSSL將提示您輸入一些識別信息,如下面的示例所示。

完成後,您將擁有一個有效的CSR和私鑰,可用於向您發行SSL證書。
如果您不想每次生成CSR時都輸入數據,則可以進一步編輯配置文件的默認值,以簡化此過程。
您可以閱讀有關可用CSR選項的更多信息,並在man頁面中查看示例配置。OpenSSL還有一個活躍的GitHub存儲庫,其中也包含示例。
生成RSA密鑰對
您還可以使用OpenSSL創建RSA密鑰對(公鑰/私鑰)。要這樣做,首先使用genrsa
子命令創建私鑰,如下所示。
當你執行下面的命令時,Windows 10 上的 OpenSSL 將生成一個 RSA 私鑰,密鑰長度為 2048 位元。這個密鑰在現代硬體上幾乎可以立即生成。生成的密鑰將輸出到工作目錄中。
接下來,使用剛剛建立的私鑰生成公鑰,使用 rsa
子命令。下面的語法將在工作目錄中從 rsa.private 私鑰中創建名為 rsa.public 的公鑰。
生成自簽名憑證
有時你可能需要生成一個自簽名憑證。自簽名憑證適用於實驗室使用,但在生產環境中不是一個安全的實踐。
在進行下一個任務之前,讓我們創建一個自簽名憑證。為此,輸入以下命令來創建一個 X509 SSL 憑證。這個憑證將使用 SHA256 密碼學,有效期為 365 天,使用 2048 位元的 RSA 密鑰。該憑證將保存到工作目錄中。
現在,你可以將這個憑證導入到瀏覽器或伺服器中。
使用 OpenSSL 驗證 CSR、憑證和密鑰。
檢查CSR、私鑰、憑證或PKCS#12中的資訊可以節省您解決SSL錯誤的時間。有時候可能使用了錯誤的金鑰來創建憑證。例如,憑證中的識別資訊可能是錯誤的。
讓我們從使用req
命令和一些參數來檢查CSR開始:

諸如國家名稱、組織名稱以及在本指南開始時輸入的電子郵件地址等細節應完全匹配。
您也可以使用帶有一些參數的x509
子命令來檢查憑證:

使用OpenSSL進行憑證轉換
有時應用程序不使用特定的憑證格式。例如,您可能有一個DER格式的憑證(.crt .cer .der),但應用程序(例如HAproxy)要求使用PEM憑證。
為了演示憑證轉換,讓我們將之前創建的自簽名憑證(DER格式,命名為certificate.crt)轉換為PEM格式。使用以下代碼片段中的代碼執行此操作。
以下命令使用x509
子命令和-inform
參數,-inform
應與-in
文件的格式相匹配,然後是-out
的格式。
您也可以按照以下示例的方式反轉順序,將PEM格式轉換為DER格式。
最後但同樣重要的是,您可以將PKCS#12轉換為PEM格式,並將PEM轉換為PKCS#12格式。這是一種包含私鑰和證書的文件類型。要轉換為PEM格式,請使用pkcs12
子命令。
您也可以使用-export
和一些額外的選項將PEM證書和私鑰轉換為PKCS#12格式。下面的示例將使用SomeCertificate.crt
作為輸入源來導出一個PKCS#12格式的證書,並使用-certfile
選項值MyCACert.crt
來驗證SomeCertificate.crt
。
故障排除和調試
現在您可以創建和轉換CSR、證書和密鑰對了,是時候學習如何排除故障和調試了。OpenSSL附帶了一些命令,可幫助您輕鬆解決問題。
OpenSSL還允許您檢查證書的文件完整性,並測試可能的數據損壞。使用MD5校驗和,您可以使用以下代碼示例測試證書、密鑰和CSR:
一旦您獲得了原始哈希值,您可以將該原始哈希值與當前哈希值進行比較,以驗證證書是否已被修改或損壞。
以下是在PowerShell中运行该代码的示例:

摘要
在本文中,您已经学会了如何在Windows 10上安装和配置OpenSSL,创建CSR、密钥对和SSL证书。您还学会了如何在不同的证书格式之间进行转换,并使用内置的子命令进行基本故障排除。