我总是收到一个获取java.security.cert.CertificateException,但该证书导入到信任
java.security.cert.CertificateException: No subject alternative names present
例外,但是我已经导入证书到我的trusrstore。在这里我的设置:
我正在使用基于com.sun.net.httpserver.HttpsServer
的小型HTTPS服务器。我已经创建一个自签名证书密钥库:
keytool -genkey -keyalg RSA -alias myCert -keystore keystore.jks -storepass myPass -validity 360 -keysize 2048
我传递密钥库作为VM参数的路径和密码Djavax.net.ssl.keyStore=/tmp/truststore.jks
Djavax.net.ssl.keyStorePassword=myPass
如果我跑openssl s_client -connect 192.168.1.101:4443
我可以看到它使用了正确的证书。
要信任客户端的网站上的证书,我已经从服务器密钥库导出的证书,并将其导入到客户信任:
keytool -export -alias myCert -file myCert.crt -keystore keystore.jks
keytool -import -trustcacerts -alias -file myCert.crt -keystore truststore.jks
对于客户端我用用球衣一个小的测试程序。我传递的路径,作为信任VM参数-Djavax.net.ssl.trustStore=/tmp/truststore.jks
public class Tester {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
try {
String name = client.target("https://192.168.1.101:4443")
.request(MediaType.TEXT_PLAIN)
.get(String.class);
System.out.println(name);
} catch (final Exception e) {
System.err.println(e);
}
}
}
但是,无论自签名证书的信任,我总是得到它的
java.security.cert.CertificateException: No subject alternative names present
exception
可能是什么原因?
这似乎也没有工作 – markus
它的工作原理是,当我把一个域名而不是名称,然后使用本地DNS服务器将域解析为我的本地IP地址。但在这种情况下,我不需要设置SubjectAltName。 – markus