如果我們需要為除 IIS 之外的服務安裝 SSL 證書,而 Windows 伺服器上沒有安裝 IIS 管理員,那麼在這種情況下可以如何生成 CSR 代碼呢?
幸運的是,還有幾種替代方法可用。儘管這些替代方法不會提供向導式的用戶友好界面,並且需要對系統管理工具有一定的熟悉度,但它們仍然非常有效,以實現我們的目標——生成一個 CSR 代碼,我們可以在證書啟用過程中提交給證書授權機構。
所以讓我們更詳細地看看每種方法。
在 MMC(Microsoft 管理控制台)中生成 CSR
通過以下步驟打開 MMC 中的“證書”外掛: Win+R > mmc.exe > 確定 > 文件 > 添加/刪除外掛 > 證書 > 添加 > 計算機帳戶 > 下一步 > 本地計算機 > 完成 > 確定
在“個人 > 證書”面板中,右鍵單擊空白處,然後選擇所有任務 > 高級操作 > 創建自定義請求,以打開“證書註冊”嚮導:

確保選中默認的“在不使用註冊策略的情況下進行”選項,然後單擊“下一步”:

在下一個屏幕上,保留預選的選項“(無模板)CNG 金鑰”和“PKCS#10”,然後單擊“下一步”:

現在我們需要打開一個窗口,在其中我們會調整證書請求,使我們能夠獲取具有正確信息和所需金鑰類型的證書。單擊右側的下拉箭頭,然後單擊“屬性”按鈕。

在適當的字段中添加友好的名稱值,以便您將來可以識別此請求條目。此字段用於給證書命名,可以是將為其簽發證書的域名或幾乎任何其他名稱:

在名為“主體”的下一個選項卡中,我們需要向請求中添加幾個字段並指定其值。請求中必須存在的最基本字段類型包括:
注意:如果您需要在請求中添加主體替代名稱,可以在“替代名稱”部分進行選擇。選擇“DNS”字段類型,並逐一添加域名:

結果應類似於這樣:

我們應該打開並查看的此窗口的最後一個選項卡是“私鑰”。展開“加密服務提供者”部分進行查看。這裡的默認選項是“RSA”算法,這是當今行業標準,儘管您可以選擇“ECDSA”(如果需要發出 ECC 證書),通過選擇下圖中的一個條目來完成:

在“金鑰選項”部分,如果使用 RSA 算法,確保“金鑰大小”設置為至少 2048 位。
注意:基於大小低於 2048 位的金鑰的證書被認為不安全,受信任的證書授權機構不再簽發它們。
如果您計劃導出證書,例如,在另一個實例上安裝,則需要檢查“使私鑰可導出”選項:

現在我們可以單擊“確定”並繼續。
“證書註冊”嚮導的最後一個屏幕要求我們指定 CSR 代碼要保存的文件名及其在文件系統中的位置。同時,確保“文件格式”設置為“Base64”。然後單擊“完成”按鈕以啟動我們剛才設置的屬性的私鑰和 CSR 生成:

使用 Certreq 實用程序生成 CSR
'Certreq' 是一個基於命令行的實用程序,主要用於創建和提交證書請求,並從證書授權機構檢索、接受和安裝響應。
在開始使用 'certreq' 之前,我們需要從中提取 CSR 所需信息的策略文件。創建一個新的普通文本文件並打開它。然後將以下文本複製並粘貼到文件中(選擇 RSA 或 ECDSA 的代碼片段):
RSA
;----------------- request.inf -----------------
[Version]
Signature="$Windows NT$"
[NewRequest]
Subject = "C=HK, O=ZTABOX, CN=zbtest.tube, L=Hong Kong, S=Hong Kong"
KeySpec = 1
KeyLength = 2048
Exportable = TRUE
MachineKeySet = TRUE
SMIME = False
PrivateKeyArchive = FALSE
UserProtected = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
ProviderType = 12
RequestType = PKCS10
KeyUsage = 0xa0
HashAlgorithm = SHA256
[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1
;-----------------------------------------------
ECDSA
;----------------- request.inf -----------------
[Version]
Signature="$Windows NT$"
[NewRequest]
Subject = "C=HK, O=ZTABOX, CN=zbtest.tube, L=Hong Kong, S=Hong Kong"
KeyAlgorithm = ECDSA_P384 ; 可以改為 256 或 521
Exportable = TRUE
MachineKeySet = TRUE
SMIME = False
PrivateKeyArchive = FALSE
UserProtected = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft Software Key Storage Provider"
ProviderType = 12
RequestType = PKCS10
KeyUsage = 0xa0
HashAlgorithm = SHA256
[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1
;-----------------------------------------------
注意:您可以通過在 'Subject' 指令中指定 'Street' 變數來向 CSR 代碼添加街道地址值,如下所示:
Subject = "CN=zbtest.tube, C=HK, O=ZTABOX, L=Hong Kong, S=Hong Kong, Street= Test Avenue 1"
請確保將黑色部分的值更改為對您的請求有效的值。然後將文件保存為 .inf 類型(例如 request.inf):

現在我們可以打開命令行提示符: Win+R > cmd > Enter
使用 'cd' 命令導航到保存策略文件的文件夾: cd C:
運行以下命令以啟動 CSR 生成: certreq.exe -new request.inf zbtest.csr

如果命令出現“請求創建”訊息,則 CSR 代碼已生成並保存在 .csr 文件中(上述示例中的 zbtest_ecdsa.csr)。
通過 Powershell 生成 CSR
如果您喜歡腳本並習慣在 Powershell 中執行某些例行任務,您一定會喜歡這個腳本,它設計用於生成 2048 位 RSA 密鑰的 CSR。
將腳本文件下載到您的伺服器實例後,通過運行下列方式打開 Powershell 控制台: Win+R > powershell > Enter
導航到包含下載的腳本文件的文件夾: cd C:
運行下載的腳本: .'Generate Certificate Signing Request SHA256 2048bit'.ps1
提示類似於 OpenSSL 的窗口將要求您輸入公用名稱、組織、組織單位、城市、州和國家值。
注意:當被要求提供主體替代名稱時,您可以根據需要指定它們,或者通過按 Enter 簡單地忽略此步驟。
最後,Powershell 窗口將生成提供信息的摘要,哈希和密鑰算法詳細信息以及 CSR 代碼,並提供立即復製 CSR 到剪貼板的選項:

當使用上述任何方法生成 CSR 代碼後,您可以繼續進行 SSL 證書的啟用。