Как сделать вызов HTTPS GET с сертификатом в Rest-Assured java
Как я могу сделать вызов GET с помощью Будьте Уверены в java к конечной точке, которая требует сертификата. У меня есть сертификат . В PEM-файле есть сертификат и закрытый ключ.
6 ответов
Он работает со следующим кодом -
KeyStore keyStore = null;
SSLConfig config = null;
try {
keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(
new FileInputStream("certs/client_cert_and_private.p12"),
password.toCharArray());
} catch (Exception ex) {
System.out.println("Error while loading keystore >>>>>>>>>");
ex.printStackTrace();
}
if (keyStore != null) {
org.apache.http.conn.ssl.SSLSocketFactory clientAuthFactory = new org.apache.http.conn.ssl.SSLSocketFactory(keyStore, password);
// set the config in rest assured
config = new SSLConfig().with().sslSocketFactory(clientAuthFactory).and().allowAllHostnames();
RestAssured.config = RestAssured.config().sslConfig(config);
RestAssured.given().when().get("/path").then();
в моем случае с помощью "relaxed HTTPs validation" исправлена моя проблема:
given().relaxedHTTPSValidation().when().post("https://my_server.com")
Я новичок в rest-assured, но я знаю такие проблемы с использованием цифровых сертификатов для аутентификации клиента
в rest-assured doc есть только возможность настроить сертификат: JKS
RestAssured.config = RestAssured.newConfig().sslConfig(new SSLConfig("/truststore_javanet.jks", "test1234");
преобразуйте PEM в JKS. Откройте его с помощью portecle и убедитесь, что пароль правильный, и у вас есть загруженный сертификат и вся цепочка сертификации в корень CA. Portecle упрощает командную строку с помощью GUI, а также позволяет создавать JKS
http://portecle.sourceforge.net/
эта ошибка возникает всегда, когда ваш клиент java не доверяет сертификату сервера
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
самый простой способ исправить это-включить цепочку сертификатов сервера в хранилище ключей jdk.
сначала загрузите сертификаты сервера, открывающие https-соединение с вашим браузером, например с chrome. Не имеет значения, что он терпит неудачу. Нажмите на зеленую блокировку на панели инструментов>подробно>см. сертификат сервера и загрузите как PEM. Лучше всего скачать сами убедитесь, что вы используете правильный. Загрузить все сертификаты цепочки сертификации
затем откройте JDK cacerts в JDK_HOME/jre/lib / security с помощью portecle. Пароль будет "changeit". Добавьте сертификаты сервера как "доверенные"
Теперь, pkix путь здание не удалось исчезнет. Если нет, проверьте сертификаты и JDK, который вы используете
код, упомянутый ниже, просто работает,
public static void getArtifactsHttps(String args) {
String username = "username";
String password1 = "password";
StringBuilder authorization = new StringBuilder();
authorization.append(username).append(":").append(password);
String authHeader = "Basic " + Base64.getEncoder().encodeToString(authorization.toString().getBytes());
String response = RestAssured
.given()
.trustStore("D:\workspace\DemoTrust.jks", "DemoTrustKeyStorePassPhrase")
.when()
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.header("Authorization", authHeader)
.baseUri("https://server.us.oracle.com:55898")
.queryParam("name", args)
.get("/validendpoint").prettyPrint();
System.out.println("RESPONSE" + response);
}
используя RestAssured 3.0, я взял код @rohitkadam19 и заставил его работать так:
@Before
public void setUp() throws Exception {
try {
RestAssured.port = port;
RestAssured.useRelaxedHTTPSValidation();
RestAssured.config().getSSLConfig().with().keyStore("classpath:keystore.p12", "password");
} catch (Exception ex) {
System.out.println("Error while loading keystore >>>>>>>>>");
ex.printStackTrace();
}
}
пожалуйста, используйте последнюю версию 3.0.7, как и в предыдущих версиях rest-assured многие проблемы столкнулись, когда вы тестируете службы с сертификатами