Ich bin neu in der CURL-Welt und komme aus der Windows + .NET-Domäne.
Versuch, auf die Rest-API für die Basisauthentifizierung unter http://www.evercam.io/docs/api/v1/authentication zuzugreifen .
curl -X GET https://api.evercam.io/v1/... \
-u {username}
Ich weiß nicht, wie ich diesen Befehl an der Windows-Eingabeaufforderung verwenden soll, nachdem CURL erfolgreich eingerichtet wurde. Getestete CURL wie folgt:
C:\>curl --version
curl 7.33.0 (x86_64-pc-win32) libcurl/7.33.0 OpenSSL/0.9.8y zlib/1.2.8 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp s
ftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz
Jetzt beende ich damit
C:\>curl -u myuser:mypassword -X GET https://api.evercam.io/v1/
curl: (51) SSL: no alternative certificate subject name matches target host name 'api.evercam.io'
Wie kann ich diesen SSL-Fehler 51 beheben?
*.my-domain.com
nicht zutrafdev.subdomain.my-domain.com
. Funktioniert aber gut fürdev-subdomain.my-domain.com
. Damit mehrere SubdomainsAnmerkung des Herausgebers: Dies ist ein sehr gefährlicher Ansatz, wenn Sie eine Version von PHP verwenden, die alt genug ist, um sie zu verwenden. Es öffnet Ihren Code für Man-in-the-Middle-Angriffe und entfernt einen der Hauptzwecke einer verschlüsselten Verbindung. Die Möglichkeit, dies zu tun, wurde aus modernen Versionen von PHP entfernt, weil es so gefährlich ist. Der einzige Grund, warum dies 70 Mal positiv bewertet wurde, ist, dass die Leute faul sind. MACH DAS NICHT.
Ich weiß, dass es sich um eine (sehr) alte Frage handelt und es sich um eine Befehlszeile handelt. Als ich jedoch bei Google nach "SSL: Kein alternativer Name des Zertifikatssubjekts stimmt mit dem Namen des Zielhosts überein" suchte, war dies der erste Treffer.
Ich habe eine Weile gebraucht, um die Antwort herauszufinden. Ich hoffe, das spart jemandem viel Zeit! Fügen Sie dies in PHP zu Ihren cUrl-Setopts hinzu:
ps: dies sollte eine vorübergehende lösung sein. Da dies ein Zertifikatfehler ist, ist es am besten, das Zertifikat natürlich reparieren zu lassen!
quelle
CURLOPT_SSL_VERIFYHOST
war genug in meinem FallDer gebräuchliche Name im Zertifikat für
api.evercam.io
ist für*.herokuapp.com
und es gibt keine alternativen Betreffnamen im Zertifikat. Dies bedeutet, dass das Zertifikat fürapi.evercam.io
nicht mit dem Hostnamen übereinstimmt und daher die Zertifikatüberprüfung fehlschlägt. Gleiches gilt fürwww.evercam.io
z. B. https://www.evercam.io mit einem Browser und Sie erhalten die Fehlermeldung, dass der Name im Zertifikat nicht mit dem Hostnamen übereinstimmt.Es ist also ein Problem, das von evercam.io behoben werden muss. Wenn Sie sich nicht um Sicherheit, Man-in-the-Middle-Angriffe usw. kümmern, können Sie die Überprüfung des Zertifikats (
curl --insecure
) deaktivieren. Dann sollten Sie sich jedoch fragen, warum Sie überhaupt https anstelle von http verwenden.quelle
es könnte jemandem etwas Zeit sparen.
Wenn Sie GuzzleHttp verwenden und die Fehlermeldung cURL-Fehler 60 angezeigt wird : SSL: Kein alternativer Name des Zertifikatssubjekts stimmt mit dem Namen des Zielhosts überein, und Sie sind mit der unsicheren Lösung (in der Produktion nicht empfohlen) einverstanden. Dann müssen Sie sie
\GuzzleHttp\RequestOptions::VERIFY => false
dem Client hinzufügen Aufbau:Dies setzt in der Methode
CURLOPT_SSL_VERIFYHOST
auf 0 undCURLOPT_SSL_VERIFYPEER
auf falseCurlFactory::applyHandlerOptions()
Aus der GuzzleHttp-Dokumentation
quelle
Wie im Fehlercode angegeben, stimmt kein Name des alternativen Zertifikatssubjekts mit dem Namen des Zielhosts überein. Daher liegt ein Problem mit dem SSL-Zertifikat vor.
Das Zertifikat sollte SAN enthalten, und es wird nur SAN verwendet. Einige Browser ignorieren den veralteten allgemeinen Namen.
In RFC 2818 heißt es eindeutig: "Wenn eine subjectAltName-Erweiterung vom Typ dNSName vorhanden ist, MUSS diese als Identität verwendet werden. Andernfalls MUSS das (spezifischste) Feld Common Name im Feld Subject des Zertifikats verwendet werden. Obwohl die Verwendung Common verwendet wird Der Name ist eine gängige Praxis, er ist veraltet und Zertifizierungsstellen werden aufgefordert, stattdessen den dNSName zu verwenden. "
quelle
Ich hatte das gleiche Problem. In meinem Fall habe ich Digitalocean und Nginx verwendet.
Ich habe zuerst eine Domain example.app und eine Subdomain dev.exemple.app in digitalocean eingerichtet. Zweitens habe ich zwei SSL-Zertifikate von Godaddy gekauft. Und schließlich habe ich zwei Domänen in Nginx so konfiguriert, dass diese beiden SSL-Zertifikate mit dem folgenden Snipet verwendet werden
Meine example.app Domain Konfiguration
Meine dev.example.app
Als ich https://dev.echantillonnage.app startete , bekam ich
Mein Fehler waren die beiden Zeilen unten
Ich musste dies ändern in:
quelle