java restAssured 等价于 cURL 证书选项

标签 java ssl curl ssl-certificate rest-assured

在我的环境中,为了发出成功的 cURL 命令,我必须包含以下指向已下载文件的选项:

--key /path/to/client-private.key
--cert /path/to/client-cert.pem
--cacert /path/to/caroot.pem

我无法找到有关如何通过使用这些文件的 restAssured java 库进行等效 REST 调用的信息。我相信我需要调用RestAssured.config().sslConfig(someConfig);但不确定如何构建 someConfig .

我还可以访问 rootca.keystorerootca.truststore如果这有帮助。

任何帮助都会很棒!谢谢!

最佳答案

在 REST-assured 中,没有办法将 key 和证书文件直接作为参数。 REST 保证目前可以接受 key 和信任存储。因此,您必须先创建它们并将 key /证书放入其中,如下所示。

生成 keystore

openssl pkcs12 -export -inkey client-private.key -in client-cert.pem -out keystore.p12

生成委托(delegate)人
keytool -import -alias ca -file caroot.pem -keystore truststore.jks

您的请求应如下所示:

RestAssured.given()
    .spec(new RequestSpecBuilder()
            .setBaseUri(HOSTNAME_URI)
            .setAuth(RestAssured
                    .certificate(
                            "truststore.jks",
                            truststorePassword,
                            "keystore.p12",
                            keystorePassword,
                            CertificateAuthSettings
                                    .certAuthSettings()
                                    .keyStoreType("pkcs12")
                                    .trustStoreType("pkcs12")
                                    .allowAllHostnames())).build())
            .when()
            .log().all()
            .header("Content-Type","application/json") //assumming you want to send Json via POST request
            .body(JsonUtils.toJsonString(yourJsonString))
            .contentType(ContentType.JSON)
            .port(443)
            .post(RELATIVE_PATH_TO_YOUR_ENDPOINT);

即使设置了 allowAllHostnames(),也值得将主机证书导入信任库(否则您会得到 InvalidCertificationPathException)。

你可以这样做:
openssl s_client -showcerts -connect YOUR_HOST:443  </dev/null > host_certificate.crt

然后将 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 之间的行提取到一个新文件中,我们将其命名为 host_cert.crt。
之后将此证书导入现有的信任库。
keytool -importcert -file host_cert.crt -keystore trustStore.jks -alias "hostCertificate"

关于java restAssured 等价于 cURL 证书选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48835965/

相关文章:

java - 如何以编程方式关闭Android中的对话框?

ssl - 在 Nginx 上禁用 TLS 1.0(符合 PCI-DSS)

c# - WebBrowser.Navigate 通过 HTTP 工作,但在 HTTPS (C#) 上对相同的 url 失败

php - 使用 curl 发送请求时出现无效 header 错误

linux - 如何知道连接被拒绝抛出了 curl

PHP 和 cURL : same code but unable to fetch content on existing server conf

java - 如何编写阶乘代码

java - Java 中的输入文件

amazon-web-services - 证书过期和 SHA-1

java - A星算法java实现详解