在我的环境中,为了发出成功的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.keystore
和rootca.truststore
。
任何帮助都会很棒!谢谢!
答案 0 :(得分:1)
在REST保证下,无法将密钥和证书文件直接作为参数。目前确保的REST可以接受密钥库和信任库。因此,您必须首先创建这些文件,然后将密钥/证书放入其中,如下所示。
生成密钥库
openssl pkcs12 -export -inkey client-private.key -in client-cert.pem -out keystore.p12
产生信任
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"