Ich teste eine API, die curl_exec
php-Funktion und ein CA-Zertifikat verwendet, aber etwas läuft schief und ich bin ein wenig verloren.
Ich habe SSL auf meinem Apache VirtualHost konfiguriert und sieht gut aus (opening https:://[myVHost]
... funktioniert).
Wie auch immer, der API-Curl-Aufruf gibt mir diese Nachricht zurück:
SSL peer certificate or SSH remote key was not OK
Ich bin nicht sehr erfahren mit SSL, also habe ich nur wenige Ideen über die Ursache.
UPDATE:
Dies ist der Code, den ich in meiner cURL-Anfrage verwende, ich habe 2 Zeilen kommentiert und ihren Wert geändert (siehe 'TODO'-Zeile) und auf diese Weise funktioniert es, aber das ist nur eine Arbeit. .
%Vor%Sie verwenden wahrscheinlich selbstsignierte SSL-Zertifikate, die nicht übergeben werden, wenn die CURLOPT_SSL_VERIFYPEER-Optionen festgelegt sind.
Es gibt zwei Lösungen:
Wenn Sie die Überprüfung deaktivieren, können Sie nicht sicher sein, ob Sie tatsächlich mit Ihrem Host kommunizieren. Es hängt also von der Sicherheitsstufe ab, die Sie benötigen.
Obwohl ich einen alten Beitrag beantworte, denke ich, dass er den neuen Zuschauern helfen wird -
Sie können das Problem überprüfen, indem Sie
hinzufügen %Vor%Bei einem selbstsignierten Zertifikat kann Ihr Client eine Verbindung mit dem Server über die IP-Adresse herstellen, da der Hostname nicht im DNS-Cache verfügbar ist. In diesem Fall muss der COMMON NAME (CN) Ihres Serverzertifikats mit der Server-IP übereinstimmen (geben Sie die IP-Adresse als allgemeinen Namen an, wenn Sie das Serverzertifikat generieren). Wenn Sie es richtig machen, können Sie diese Nachricht sehen:
allgemeiner Name: 192.168.0.1 (übereinstimmend)
Hier ist 192.168.0.1 ein Beispiel.
Sie haben Recht, SSL_VERIFYPEER
zu aktivieren, wenn Sie sich Sorgen um Man-in-the-Middle-Angriffe machen.
Ist Ihre $path
so eingestellt, dass sie auf das Zertifikat (oder Zertifikatspaket) verweist, das vom API-Besitzer bereitgestellt wird? Ist dieses Zertifikat vom Webserver-Benutzer lesbar? Wenn ja, haben Sie überprüft, ob das / die Zertifikat (e) identisch mit dem ist, wenn Sie die https-Adresse manuell in einem Browser aufrufen und das Zertifikat überprüfen?
Wenn Sie es nicht zum Laufen bringen können und die API, mit der Sie verbunden sind, ein SSL-Zertifikat hat, das in Ihrem normalen Browser ohne Warnungen funktioniert, sollten Sie $path
auf Ihrem CA-Root-Bundle auf Ihrem Server setzen können .
Sie können ein gültiges SSL-Zertifikat erstellen und sicherstellen, dass es im vertrauenswürdigen Ordner gespeichert ist.
Ein gültiges SSL-Zertifikat kann erstellt werden, indem der folgende Befehl in die Entwicklerbefehlseingabe von VS2012
eingefügt wird. (Dies kann durch Eingabe von Entwickler am Anfang erreicht werden)
Der folgende Befehl erstellt ein selbstsigniertes Zertifikat, das zum Testen einer Webanwendung verwendet werden kann, die Secure Sockets Layer (SSL) auf einem Webserver mit der URL www.example.com
verwendet. Die OID, die durch die Option -eku
definiert wird, identifiziert dieses Zertifikat als SSL server certificate
. Das Zertifikat wird im my store gespeichert und steht auf der Ebene des Computers (und nicht auf der Ebene des Benutzers) zur Verfügung. Der private Schlüssel des Zertifikats ist exportierbar und das Zertifikat ist gültig von May 10, 2010 through December 22, 2011
.
Makecert -r -pe -n CN="www.beispiel.com" -b 05/10/2010 -e 12/22/2011 -eku 1.3.6.1.5.5.7.3.1 -ss meine -sr localmachine -sky Exchange -sp "Microsoft RSA SChannel Kryptografie-Anbieter" -sy 12
Weitere Informationen zum Erstellen des SSL-Zertifikats
Stellen Sie jetzt sicher, dass dieses Zertifikat vertrauenswürdig ist. Dies kann durch Eingabe von CERTMGR
in cmd. .. erfolgen.
Jetzt befindet sich das erstellte Zertifikat im PERSONAL-Ordner. Kopieren Sie es und fügen Sie es in den TRUSTED PEOPLE FOLDER ein.
Dies sollte den Trick machen. Lass es mich wissen, wenn das nicht funktioniert.
Ich hatte das gleiche Problem. Ich folge den Anweisungen hier: Ссылка und es hat meinen behoben.
Grundsätzlich ging ich zu /etc/resolv.conf
und ersetzen Sie alle
OpenDNS-Server:
208.67.222.222
208.67.220.220
Mit
Googles öffentliche DNS-Server:
Nameserver 8.8.8.8 Nameserver 8.8.4.4