bg-tutorials

如何在 IBM HTTP Server 上生成 CSR

本指南将向您展示如何在 IBM HTTP Server (IHS) 上生成 CSR(证书签名请求),以及如何在HCL Domino(原 IBM Domino)上完成相同的操作。

IBM HTTP Server 将密钥和证书存储在 CMS 密钥数据库(一个.kdb文件加上一个.sth密码隐藏文件)中,您可以使用 IHS 附带的IBM Global Security Kit (GSKit)中的IKEYMAN图形工具或gskcapicmd命令行工具来管理它。

以下步骤涵盖了 IHS 9.0.5.x(当前受支持的版本)上的两种方法,然后是 HCL Domino 的两种 CSR 流程:经典的Server Certificate Administration数据库(为旧版安装保留),以及现代的Certificate Manager任务配合certstore.nsf,HCL 在 Domino 12 及更高版本上推荐使用后者。

在 IBM HTTP Server 上生成 CSR

如果您已经生成了 CSR,请直接跳到如何在 IBM HTTP Server 上安装 SSL 证书

在 IHS 上,您可以通过两种方式创建请求:通过IKEYMAN图形界面(经典的点选操作实用工具),或使用命令行的gskcapicmd。两者都会将私钥写入相同的 CMS 密钥数据库,并生成一个 PKCS #10 请求,作为.arm文件提交给您的证书颁发机构。如果是有显示器的桌面或服务器,请选择图形界面;如果是无头服务器,或者您想要可重复执行的脚本,请选择命令行方式。

前提条件:已安装 IBM HTTP Server,系统上已有 GSKit(它随 IHS 软件包一起提供),并且 IHS 的bin目录已加入 PATH,或者您已知晓其完整路径(在 Linux/AIX 上通常为/opt/IBM/HTTPServer/bin/,在 Windows 上为C:Program FilesIBMHTTPServerbin)。您还需要一个工作目录来写入新的密钥数据库和 CSR 文件,以及一个可以记录密钥数据库密码的地方。

方法一:使用 IKEYMAN(图形界面)生成 CSR

步骤 1. 创建新的 CMS 密钥数据库(.kdb)

  • 启动 IKEYMAN。在 Windows 上,打开开始 > IBM HTTP Server > Start Key Management Utility。在 Linux、AIX 或其他 UNIX 系统上,在 IHS 的bin目录中运行ikeyman(例如/opt/IBM/HTTPServer/bin/ikeyman);您需要一个可用的 X11 显示环境。
  • 在菜单中选择Key Database File > New
  • Key database type下拉菜单中,选择CMS。这是 IBM HTTP Server 可读取的格式。
  • File Name中,输入新数据库的名称(例如key.kdb)。
  • Location中,指向一个您能再次找到的文件夹(例如 Linux 上的/opt/IBM/HTTPServer/ssl/,或 Windows 上的C:IBMHTTPServerssl)。点击OK
  • 设置一个强密码,然后勾选Stash password to a file,这样 IKEYMAN 会在.kdb文件旁写入一个匹配的.sth隐藏文件。IHS 会在启动时读取该隐藏文件,因此每次服务器启动时您都不必手动输入密码。点击OK

IKEYMAN 会在该文件夹中创建两个文件:数据库本身(key.kdb)和隐藏文件(key.sth)。这两个文件都应视为机密。请严格控制它们的文件权限(仅 IHS 用户可读),并将其备份到安全位置,因为没有它们您将无法恢复私钥。

步骤 2. 创建证书请求

  • 打开新数据库后,找到Key database content下拉菜单,将其更改为Personal Certificate Requests
  • 点击New。将打开Create New Key and Certificate Request对话框。

请仅使用标准 ASCII 字符填写各字段;非拉丁字母会导致请求出错:

  • Key Label:密钥数据库中该证书的简短标识符,例如www.example.com。稍后您将在httpd.conf中通过SSLServerCert指令引用此标签。
  • Key Size:选择2048。这是目前所有公共 CA 都接受的最低限度。仅在您的策略要求更大密钥时才选择30724096;权衡是 TLS 握手会稍慢一些。
  • Signature Algorithm:选择SHA256WithRSA(或更强的,如SHA384WithRSA)。避免使用任何含 SHA-1 的选项;公共 CA 不会针对它签发证书。
  • Common Name:您想要保护的完全限定域名,例如www.example.com。如果是通配符证书,请在顶级域名前加上星号,例如*.example.com
  • Organization:您公司的完整法定名称,须与注册信息完全一致。这是 OV 和 EV 证书所必需的;DV 证书则忽略此项。
  • Organizational Unit:此属性对公共证书已被弃用(CA/浏览器论坛已逐步淘汰它)。留空,或输入一个简短标签,例如IT
  • Locality:完整的城市名称(例如Seattle,而不是SEA)。
  • State/Province:完整的州/省名称(例如Washington,而不是WA)。
  • Country:两个字母的 ISO 国家代码,例如USGBDE
  • Subject Alternative Names(SAN):添加应出现在证书上的每个主机名,包括您在 Common Name 中填写的值。现代浏览器会忽略 Common Name,只根据 SAN 列表进行验证,因此多域名证书需要在此处添加相应条目。
  • Enter the name of a file in which to store the certificate request:一个以.arm结尾的路径和文件名,例如/opt/IBM/HTTPServer/ssl/www_example_com.arm。将其保存在与密钥数据库相同的文件夹中,以便两者保持关联。

点击OK。IKEYMAN 会在密钥数据库内生成密钥对,将请求存储为待处理条目,并将 PKCS #10 CSR 写入您指定的.arm文件。

步骤 3. 复制 CSR 并提交给 CA

用任意文本编辑器(Notepad、vi、nano)打开.arm文件。您将看到类似这样的内容块:

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDXjCCAkYCAQAwgZQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9u
... (many lines of base64) ...
-----END NEW CERTIFICATE REQUEST-----

选中整个代码块,包括BEGINEND那两行,复制它,然后粘贴到您的订单表单中的 CSR 字段。私钥仍保留在服务器上的密钥数据库中;只有 CSR 文本会离开该机器。

方法二:使用 gskcapicmd(命令行)生成 CSR

gskcapicmd工具(有时在 Java 封装版本中列为gskcmd,或在 64 位 GSKit 安装中列为gsk8capicmd_64)执行与 IKEYMAN 相同的工作,但不需要图形会话。请在 IHS 的bin目录下运行它。

步骤 1. 创建 CMS 密钥数据库和隐藏文件

为密钥数据库选择一个文件夹,然后运行:

gskcapicmd -keydb -create 
  -db /opt/IBM/HTTPServer/ssl/key.kdb 
  -pw your_strong_password 
  -type cms 
  -stash

参数说明:

  • -db:新.kdb文件的完整路径。
  • -pw:保护密钥数据库的密码。
  • -type cms:IHS 可读取的格式。
  • -stash:在数据库旁写入一个匹配的.sth隐藏文件,以便 IHS 在启动时无需提示即可读取。

在命令行中,密码在进程列表和 shell 历史记录中是可见的。数据库创建完成后,请使用gskcapicmd -keydb -changepw将密码更改为一个未记录在历史记录中的密码,或通过环境变量传递密码后再取消设置该变量。

步骤 2. 创建证书请求

一步生成密钥对和 PKCS #10 CSR,并为证书上所需的每个主机名添加 SAN 条目:

gskcapicmd -certreq -create 
  -db /opt/IBM/HTTPServer/ssl/key.kdb 
  -pw your_strong_password 
  -label www.example.com 
  -dn "CN=www.example.com,O=Example Inc,L=Seattle,ST=Washington,C=US" 
  -size 2048 
  -sigalg SHA256WithRSA 
  -san_dnsname "www.example.com,example.com" 
  -file /opt/IBM/HTTPServer/ssl/www_example_com.arm

参数说明:

  • -label:该证书在密钥数据库内的标识符。之后在httpd.conf中通过SSLServerCert指令引用它。
  • -dn:可分辨名称,以逗号分隔属性的一个字符串写成。使用CN=指定完全限定域名,以及C=中的两字母 ISO 代码。
  • -size2048是最低要求。仅在您的策略要求时才使用30724096
  • -sigalgSHA256WithRSA(或SHA384WithRSA)。请勿使用 SHA-1。
  • -san_dnsname:以逗号分隔的列表,列出证书上必须出现的每个主机名。请将 Common Name 值也包含在此列表中。浏览器和大多数 TLS 库只验证 SAN,而不验证 CN。
  • -file:gskcapicmd 写入.arm CSR 文件的路径。

如果您需要 ECDSA 密钥而不是 RSA,请将-sigalg SHA256WithRSA替换为-sigalg SHA256WithECDSA,并修改-size以匹配目标曲线(P-256 用-size 256,P-384 用-size 384)。支持的曲线为secp256r1(P-256)、secp384r1(P-384)和secp521r1(P-521)。IHS 对 ECDSA 的支持仅通过 gskcapicmd 完全提供;在较旧的 IHS 版本中,IKEYMAN 不允许您选择 ECDSA。有关特定 IHS 版本上的 ECDSA 操作,请参阅IBM 的证书管理指南

步骤 3. 列出并验证请求

确认请求已添加到密钥数据库:

gskcapicmd -certreq -list 
  -db /opt/IBM/HTTPServer/ssl/key.kdb 
  -pw your_strong_password

要读取 CSR 内容并检查 Common Name、SAN 条目、密钥大小以及签名算法:

gskcapicmd -certreq -details 
  -db /opt/IBM/HTTPServer/ssl/key.kdb 
  -pw your_strong_password 
  -label www.example.com

然后在文本编辑器中打开.arm文件,复制完整的从BEGIN NEW CERTIFICATE REQUESTEND NEW CERTIFICATE REQUEST的代码块,并将其提交到您的 CA 订单表单中。

提交前检查 CSR(可选)

如果您已安装 OpenSSL,可以在同一台机器上运行以下命令,确认主题、SAN 列表和密钥大小:

openssl req -noout -text -in www_example_com.arm

更喜欢在线工具?将请求内容粘贴到 SSL Dragon 的CSR 解码器中即可查看相同的详细信息。请确认 Common Name 与客户端将使用的主机名一致,并确认每个所需主机名都出现在 Subject Alternative Name 下。

CA 签发证书后

已签发的证书必须返回到生成该 CSR 的同一个密钥数据库中,且需对应同一个标签。使用命令行接收证书:

gskcapicmd -cert -receive 
  -db /opt/IBM/HTTPServer/ssl/key.kdb 
  -pw your_strong_password 
  -file www_example_com.crt

或者在 IKEYMAN 的Personal Certificates > Receive中执行同样的操作。首先将根证书和中间证书添加为签名者证书,然后在httpd.conf中更新KeyFileSSLServerCert指令,并重启 IHS。完整流程请参见如何在 IBM HTTP Server 上安装 SSL 证书

在 HCL Domino 上生成 CSR

注意:IBM Domino 现已更名为HCL Domino。HCL 于 2019 年 7 月 1 日完成对 IBM 协作产品组合(包括 Notes/Domino)的收购。在 Domino 12 及更高版本上,HCL 建议对所有新的 TLS 相关工作使用Certificate Manager任务(配合certstore.nsf和 TLS Credentials 文档)。经典的Server Certificate Administration数据库(CERTSRV.NSF)仍适用于旧版安装,下文对其进行了说明,但新部署应使用 Certificate Manager。

方法 A:使用 Certificate Manager 创建 CSR(Domino 12+ / 14.x)

  • 在您指定的 Certificate Manager 服务器上添加CertMgr任务,使其创建certstore.nsf。在每台需要读取 TLS 密钥的 Domino 服务器上,也运行 CertMgr,以便该数据库进行复制。
  • 打开certstore.nsf,转到TLS Credentials,点击Add TLS Credentials
  • Host names:输入客户端将使用的确切完全限定域名,并将每个附加主机名添加为 Subject Alternative Name。
  • Servers with access:选择必须能够读取私钥的 Domino 服务器。
  • Certificate Provider:对任何第三方 CA 都选择Manual。(仅当您希望 CertMgr 自动获取免费的 ACME 签发证书时才选择Let’s Encrypt。)
  • Key type:选择RSAECDSA
  • RSA:选择2048位(如果您的策略要求更大的密钥,可选择更大值)。
  • ECDSA:选择一条曲线(P-256P-384;P-384 为列表中的默认选项)。
  • 点击Submit Request。CertMgr 会生成密钥对,对 CSR 进行签名,该文档的状态会变为Status = Waiting
  • 打开该文档,复制Certificate signing request (CSR)的值(或使用处理完成后出现的Copy CSR操作),将 PEM 代码块粘贴到您的 CA 订单表单中。

私钥保存在certstore.nsf内部,并针对您授权的服务器进行加密。您永远不需要导出它。当 CA 签发证书后,将已签名的证书(连同签发链)粘贴回同一个 TLS Credentials 文档中,CertMgr 会为您完成安装。完整参考资料请参阅 HCL 的Certificate Manager 文档

方法 B:经典的 Server Certificate Administration(旧版 Domino)

仅在仍依赖密钥环文件(.kyr + .sth)的 Domino 版本上使用此方法。HCL 已将其在 Domino 12 及更高版本中标记为遗留方法。

  • 在 Domino Administrator 客户端中,打开Server Certificate Administration
  • 选择Create Key Ring。输入密钥环名称和一个强密码。
  • Key Size:选择2048位。
  • 填写可分辨名称:
  • Common Name:您想要保护的完全限定域名,例如www.example.com
  • Organization:您公司的完整法定名称。
  • Organizational Unit:留空,或输入一个简短标签,如IT(该属性对公共证书已被弃用)。
  • City or Locality:完整的城市名称,例如Seattle
  • State or Province:完整的州名称,例如Washington
  • Country:两字母的 ISO 代码,例如US
  • 核对相关详情,然后点击Continue。Domino 会创建密钥环文件。
  • 选择Create Certificate Request。在Method下,选择Paste into form on CA’s site。Domino 会显示 CSR 文本。
  • 复制整个 CSR 代码块(包括BEGINEND那两行),并将其粘贴到您的 CA 订单表单中。

经典密钥环文件在此对话框中不支持 SAN 条目。如果您需要多域名证书,请改用Certificate Manager(方法 A),或在服务器外生成 CSR。

常见问题

什么是 CMS 密钥数据库,为什么 IHS 需要它?

IBM HTTP Server 不像标准 Apache 那样读取 PEM 密钥和证书文件。它的 TLS 堆栈(mod_ibm_ssl,由 GSKit 支持)将密钥、证书请求和已签发证书存储在一个扩展名为 .kdb 的 CMS 密钥数据库文件中。一个匹配的隐藏文件(.sth)以 IHS 能在启动时读取的形式保存数据库密码。您可以通过 httpd.conf 中的 KeyFile 指令将 IHS 指向该数据库,并使用 SSLServerCert 引用其中的特定证书。

我应该使用 IKEYMAN 还是 gskcapicmd?

两者都写入相同的密钥数据库,因此都可以使用。在有 X11 显示环境的桌面或服务器上,IKEYMAN 很方便,它会引导您完成对话操作。gskcapicmd 在无头服务器、自动化场景以及 ECDSA 密钥方面是更好的选择,因为在较旧的 IHS 版本中图形界面不支持 ECDSA。许多管理员先用命令行创建数据库,之后仅用 IKEYMAN 来查看它。

隐藏文件(.sth)的作用是什么?

隐藏文件以模糊化的形式保存密钥数据库密码,以便 IBM HTTP Server 在启动时能打开数据库而无需交互式提示。这不是加密:任何有该文件读取权限的人都能恢复出密码。请确保 .kdb.sth 都仅供 IHS 用户读取,将数据库存储在本地文件系统上(而不是全局可读的共享位置),并将这两个文件备份到安全位置。

为什么在我的系统上 gskcapicmd 被命名为 gsk8capicmd_64?

这是随 64 位 GSKit 8.x 一起提供的二进制文件,捆绑在 WebSphere Application Server 9 和 IBM HTTP Server 9.0 中。GSKit 10(捆绑于 WebSphere 10 及更高版本)遵循相同的命名惯例。本指南中提到的 gskcapicmd 名称是 IHS 分发的封装程序,会为您的安装调用正确的二进制文件;gsk8capicmd_64 是同一工具的带版本号名称。两者都可以使用上述语法。

立即订购 SSL 证书, 可节省 10% 的费用!

快速发行, 强大加密, 99.99% 的浏览器信任度, 专业支持和 25 天退款保证. 优惠券代码 SAVE10

龙飞行的详细图像
撰写人

经验丰富的内容撰稿人, 擅长 SSL 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.