如何用Java Keytool生成自签名SSL证书

更新时间:2026-02-27 来源:TopSSL AI 助理 作者:TopSSL AI 助理

如何用Java Keytool生成自签名SSL证书

可使用 keytool(JDK 自带工具)通过 -genkeypair 命令直接生成密钥对并自签名证书,无需先生成 CSR。典型命令如下:

keytool -genkeypair -alias myserver \
  -keyalg RSA -keysize 2048 \
  -storetype PKCS12 -keystore server.p12 \
  -validity 365 \
  -dname "CN=localhost,OU=Dev,O=MyOrg,L=Beijing,ST=Beijing,C=CN" \
  -keypass changeit -storepass changeit

该命令生成一个 PKCS#12 格式的密钥库(server.p12),其中包含:RSA 2048 位私钥、自签名的 X.509 v3 证书(有效期 365 天)、主体 DN 为指定值。证书由 keytool 内置的自签名 CA 签发,不经过任何第三方 ssl证书 机构验证。

若需导出 PEM 格式证书供 Nginx/Apache 使用,可分两步操作:

  • 导出证书(仅公钥部分):keytool -exportcert -alias myserver -file server.crt -keystore server.p12 -rfc -storepass changeit
  • 导出私钥(需借助 OpenSSL 转换):openssl pkcs12 -in server.p12 -nodes -nocerts -out server.key(提示输入 keystore 密码后输出 PEM 私钥)

注意:自签名证书无法被浏览器默认信任,访问时会触发 NET::ERR_CERT_AUTHORITY_INVALID 等警告;仅适用于开发测试、内网服务或已手动将根证书导入客户端信任库的场景。

需要注意的情况

  • 密钥库格式选择:JDK 9+ 默认使用 PKCS12(推荐),旧版 JDK 可能默认 JKS,但 JKS 已被 Oracle 标记为 deprecated(RFC 7292 明确推荐 PKCS#12)
  • 主机名匹配:若用于 HTTPS 服务,CNsubjectAltName 必须与实际访问域名一致;keytool 1.8.0_281+ 支持 -ext SAN=dns:example.com,ip:192.168.1.10 添加 SAN 扩展
  • 密码安全:生产环境严禁使用 changeit 等默认密码;-keypass-storepass 应设为强密码且分开管理
  • 算法兼容性:如需国密支持,keytool 原生不支持 SM2/SM3/SM4,须使用支持国密的 JDK(如江南科友、鼎铉等定制版)或改用 国密SSL证书 专用工具链
立即探索,帮您快速寻找适合您的SSL数字证书 申请SSL证书
免费 SSL 证书申请|HTTPS 加密|企业级 SSL 证书服务 – TopSSL
提供免费与付费SSL证书申请
微信公众号二维码 扫一扫在线咨询
关注 TopSSL 公众号, RSS订阅SSL资讯与技术支持

2004-2026 ©北京传诚信  版权所有 | TopSSL提供免费 SSL 证书与企业级付费证书申请,快速实现 HTTPS 加密  北京市朝阳区鹏景阁大厦16层

技术协助:wo@topssl.cn 企业咨询:vip@topssl.cn