Java 等效于使用 curl 命令行实用程序对带有证书的 https url 进行 rest 调用

标签 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

最佳答案

是的,会有很多不同的示例来说明如何实现这一点,具体取决于您是只想使用 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 key 工具将 key 加载到 keystore 中。

$ 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

关于Java 等效于使用 curl 命令行实用程序对带有证书的 https url 进行 rest 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42748048/

相关文章:

json - 如何反序列化 java pojo 类中的 json 对象?

java - 我想设置 s3 对象特定保留

java - 简单的 XML 框架 - 使用单个转换器转换继承的类

Java,类类型列表

java - 使用java完全停止elasticsearch服务器并重新启动

Java SSL 客户端-服务器 : unable to find valid certification

java - 我正在尝试保存带有递增变量的文件名

java - Java 中 SOAP 和 RESTful Web 服务的主要区别

java - 如果 SSLSocket.startHandshake() 是同步的,为什么它会提供回调?

php - Wordpress 站点同时为不同域的 http 和 https 提供服务