Java等效于使用curl命令行实用程序的休息调用到带有certs的https url

时间:2017-03-12 13:33:25

标签: java rest ssl curl ssl-certificate

对于java来说,我有点像菜鸟。所以,我需要得到所有帮助。 有没有办法让以下功能像Java一样工作?

curl --cert public_cert.pem --key privateKeyNOPASS.key --cacert CAchain.pem https://abc.webapp.com

我想知道是否可以仅使用手边的证书(命令中提到的证书)在Java中完成此操作

TIA

1 个答案:

答案 0 :(得分:0)

是的,根据您是仅要使用JDK还是乐于使用像OkHttp这样的库,将会有很多不同的示例来实现这一点。需要一些装配。

这是一个使用自定义CA证书和客户端身份验证的OkHttp单元测试

https://github.com/square/okhttp/blob/cd872fd83824512c128dcd80c04d445c8a2fc8eb/okhttp-tests/src/test/java/okhttp3/internal/tls/ClientAuthTest.java#L194-L206

  public OkHttpClient buildClient(HeldCertificate cert, HeldCertificate... chain) {
    SslClient.Builder sslClientBuilder = new SslClient.Builder()
        .addTrustedCertificate(serverRootCa.certificate);

    if (cert != null) {
      sslClientBuilder.certificateChain(cert, chain);
    }

    SslClient sslClient = sslClientBuilder.build();
    return defaultClient().newBuilder()
        .sslSocketFactory(sslClient.socketFactory, sslClient.trustManager)
        .build();
  }

我有一个OSX的java + OkHttp客户端,它支持这个功能,所以你可以在那里选择代码,或运行该命令行在Mac上进行测试。注:它假设您已使用JDK keytool将密钥加载到密钥库中。

$ brew install yschimke/tap/oksocial
$ oksocial --help
        --cert <serverCerts>
            Use given server cert (Root CA) 
        --clientauth
            Use Client Authentication (from keystore)
        --keystore <keystoreFile>
            Keystore

加载证书和构建OkHttpClient的大部分代码都在这里

https://github.com/yschimke/oksocial/blob/master/src/main/java/com/baulsupp/oksocial/security/CertificateUtils.java https://github.com/yschimke/oksocial/blob/master/src/main/java/com/baulsupp/oksocial/security/KeystoreUtils.java