如何将主题备用名称添加到 ssl 证书?

问题描述 投票:0回答:3

我正在使用 openssl 创建自签名证书。我生成的证书出现此错误:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException:没有主题备用名称 礼物


有谁知道如何在创建证书时指定“主题备用名称”? 这就是我生成密钥库的方式:

sudo $JAVA_HOME/bin/keytool -genkey -dname "CN=192.168.x.xxx, OU=I, O=I, L=T, ST=On, C=CA" -alias tomcat -validity 3650 -keyalg RSA -keystore /root/.keystore -keypass abcd -storepass abcd

生成密钥:

 openssl s_client -connect 192.168.x.xxx:8443 2>/dev/null

请帮忙!谢谢!

ssl ssl-certificate x509certificate keytool
3个回答
76
投票

尽管这个问题更具体地涉及主题 Alt 中的 IP 地址。名称、命令类似(使用

DNS
条目表示主机名,使用
IP
条目表示 IP 地址)。

引用我自己的话:

如果您使用

keytool
,从 Java 7 开始,keytool 可以选择 包括主题备用名称(请参阅文档中的表格 对于 -ext):您可以使用 -ext san=dns:www.example.com 或 -ext san=ip:10.0.0.1

请注意,您只需要 Java 7 的

keytool
即可使用此命令。准备好密钥库后,它应该可以与以前版本的 Java 一起使用。

(这个答案的其余部分还提到了如何使用 OpenSSL 执行此操作,但它似乎不是您正在使用的。)


40
投票

IP 和 DNS 都可以使用 keytool 附加参数指定

-ext SAN=dns:abc.com,ip:1.1.1.1

示例:

keytool -genkeypair -keystore <keystore> -dname "CN=test, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown" -keypass <keypwd> -storepass <storepass> -keyalg RSA -alias unknown -ext SAN=dns:test.abc.com,ip:1.1.1.1

11
投票

生成 CSR 时,可以再次指定 -ext 属性以将其插入到 CSR 中

keytool -certreq -file test.csr -keystore test.jks -alias testAlias -ext SAN=dns:test.example.com

此处的完整示例:如何使用 keytool 通过 SAN 创建 CSR

© www.soinside.com 2019 - 2024. All rights reserved.