Select another language to continue browsing and purchasing services in English.

知识库

如何在没有 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 证书的启用。