本指南将向您展示如何在 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 都接受的最低限度。仅在您的策略要求更大密钥时才选择3072或4096;权衡是 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 国家代码,例如US、GB或DE。
- 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-----
选中整个代码块,包括BEGIN和END那两行,复制它,然后粘贴到您的订单表单中的 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 代码。
- -size:2048是最低要求。仅在您的策略要求时才使用3072或4096。
- -sigalg:SHA256WithRSA(或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 REQUEST到END 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中更新KeyFile和SSLServerCert指令,并重启 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:选择RSA或ECDSA。
- RSA:选择2048位(如果您的策略要求更大的密钥,可选择更大值)。
- ECDSA:选择一条曲线(P-256或P-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 代码块(包括BEGIN和END那两行),并将其粘贴到您的 CA 订单表单中。
经典密钥环文件在此对话框中不支持 SAN 条目。如果您需要多域名证书,请改用Certificate Manager(方法 A),或在服务器外生成 CSR。
常见问题
IBM HTTP Server 不像标准 Apache 那样读取 PEM 密钥和证书文件。它的 TLS 堆栈(mod_ibm_ssl,由 GSKit 支持)将密钥、证书请求和已签发证书存储在一个扩展名为 .kdb 的 CMS 密钥数据库文件中。一个匹配的隐藏文件(.sth)以 IHS 能在启动时读取的形式保存数据库密码。您可以通过 httpd.conf 中的 KeyFile 指令将 IHS 指向该数据库,并使用 SSLServerCert 引用其中的特定证书。
两者都写入相同的密钥数据库,因此都可以使用。在有 X11 显示环境的桌面或服务器上,IKEYMAN 很方便,它会引导您完成对话操作。gskcapicmd 在无头服务器、自动化场景以及 ECDSA 密钥方面是更好的选择,因为在较旧的 IHS 版本中图形界面不支持 ECDSA。许多管理员先用命令行创建数据库,之后仅用 IKEYMAN 来查看它。
隐藏文件以模糊化的形式保存密钥数据库密码,以便 IBM HTTP Server 在启动时能打开数据库而无需交互式提示。这不是加密:任何有该文件读取权限的人都能恢复出密码。请确保 .kdb 和 .sth 都仅供 IHS 用户读取,将数据库存储在本地文件系统上(而不是全局可读的共享位置),并将这两个文件备份到安全位置。
这是随 64 位 GSKit 8.x 一起提供的二进制文件,捆绑在 WebSphere Application Server 9 和 IBM HTTP Server 9.0 中。GSKit 10(捆绑于 WebSphere 10 及更高版本)遵循相同的命名惯例。本指南中提到的 gskcapicmd 名称是 IHS 分发的封装程序,会为您的安装调用正确的二进制文件;gsk8capicmd_64 是同一工具的带版本号名称。两者都可以使用上述语法。


