说到 Java,我有点菜鸟。所以,我需要我能得到的所有帮助。 有没有办法让下面的功能像在 Java 中一样工作?
curl --cert public_cert.pem --key privateKeyNOPASS.key --cacert CAchain.pem https://abc.webapp.com
我想知道这是否可以仅使用手头可用的证书(命令中提到的证书)在 Java 中完成
TIA
最佳答案
是的,会有很多不同的示例来说明如何实现这一点,具体取决于您是只想使用 JDK 还是乐于使用像 OkHttp 这样的库。需要一些组装。
这是一个使用自定义 CA 证书和客户端身份验证的 OkHttp 单元测试
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/