如果我们需要为除 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 证书的启用。