知識庫

如何在沒有 IIS 管理員的情況下在基於 Windows 的伺服器上產生 CSR 程式碼

如果我們需要為除 IIS 之外的服務安裝 SSL 證書,而 Windows 伺服器上沒有安裝 IIS 管理員,那麼在這種情況下可以如何生成 CSR 代碼呢?

幸運的是,還有幾種替代方法可用。儘管這些替代方法不會提供向導式的用戶友好界面,並且需要對系統管理工具有一定的熟悉度,但它們仍然非常有效,以實現我們的目標——生成一個 CSR 代碼,我們可以在證書啟用過程中提交給證書授權機構。

所以讓我們更詳細地看看每種方法。

在 MMC(Microsoft 管理控制台)中生成 CSR

通過以下步驟打開 MMC 中的“證書”外掛: Win+R > mmc.exe > 確定 > 文件 > 添加/刪除外掛 > 證書 > 添加 > 計算機帳戶 > 下一步 > 本地計算機 > 完成 > 確定

在“個人 > 證書”面板中,右鍵單擊空白處,然後選擇所有任務 > 高級操作 > 創建自定義請求,以打開“證書註冊”嚮導:

csrmmc1

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

csrmmc2

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

csrmmc3

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

csrmmc4

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

csrmmc5

在名為“主體”的下一個選項卡中,我們需要向請求中添加幾個字段並指定其值。請求中必須存在的最基本字段類型包括:

  • 公用名稱:為要簽發證書的完全合格域名
  • 國家:符合 ISO 3166 的 2 字母國家代碼。可以在這裡檢查正確代碼。
  • 州:州或地區名稱;可以與城市名稱相同
  • 地方:城市名稱
  • 組織:這裡應指定公司名稱

注意:如果您需要在請求中添加主體替代名稱,可以在“替代名稱”部分進行選擇。選擇“DNS”字段類型,並逐一添加域名:

csrmmc6

結果應類似於這樣:

csrmmc7

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

csrmmc8

在“金鑰選項”部分,如果使用 RSA 算法,確保“金鑰大小”設置為至少 2048 位。

注意:基於大小低於 2048 位的金鑰的證書被認為不安全,受信任的證書授權機構不再簽發它們。

如果您計劃導出證書,例如,在另一個實例上安裝,則需要檢查“使私鑰可導出”選項:

csrmmc9

現在我們可以單擊“確定”並繼續。

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

csrmmc10

使用 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):

csrmmc11

現在我們可以打開命令行提示符: Win+R > cmd > Enter

使用 'cd' 命令導航到保存策略文件的文件夾: cd C:

運行以下命令以啟動 CSR 生成: certreq.exe -new request.inf zbtest.csr

csrmmc12

如果命令出現“請求創建”訊息,則 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 到剪貼板的選項:

csrmmc13

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