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

更新时间:2026-02-27 来源:TopSSL技术团队

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

使用 Java 自带的 Keytool 工具生成自签名 SSL 证书,主要通过执行 keytool -genkeypair 命令生成包含私钥和自签名公钥证书的密钥库文件(如 JKS 或 PKCS12)。Keytool 是 JDK/JRE 自带的密钥与证书管理工具,适合开发测试、本地环境调试以及内网系统的 HTTPS 签名配置。


使用 Keytool 生成自签名证书步骤

执行生成的全过程通常包含创建密钥库、导出证书文件以及在应用中导入信任三个阶段。

1. 生成密钥对与自签名证书库

打开命令行终端(CMD、Shell 或 PowerShell),执行以下命令生成自签名证书并存入密钥库:

Bash

keytool -genkeypair \
  -alias mydomain \
  -keyalg RSA \
  -keysize 2048 \
  -validity 3650 \
  -keystore keystore.p12 \
  -storetype PKCS12 \
  -ext SAN=dns:localhost,dns:mydomain.com,ip:127.0.0.1

关键参数说明:

  • -alias:密钥库中该证书的别名(如 mydomain)。
  • -keyalg:加密算法,推荐使用 RSAEC
  • -keysize:密钥长度,RSA 算法建议设为 20484096
  • -validity:证书有效天数(如 3650 表示 10 年)。
  • -keystore:生成的密钥库文件名(如 keystore.p12)。
  • -storetype:密钥库格式,建议指定为现代标准的 PKCS12(替代旧版的 JKS)。
  • -ext SAN:​**必填(防浏览器拦截)**​,指定主体备用名称(Subject Alternative Name),包含访问所需的域名或 IP。

命令执行后,系统会提示输入密钥库密码,并依次填写姓名/组织等信息(或直接在命令行追加 -dname "CN=localhost, OU=Dev, O=Company, L=City, ST=State, C=CN" 跳过交互)。

2. 从密钥库导出公钥证书(.cer / .crt)

如果客户端或前端系统(如 Java 客户端、浏览器)需要信任该自签名证书,可将公钥证书文件导出:

Bash

keytool -exportcert \
  -alias mydomain \
  -keystore keystore.p12 \
  -storetype PKCS12 \
  -file mydomain.crt \
  -rfc

参数说明:

  • -file:导出的证书文件名。
  • -rfc:以 Base64 编码(PEM 格式)输出,方便文本查看和跨平台导入。

3. 将证书导入客户端信任库(Truststore)

在 Java 客户端程序访问该自签名 HTTPS 服务时,需将导出的 .crt 证书导入 Java 运行环境的信任库(cacerts)中:

Bash

keytool -importcert \
  -alias mydomain \
  -file mydomain.crt \
  -keystore "%JAVA_HOME%\jre\lib\security\cacerts" \
  -storepass changeit

如果不清楚数字证书的具体加密与验证原理,可以查阅 SSL/TLS证书基础知识 了解公钥体系。


Keytool 自签名证书与生产环境商业证书的区别

自签名证书无需向权威 CA 机构付费,但在实际应用中与公网商业证书存在本质不同:

评估项目Keytool 自签名证书商业 SSL 证书(DV/OV/EV)
信任来源由本地自行签发,不受操作系统/浏览器信任由权威 CA 根证书链背书,全球原生信任
客户端提示浏览器直接拦截并警告“非安全连接”正常显示安全小锁,无风险弹框提示
真实身份核验无第三方身份核验机制包含域名控制权核验(DV)或企业身份核验(OV/EV)
适用场景本地开发、微服务内部通讯、测试环境公网 Web 网站、移动 App 接口、金融与电商系统

在生产环境中,如果需要为企业官网或公网服务配置受信任的证书,可以参考 如何选择SSL证书 以及 商业SSL证书价格 进行评估。如果是小型个人测试项目,也可以了解 免费HTTPS证书 的申请途径。

证书签发后,若需要将证书部署到 Tomcat、Spring Boot 或 Nginx 服务器,可参阅 服务器安装证书 的操作说明;如果在配置过程中遇到客户端连接拒绝或报错,可查看 HTTPS访问异常排查 的诊断方法。


相关问题解答

为什么用 Keytool 生成的自签名证书在 Chrome 浏览器中依然提示“NET::ERR_CERT_AUTHORITY_INVALID”?

A:因为该证书是由本地生成的,其根签发者不在 Chrome 和系统的权威根证书信任库中。在开发测试阶段,可以通过在操作系统或 Chrome 设置中将导出的 .crt 证书手动导入为“受信任的根证书颁发机构”来消除警告。

为什么 Chrome 提示“NET::ERR_CERT_COMMON_NAME_INVALID”?

A:现代浏览器(如 Chrome 58+)已经废弃了仅依赖证书 Common Name(CN)匹配域名的规则,强制要求证书必须包含主体备用名称(SAN)。在使用 Keytool 生成时,必须通过 -ext SAN=dns:localhost,ip:127.0.0.1 显式添加 SAN 属性。

如何在 Spring Boot 中直接引用 Keytool 生成的 .p12 密钥库文件?

A:只需将生成的 keystore.p12 文件放入 Spring Boot 项目的 src/main/resources 目录下,并在 application.yml 中配置配置项:设置 server.ssl.key-store-type=PKCS12server.ssl.key-store=classpath:keystore.p12 以及对应的 server.ssl.key-store-password 即可启用 HTTPS。

立即探索,帮您快速寻找适合您的SSL数字证书 申请SSL证书
免费SSL证书 - SSL证书申请与HTTPS安全服务平台 | TopSSL
提供免费与付费SSL证书申请
关注 TopSSL 公众号, RSS订阅SSL资讯与技术支持

TopSSL是一站式SSL证书服务平台,提供免费SSL证书申请、商业SSL证书服务及HTTPS安全解决方案,支持DV、OV、EV、通配符和国密SSL证书服务。2004-2026 © 北京传诚信  版权所有 |  北京市朝阳区鹏景阁大厦16层

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