Java 带有SSL客户端身份验证的Resteasy客户端不起作用

Java 带有SSL客户端身份验证的Resteasy客户端不起作用,java,authentication,ssl,curl,https,Java,Authentication,Ssl,Curl,Https,我有p12客户端证书。我的主机具有SSL证书,该证书由RapidSSL签署,并添加了用于客户端身份验证的p12证书。我使用Resteasy客户端访问此主机。下面我用来连接的代码: ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); KeyStore keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(classLoader.getResou

我有p12客户端证书。我的主机具有SSL证书,该证书由RapidSSL签署,并添加了用于客户端身份验证的p12证书。我使用Resteasy客户端访问此主机。下面我用来连接的代码:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(classLoader.getResourceAsStream("my_cert.p12"), keyPass.toCharArray());
SSLContext sslContext = SSLContexts.custom()
        .loadKeyMaterial(keyStore, "my_pass".toCharArray())
        .build();
ResteasyClientBuilder clientBuilder = (ResteasyClientBuilder) ResteasyClientBuilder.newBuilder();
clientBuilder.sslContext(sslContext);
Client client = clientBuilder.build();
WebTarget webTarget = client.target("https://client_auth.somehost.com/wrong/path");
Response response = webTarget.request().get();
Assert.assertEquals(404, response.getStatus());
没有例外,没有其他错误。对于任何URL,它只返回403

为了检查我的cert.p12是否正确,我已尝试使用curl连接

  • 将p12转换为pem

    openssl pkcs12-在my_cert.p12中-在my_cert.pem中-在clcerts中

  • 尝试使用curl连接

    curl-v-1--证书我的证书。pem:我的证书“”

  • 结果是:

    curl: (60) SSL certificate problem: self signed certificate in certificate chain
    
  • 通过浏览器下载主机证书并将其指定为受信任的

    curl-v-1--cert my_cert.pem:my_pass--cacert public_CA.crt“”

  • 结果是:

    HTTP/1.1 404 Not Found
    
    所以,这意味着我的证书没问题。那么为什么它不能从java代码中工作呢

    Java版本“1.8.0_31” Java(TM)SE运行时环境(build 1.8.0_31-b13) Java HotSpot(TM)64位服务器虚拟机(构建25.31-b07,混合模式)

    更新 我将代码重写为java原生SSL,得到了完全相同的结果。 此外,我还发现了一些信息,即CentOS上基于apache和openSSL的主机