bg-tutorials

如何在JBoss服务器上生成CSR

本教程将向您展示如何在 JBoss EAP 和 WildFly 上使用 Java keytool 工具生成 CSR(证书签名请求)。整个流程分两个命令:首先使用keytool -genkeypair在指定别名下创建密钥库和私钥,然后使用keytool -certreq导出对应的 CSR,其中包含 CA 将签发的使用者备用名称。之后导入已签名的证书时会重复使用同一个别名,因此密钥、CSR 以及最终的证书都保存在同一个位置。

版本说明:目前的主流 JBoss 版本是Red Hat JBoss Enterprise Application Platform (EAP) 8,于 2024 年 2 月发布,其基础是上游的WildFly项目(WildFly 41 于 2026 年 7 月发布,是当前的社区版本)。两者都通过elytron子系统和 Undertow 的https-listener来配置 HTTPS;旧版指南中出现的 Tomcat 或 Jetty 连接器配置已不再适用。不过,CSR 生成步骤在所有近期版本中都是一致的,因为这只是一个普通的 Java keytool操作。

您需要准备的内容

  • 已安装 Java(JDK 或 JRE),以便使用keytool命令。JBoss EAP 8.0 运行在 Java 11(已弃用)或 17 上,EAP 8.1 增加了对 Java 21 的支持,而 WildFly 41 运行在 Java 17、21 或 25 上(上游不再支持 Java 11)。可通过 keytool -help 确认。
  • 可以访问将托管私钥的 JBoss 服务器的 shell 或终端。私钥必须保留在此服务器上。
  • 您要保护的确切完全限定域名(FQDN),例如www.yourdomain.com,以及要在 SAN 字段中涵盖的任何其他主机名。
  • 用于 CSR 可分辨名称的贵组织法律信息(国家、州/省、城市、组织名称)。

步骤 1:创建密钥库和私钥

如果您已经生成了 CSR,请直接跳转到提交 CSR,然后前往在 JBoss 上安装 SSL 证书。

在 JBoss 服务器上打开终端,创建一个 PKCS12 格式的新密钥库。PKCS12 是现代的、可移植的标准(RFC 7292),自 JDK 9 起一直是 Java 的默认密钥库格式;旧的专有 JKS 格式已被弃用。运行:

keytool -genkeypair 
  -alias jboss 
  -keyalg RSA -keysize 2048 
  -storetype PKCS12 
  -keystore yourdomain.p12 
  -validity 825

各参数含义如下:

  • -alias jboss:密钥库内条目的名称。请选择一个您能记住的标签(通常是jboss、server或您的域名)。请务必记下来。生成 CSR 时以及日后导入已签名证书时,都必须重复使用完全相同的别名。导入时使用了不同的别名,是 keytool 最常见的错误。
  • -keyalg RSA -keysize 2048:2048 位 RSA 密钥是当前公认的最低标准。如果您打算让密钥库保留数年,升级到 3072 位是合理的选择。大多数公共 CA 也接受 ECDSA(-keyalg EC -groupname secp256r1),如果您更希望使用更小、更快的密钥。-groupname 选项需要 JDK 13 或更高版本;在 Java 11 上请改用 -keyalg EC -keysize 256,它会选择相同的 secp256r1 曲线。keytool 不允许在同一命令中同时使用这两个选项。
  • -storetype PKCS12:强制使用现代的 PKCS12 密钥库。对应的扩展名是 .p12(或 .pfx)。
  • -keystore yourdomain.p12:要创建的密钥库文件。请替换为您能识别的名称,并妥善保管此文件,因为其中包含您的私钥。
  • -validity 825:密钥库内自签名占位证书的有效期。CA 签发的证书稍后会替换它,因此这个具体数值并不影响生产环境中的实际使用寿命。

接下来 keytool 会提示您输入密钥库密码。请设置一个强密码,并将其保存在您的密码管理工具中:后续每次运行 keytool 命令时都需要用到它,并且在 JBoss 中配置 Elytron 的credential-reference时也会用到。对于 PKCS12 密钥库,密钥密码与密钥库密码相同,因此只需要记住一个密码。

步骤 2:输入组织信息(DN)

keytool 接下来会要求输入可分辨名称(DN):即写入 CSR 的身份信息字段。请对每个提示项输入贵组织准确、合法的信息。标点符号和准确性都非常重要,因为如果与公开的商业记录不一致,CA 会拒绝该请求。

  • 名字和姓氏 (CN):这是 keytool 的措辞,但实际上对应的是通用名称(Common Name)字段。请输入您要保护的确切FQDN,例如www.yourdomain.com,或通配符形式如*.yourdomain.com。不要输入个人姓名。
  • 组织单位 (OU):公共 CA 已不再签发此字段,建议留空。请注意,直接按回车键并不会真正让它保持为空:keytool 会自动填入默认值,于是 DN 中最终会带有 OU=Unknown,进而写入 CSR。若要真正省略该字段,请使用下方的非交互式 -dname 方式,并在字符串中不包含 OU。
  • 组织 (O):贵公司的完整法定名称,例如Your Company LLC。OV 和 EV 证书要求填写此项;对于 DV 证书,许多 CA 将其视为信息性内容,因此填写它比留空更稳妥。
  • 城市 (L):完整的城市名称,例如San Jose。不要使用缩写。
  • 州或省 (ST):完整的州或省名称,例如California。不要使用两字母代码。
  • 国家代码 (C):两字母的 ISO 国家代码,例如US、GB、DE。

在最后一个提示项之后,keytool 会显示一段摘要信息,类似 CN=www.yourdomain.com, OU=Unknown, O=Your Company LLC, L=San Jose, ST=California, C=US。输入 yes 进行确认。此时密钥库文件已经创建完成,其中包含一个条目:您的别名,其中保存着私钥和一个自签名的占位证书。

如果您更倾向于使用非交互式命令,可以直接内联传入 DN,跳过所有提示:

keytool -genkeypair 
  -alias jboss 
  -keyalg RSA -keysize 2048 
  -storetype PKCS12 
  -keystore yourdomain.p12 
  -dname "CN=www.yourdomain.com, O=Your Company LLC, L=San Jose, ST=California, C=US" 
  -validity 825

步骤 3:生成带有 SAN 的 CSR

现代浏览器和 TLS 客户端会依据使用者备用名称(SAN)扩展来验证证书,而不仅仅依据通用名称。请在 CSR 中直接申请所需的 SAN,这样 CA 才会将它们包含在签发的证书中。请沿用步骤 1 中的相同别名和密钥库:

keytool -certreq 
  -alias jboss 
  -keystore yourdomain.p12 
  -file yourdomain.csr 
  -ext san=dns:yourdomain.com,dns:www.yourdomain.com

各参数含义如下:

  • -alias jboss:必须与步骤 1 中的别名一致。这个别名对应的私钥将对该请求进行签名。
  • -keystore yourdomain.p12:必须与步骤 1 中的密钥库一致。
  • -file yourdomain.csr:CSR 的输出文件名。
  • -ext san=dns:…:使用者备用名称扩展。请列出证书需要覆盖的每一个主机名,包括根域名(yourdomain.com)和 www 子域名。可以用逗号分隔添加更多条目,例如 dns:api.yourdomain.com。

keytool 会提示您输入密钥库密码,并将 CSR 写入当前目录下的yourdomain.csr文件。

关键提示:保留好别名和密钥库

在 JBoss 上最常见的 keytool 错误,就是把签名后的证书导入到一个新的别名下。这样做会导致该证书被存储为一个独立的、可信条目,却没有关联的私钥,从而使 Elytron 密钥管理器无法启动 TLS 会话。请始终将签名后的回复导入到持有私钥的同一个别名下(即步骤 1 中使用的别名)。

在关闭终端之前,请先记下以下这三个值:

  • 别名(本指南中为jboss)。
  • 密钥库文件路径(例如yourdomain.p12;在 JBoss 上,通常位于$JBOSS_HOME/standalone/configuration/)。
  • 密钥库密码。

如果您不确定哪个别名持有您的密钥,可以列出密钥库内容,查找类型为PrivateKeyEntry的条目:

keytool -list -v -keystore yourdomain.p12

步骤 4:提交前先验证 CSR

在 CA 验证之前,提前发现 DN 中的拼写错误或缺失的 SAN。使用 keytool 打印 CSR 内容:

keytool -printcertreq -file yourdomain.csr

或者,如果已安装 OpenSSL,也可以改用它:

openssl req -noout -text -in yourdomain.csr

请在输出内容中确认以下三项:Subject显示的是您确切的 DN,Subject Alternative Name列出了您所需的每一个主机名,并且Public-Key的大小与您所选择的一致(2048 位 RSA,或您选定的其他类型)。您也可以将 CSR 粘贴到我们的CSR Decoder中,在浏览器里进行相同的检查。

步骤 5:将 CSR 提交给您的证书颁发机构

使用任意文本编辑器打开yourdomain.csr。该文件是纯文本格式,以 -----BEGIN NEW CERTIFICATE REQUEST----- 开头,以 -----END NEW CERTIFICATE REQUEST----- 结尾。NEW这个词是 keytool 写入的,属于正常现象:其内容仍是每个 CA 都能接受的标准 PKCS#10 请求。请复制整个内容块,包括这些头尾标记行,然后在您的 CA 结账流程中粘贴到 CSR 字段。在 Windows 上,可使用 Ctrl + A 然后 Ctrl + C 来获取全部文本;在 macOS 上,则使用 Cmd + A 然后 Cmd + C。

在进行任何其他操作之前,请先备份密钥库文件。如果您丢失了yourdomain.p12,也就意味着丢失了私钥,这将导致 CA 返回的已签名证书无法使用,届时您必须重新生成 CSR,从头开始整个流程。

在 CA 验证您的请求并签发证书之后,请继续参阅如何在 JBoss 上安装 SSL 证书。您需要将签名后的证书重新导入到同一个密钥库中的同一个别名下,然后在配置到 Undertow https-listener 的 Elytron key-store、key-manager 和 server-ssl-context 中引用该密钥库。

续期时可以重复使用同一个 CSR 吗?

可以,但从安全最佳实践来看,建议为每张证书都生成全新的密钥库、全新的私钥和全新的 CSR。每次续期都使用新密钥,可以在旧密钥一旦泄露时将影响降到最低,具体操作流程相同:针对一个新的密钥库文件运行keytool -genkeypair和keytool -certreq即可。根据 CA/浏览器论坛的规定,公共 TLS 证书的有效期正在不断缩短(自 2026 年 3 月 15 日起为 200 天,2027 年降至 100 天,2029 年进一步降至 47 天),因此请为更频繁的 CSR 更新周期做好规划,或者在您的 CA 支持的情况下,通过 ACME 实现证书签发的自动化。

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

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

龙飞行的详细图像
撰写人

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

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.