我正在使用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
请帮忙!谢谢!
答案 0 :(得分:56)
虽然this question更具体地涉及Subject Alt中的IP地址。名称,命令类似(主机名使用DNS
条目,IP地址使用IP
条目。
引用自己:
如果您使用
keytool
,则Java 7, keytool可以选择 包括主题备用名称(请参阅文档中的表格 for -ext):你可以使用-ext san = dns:www.example.com或-ext SAN = IP:10.0.0.1
请注意,您只需要Java 7的keytool
即可使用此命令。准备好密钥库后,它应该与以前版本的Java一起使用。
(这个答案的其余部分也提到了如何使用OpenSSL进行此操作,但它似乎并不是您正在使用的。)
答案 1 :(得分:21)
可以使用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
答案 2 :(得分:6)
生成CSR时,可以再次指定 -ext 属性以将其插入CSR
keytool -certreq -file test.csr -keystore test.jks -alias testAlias -ext SAN=dns:test.example.com