我总是收到
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
它可能是什么原因?
答案 0 :(得分:1)
HTTPS证书应包含SubjectAltName
扩展名,其值应为IP地址(在您的情况下为192.168.1.101)或主机的DNS名称。