使用SSL客户端身份验证的Resteasy客户端不起作用

时间:2015-07-27 18:58:49

标签: java authentication ssl curl https

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

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());

没有例外,没有其他错误。任何网址只返回403.

要检查我的cert.p12是否正确,我尝试使用curl连接。

  1. 将p12转换为pem

    openssl pkcs12 -in my_cert.p12 -out my_cert.pem -clcerts

  2. 尝试使用curl连接

    curl -v -1 --cert my_cert.pem:my_pass“https://client_auth.somehost.com/wrong/path

  3. 结果:

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

      curl -v -1 --cert my_cert.pem:my_pass --cacert public_CA.crt“https://client_auth.somehost.com/wrong/path

    2. 结果是:

      HTTP/1.1 404 Not Found
      

      所以,这意味着my_cert没问题。那么为什么它不能用java代码工作呢?

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

      更新

      我已经将代码重写为java原生SSL,并得到了完全相同的结果。 另外,我在CentOS上找到了基于apache和openSSL的主机信息。

0 个答案:

没有答案