关于ssl证书:如何在ssl证书中添加使用者替代名称?

How to add subject alernative name to ssl certs?

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

javax.net.ssl.SSLHandshakeException:
java.security.cert.CertificateException: No subject alternative names
present

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

1
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

生成密钥:

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

请帮忙! 谢谢!


尽管此问题更具体地与主题替代中的IP地址有关。 名称,命令是相似的(使用DNS条目作为主机名,使用IP条目作为IP地址)。

引用我自己:

If you're using keytool, as of Java 7, keytool has an option to
include a Subject Alternative Name (see the table in the documentation
for -ext): you could use -ext san=dns:www.example.com or -ext
san=ip:10.0.0.1

请注意,您只需要Java 7的keytool来使用此命令。 一旦准备好密钥库,它就可以与Java的早期版本一起使用。

(此答案的其余部分还提到了如何使用OpenSSL进行此操作,但这似乎并不是您所使用的。)


IP和DNS都可以使用keytool附加参数-ext SAN=dns:abc.com,ip:1.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

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

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