Как сделать вызов 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 многие проблемы столкнулись, когда вы тестируете службы с сертификатами
