2016-05-20 4 views
2

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.

+1

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

+0

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. :) –

Antwort

2

Okay, ich habe das jetzt herausgefunden. Ich hatte vorher keine Erfahrung mit Zertifikaten. Ich habe alles auf OS X getan, aber Sie sollten das Bild bekommen. Einige Dinge wie das Hinzufügen eines privaten Schlüssels zu Ihrem Schlüsselbund sind wahrscheinlich anders.

  1. ein Zertifikat PKCS # 12-Datei generieren

, das zu tun, müssen Sie das Zertifikat selbst und den privaten Schlüssel, der mit ihm geht. Im Terminal können Sie es mit dem Befehl openssl tun.Der vollständige Befehl ist

openssl pkcs12 -export -clcerts -inkey ~/private.key -in ~/certificate.crt -out MyCertPKCS12.p12 -name "Full Name" 

Jetzt haben Sie eine Datei MyCertPKCS12.p12 erstellt, die Sie in Ihrem Schlüsselbund hinzuzufügen haben und sind mit HTTP-Anfragen. Die Datei wird mit einem Passwort versehen und Sie werden aufgefordert, es einzugeben, sobald Sie diesen Befehl ausgeführt haben.

  1. PKCS # 12-Datei auf Ihrem Schlüsselanhänger

Eröffnet Schlüsselbund und importiert die P12-Datei hinzufügen. Zunächst hatten einige Vertrauensfragen und mussten manuell festlegen, welche Komponenten dem Zertifikat vertrauen. Um dies zu tun, öffnen Sie Schlüsselbund Zugriff. Oben links ist eine Liste von Schlüsselbunden, wählen Sie System und Sie sehen dort Ihr frisch hinzugefügtes Zertifikat. Doppelklicken Sie darauf, um es zu öffnen, und Sie können festlegen, was diesem Zertifikat von dort vertraut.

  1. eine HTTP-Anforderung mit dem Zertifikat zu machen

Zuerst wenn Sie eine einfache GET-Anfrage zu tun haben, können Sie die URL in Ihren Browser eingeben können und Sie sollten gefragt werden, wenn Sie die Verwendung eines Zertifikats zulassen. Erlaube es und wähle das Zertifikat aus. Alles sollte jetzt funktionieren. Wenn nicht, Google die Fehlermeldung.

eine GuzzleHttp Anfrage mit dem Zertifikat Doing geht wie folgt vor:

$client = new GuzzleHttp\Client(['base_uri' => 'https://muchsecure.wow']); 

$cert = "/path/to/MyCertPKCS12.p12"; 

$method = "GET"; //or whatever the method is 

$response = $client->request($method, '/getinfo', ['cert' => [ 
    $cert, 'epicpasswordISetForTheP12File' 
]]) 

Und Sie haben jetzt eine Anfrage an url https://muchsecure.wow/getinfo mit dem Zertifikat gemacht.

Wenn Sie weitere Fragen haben, würde ich glücklich sein, Ihnen allen zu helfen.

Verwandte Themen