Wie kann ich einen GET Anruf mit Rest-Assured in Java zu einem Endpunkt machen, der Zertifikat benötigt. Ich habe ein Zertifikat als .pem
Format. In der PEM-Datei gibt es ein Zertifikat und einen privaten Schlüssel.Wie mache ich HTTPS GET Anruf mit Zertifikat im Rest-Assured Java
Antwort
verwenden Verstanden mit folgenden Code arbeiten -
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();
Ich versuche das Gleiche ... Können Sie mir sagen, wie Sie das Zertifikat für den Endpunkt erhalten haben? –
@HarishTalanki Ich habe Zertifikate vom Entwickler – rohitkadam19
Ich hatte eine Umgehungsmöglichkeit dafür. Aber ich schätze Ihre Antwort sehr. Vielen Dank. –
Ich bin neu zu sicher sein, aber ich weiß, diese Art von Problemen digitale Zertifikate für die Client-Authentifizierung
In Ruhesicher doc mit nur eine Option Zertifikat konfigurieren: JKS
RestAssured.config = RestAssured.newConfig().sslConfig(new SSLConfig("/truststore_javanet.jks", "test1234");
Convert Ihre PEM zu JKS. Öffnen Sie es mit porcle und stellen Sie sicher, dass das Passwort korrekt ist und Sie das Zertifikat geladen und die gesamte Zertifizierungskette zu CA root haben. Portecle vereinfachen die Befehlszeile ein GUI und ermöglicht Ihnen auch die JKS
http://portecle.sourceforge.net/
Dieser Fehler IMMER erstellen tritt auf, wenn Ihr Java-Client in Serverzertifikat nicht vertrauen
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Der einfachste Weg zu beheben Dazu gehört die Server-Zertifikatskette in Ihrem jdk-Keystore.
Laden Sie zuerst die Serverzertifikate herunter, die eine https-Verbindung mit Ihrem Browser öffnen, z. B. mit Chrome. Es macht nichts, es scheitert. Klicken Sie auf das grüne Schloss in der Symbolleiste> Detail> Serverzertifikat anzeigen und als PEM herunterladen. Es ist am besten, es selbst herunterzuladen, um sicherzustellen, dass Sie das richtige verwenden. Laden Sie alle Zertifikate der Zertifizierungskette herunter
Öffnen Sie dann jdk cacerts unter JDK_HOME/jre/lib/security mit portecle. Das Passwort wird "ändern". Fügen Sie die Serverzertifikate als 'vertrauenswürdig' hinzu.
Nun wird der fehlgeschlagene PKIX-Pfadaufbau verschwinden. Falls nicht, die Zertifikate überprüfen und die JDK Sie
Ich habe das versucht, aber es sagt "Kein erforderliches SSL-Zertifikat wurde gesendet". Ich erstelle Schlüsselspeicher und füge ihn zu RestAssured hinzu. – rohitkadam19
In einem SSL-Handshake wird die Zertifikatsauthentifizierungsanforderung nach der Verifizierung des Server-Zertifikatports OCCURS übergeben. Daher wird der erste Schritt übergeben. Sind Sie sicher, dass Ihr JKS-Zertifikat vom Server akzeptiert wird? Ist ein falsches Passwort falsch oder wurde JKS nicht gefunden? – pedrofb
Die unten genannten Code nur funktioniert,
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);
}
In meinem Fall mit „relaxed HTTPs Validierung“fixed mein Problem:
given().relaxedHTTPSValidation().when().post("https://my_server.com")
Mit RestAssured 3.0 ich habe @rohitkadam 19 Code und bekam Arbeit es so:
@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();
}
}
Bitte neueste Version 3.0.7 als in früheren Versionen von Rest-sicher viel Problem verwenden hat konfrontiert, wenn Sie Dienste mit Zertifikaten testen
ich es zu konvertieren versucht, jks und in RestAssured.keystore verwendet (jks, "passwrd"), aber es gibt Fehler - PKIX-Pfadaufbau fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException: kann gültigen Zertifizierungspfad zum angeforderten Ziel nicht finden – rohitkadam19
Verwenden Sie die neueste Version von 2.9.0? – Johan
@Johan Ja, mit der neuesten Version 2.9.0 – rohitkadam19