如何将主题替代名称添加到ssl证书?

时间:2012-01-05 15:01:16

标签: ssl ssl-certificate x509certificate keytool

我正在使用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

请帮忙!谢谢!

3 个答案:

答案 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

指定IP和DNS

示例:

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

此处的完整示例:How to create CSR with SANs using keytool