我正在使用 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
请帮忙!谢谢!
尽管这个问题更具体地涉及主题 Alt 中的 IP 地址。名称、命令类似(使用
DNS
条目表示主机名,使用 IP
条目表示 IP 地址)。
引用我自己的话:
如果您使用
,从 Java 7 开始,keytool 可以选择 包括主题备用名称(请参阅文档中的表格 对于 -ext):您可以使用 -ext san=dns:www.example.com 或 -ext san=ip:10.0.0.1keytool
请注意,您只需要 Java 7 的
keytool
即可使用此命令。准备好密钥库后,它应该可以与以前版本的 Java 一起使用。
(这个答案的其余部分还提到了如何使用 OpenSSL 执行此操作,但它似乎不是您正在使用的。)
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
生成 CSR 时,可以再次指定 -ext 属性以将其插入到 CSR 中
keytool -certreq -file test.csr -keystore test.jks -alias testAlias -ext SAN=dns:test.example.com
此处的完整示例:如何使用 keytool 通过 SAN 创建 CSR