Ich werde die Situation erklären.Erhalten eines SSL-Zertifikats bereit für HTTP-Anfrage
Kurzversion ist, dass ich ein SSL-Zertifikat erhalten habe und ich muss es in einige HTTP-Anfragen enthalten. Und ich habe es nicht richtig gemacht.
Ich verwende Guzzle, um die Anfragen zu stellen.
I haben das Zertifikat als String empfangen mit
-----BEGIN CERTIFICATE-----
und endend mit
-----END CERTIFICATE-----
beginnt.
Zunächst bin ich mir nicht 100% sicher, was ich damit zu tun habe, damit es bereit ist, in die Anfrage aufgenommen zu werden. Ich habe es als mycert.crt
Datei gespeichert. Da die Guzzle-Dokumente eine .pem-Datei benötigen, habe ich versucht, eine .crt-Datei in eine .pem-Datei umzuwandeln. Gefunden , versuchte sie beide und es hat nicht funktioniert (übrigens der .crt und .pem Inhalte sind identisch). Lass mich erklären, was nicht funktioniert hat.
Ich habe ein
$client = new GuzzleHttp\Client(['base_uri' => 'https://theuri.com']);
$client->request('GET', 'getit', ['cert' => 'path/to/mycert.pem' ]);
Das Ergebnis war
[GuzzleHttp\Exception\ConnectException]
cURL error 35: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
ich gelesen, dass es einige Standardfehler ist, wenn man etwas in den gesamten Prozess der Herstellung einer Anfrage mit einem Zertifikat messed haben .
Ich habe auch private.key Datei und request.csr, die beim Erstellen des SSL-Schlüssels verwendet wurden. Ich bin mir nicht sicher, ob ich jetzt mit diesen Dingen etwas anfangen muss.
Ich habe nicht viele hilfreiche Informationen online gefunden. Die Threads oder Artikel, die ich gefunden habe, haben den gesamten Prozess von Anfang bis Ende nicht erklärt, so dass ich mich keiner der Methoden, die ich ausprobiert habe, sicher gewesen bin.
EDIT:
ich herausgefunden habe, dass ich wahrscheinlich
$client->request('GET', '/getit', ['verify' => 'path/to/mycert.pem'])
verwenden soll Es gibt mir die Ausnahme
GuzzleHttp\Exception\ConnectException with message 'cURL error 35: SSL peer handshake failed, the server most likely requires a client certificate to connect (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)'
Wenn ich es mit 'cert' zu tun, es ist sagen, dass es das Zertifikat und seinen privaten Schlüssel nicht laden kann. Ich bezweifle, dass die Verwendung von "cert" der richtige Weg ist.
Ich bin völlig unbekannt mit dem System, aber nach dieser Datei http://docs.guzzphp.org/en/latest/request-options.html#verify-option sollte Ihr 'getit' ein Schrägstrich sein. Nicht sicher, wofür "getit" steht, aber vielleicht muss es "getit" oder "getit" sein. Entschuldigung, wenn es keinen Sinn ergibt. – RST
Danke für den Blick darauf, aber die URL ist korrekt, als ob ich überhaupt nichts als 'cert', es gibt Fehler, dass es ein Zertifikat erfordert. :) –