首页 文章

获取java.security.cert.CertificateException,但证书将导入信任库

提问于
浏览
0

我总是收到一个

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

它可能是什么原因?

1 回答

  • 1

    HTTPS证书应包含 SubjectAltName 扩展名,该值应为IP地址(在您的情况下为192.168.1.101)或主机的DNS名称 .

相关问题