osx 10.10 Curl POST HTTPS-url gibt SSLRead() Fehler
Ich habe gerade vor kurzem ein Upgrade auf OSX 10.10 Yosemite und ich seit dem upgrade kann ich nicht tun, Curl POST zu einer SSL-url nicht mehr.
Ich zum ersten mal wordpress wp_remote_request
rufen und auch versucht, curl in php.
Beide (wie zu erwarten) geben die gleiche Fehlermeldung:
Fehlernummer:56
Fehler-String:SSLRead() gibt einen Fehler zurück -9806
Hinweis: wenn ich curl POST HTTP funktioniert es einwandfrei.
Ich denke, es ist eine Einstellung in PHP.ini oder in meinem apache (ich verlor meine original-HTTPD.conf-Datei nach der Aktualisierung...).
Kann jemand mir helfen?
- warum nach unten Stimmen??? Es ist ein echtes Problem, ich bin erfahren und finde keine gute Lösung bei Google
- Um es klarzustellen: ich curl POST von meinem lokalen MB auf eine externe HTTPS-APi
- Sie hat wahrscheinlich auf die downvote weil das ist zwar eine durchaus vernünftige Frage, es ist off-topic für SO - es sollte wirklich auf Serverfault.
- In Mattijs Verteidigung, er ist die Kodierung eines Aufrufs
wp_remote_request()
in PHP die stützt sich auf cURL unter. Ich denke, dass es gültig ist, dass er fragt an, ALSO seit seinem proximalen Problem begann mit der Codierung. Es ist nur nach dem wissen, die Antwort, die er wissen konnte, dass die Frage wäre wahrscheinlich besser gewesen auf ServerFault - Dank buddy. das ist genau so wie ich es vorgesehen.
- Ich habe diesen Fehler auf meinem 2017 MBP als gut. Gleiche Lösung funktioniert auch für mich.
- Froh, Sie haben es gelöst!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gesehen, das Fehler passieren, wenn php kompiliert wird mit einer version von cURL verwendet Apples Secure Transport unter Yosemite und das Ziel der URL-Anforderung nicht unterstützt SSLv3 (das war wohl deaktiviert aufgrund der PUDEL-Verwundbarkeit). Was ist die Ausgabe dieses Befehls?
Ich vermute, du wirst sehen:
Können Sie überwinden diese durch die Installation eines php-version, die mit einer version von cURL, die verwendet OpenSSL statt SecureTransport. Dies wird am einfachsten mit homebrew. So installieren Sie zuerst wenn Sie nicht bereits haben. Wenn homebrew installiert ist, Sie jedoch noch nicht ausgeführt haben
brew update
seit dem Upgrade auf Yosemite, zuerst tun. Auch stellen Sie sicher, dass Sie installiert haben XCode >= 6.1 und die neueste XCode-Befehlszeilen-tools.brew doctor
wird Ihnen sagen, wenn Sie das getan haben, alles in Ordnung.Hinzufügen von Homebrew-Armaturen unten, dass Sie brauchen, um zu bekommen, gebraut php installiert. Überspringen Sie diesen Schritt, wenn diese repos sind bereits angezapft. Wenn Sie unsicher sind, wenn diese repos sind bereits erschlossen ist, führen Sie einfach die unten angegebenen Befehle. Worst-case-Szenario, bekommen Sie einen harmlosen
Warning: Already tapped!
Dann install curl mit openssl:
Dann installieren Sie php mit curl, die Sie gerade installiert und gebraut openssl:
wenn Sie apache verwenden, stellen Sie sicher, dass Sie
LoadModule php5_module /usr/local/opt/php55/libexec/apache2/libphp5.so
zu Ihrem/etc/apache2/httpd.conf
und starten Sie apache neu.wenn nicht mit apache 2.4, können Sie entfernen
--with-httpd24
aus den oben genannten Befehl.wenn mit nginx, Folgen Sie den VORBEHALT Hinweise zum starten fpm:
Installieren, die php-Erweiterungen, die Sie gehen zu müssen, um zB.
mcrypt
.Nachdem Sie fertig sind, führen Sie diese wieder ein:
Und Sie sollten sehen:
Und jetzt, re-testen Sie Ihre Anwendung und die
SSLRead() return error -9806
Weggehen sollte.New, TLSv1/SSLv3, Cipher is RC4-MD5 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : RC4-MD5 Session-ID: 0B220000E93AF2E279F784D25D6FC08675E63F983424A4296BEBE59AF89F3E7C Session-ID-ctx: Master-Key: 4B0BFE2ECC5624D0E3A2AD44FF6DC30F25E0C4889C6CA5EF0D0E90C1469D70C9D6B5321A4B2C1A084355A79A013C4420 Key-Arg : None Start Time: 1414123290 Timeout : 300 (sec) Verify return code: 0 (ok)
/usr/local
und nicht berühren OSX ist php. Solange/usr/local/bin
erscheint vor/usr/bin
in Ihrem system$PATH
- Umgebungsvariable, die das system verwenden brew-version von php. Wenn Sie deinstallieren brauen php, dann wird Ihr system geht zurück auf die Verwendung der php binary in/usr/bin
.* SSLRead() return error -9806 * Closing connection 0 curl: (56) SSLRead() return error -9806
. wenn ich php-i sehe ich, dass die Brew-version ausgeführt wird, weil das build-Datum war gestern. Kann es sein, dass der Befehlszeile Curl ist die alte und nicht die neue, die ich gestern gebraut?curl -v -H "Accept: application/json" -H "Content-type: application/json" -X GET -d '{"userid": "mohit", "password":"password"}' https://matrix.instructure.com/api/v1/accounts
funktionieren im terminal Curl, aber in PHP bin ich immerSSL certificate problem: unable to get local issuer certificate
. Also mein ursprüngliches problem wurde in php, aber nicht in Schwung. Und meine anderen call-Canvas-API, die früher in PHP nicht mehr, funktioniert aber im terminal 🙂curl.cainfo = "/usr/local/cacert.pem
aber, dass ein weiterer Fehler ausgelösterror setting certificate verify locations: CAfile: /usr/local/cacert.pem CApath: none
. Ich bin ein bisschen verwirrt. Ich muss die Brauen PHP-Curl-version funktioniert für beide APIs. Nun, derjenige, der nicht arbeitet, ist die Arbeit, der andere aber die Arbeit war nicht. (werfen die keine lokalen Emittenten certiciface Nachricht). Keine Weisheit, würde geschätzt werden.curl
ist die Aktie von Apple curl (/usr/bin/curl
), die SecureTransport nutzt und leidet SSLRead () - Fehler. Dies ist anders als die gebrühten curl (/usr/local/Cellar/curl/7.38.0/bin/curl
) verwendet gebraut php. Wenn Siebrew install curl
es nicht der link-Schritt. Stattdessen sagt Sie: "Mac OS X bietet bereits diese software und der Installation einer anderen version kann parallel dazu führen, dass alle Arten von Schwierigkeiten." Sie können immer noch terminal-tests mit gebraut curl mit dem vollständigen Pfad. z.B.:/usr/local/Cellar/curl/7.38.0/bin/curl http://www.example.com/
.brew tap
Anweisungen unter (Neu -) Installation von PHP unter Mac OS X, bevor ich laufen konntebrew install php55
, aber andere als, dass diese Antwort war solide./etc/apache2/httpd.conf
Referenz homebrew istlibphp5.so
statt, die von Apple wie beschrieben in der Antwort. Müssen Sie den Apache neu starten auch. Wenn Sie Ihre Meinung ändern und wiederherstellen möchten Yosemite ist php in der Apache-config, einfach die änderung rückgängig machen, in/etc/apache2/httpd.conf
,brew rm
alle php-Pakete, die Sie installiert haben und den Apache neu starten wieder./usr/local
(was OSX nicht berührt), und es hat "überschreiben" binaries in/usr
. Also, wenn Sie eines Tages entscheiden, dass Sie möchten, gehen Sie zurück zu, mit der Apple-version von PHP, die Sie einfach entfernen die man installiert homebrew und das system geht zurück auf die Art, wie es vorher war.curl
auf OS X 10.11 El Capitan.curl --version
Ergebnisse incurl 7.41.0 (x86_64-apple-darwin14.0.0) libcurl/7.41.0 OpenSSL/1.0.2 zlib/1.2.8 libidn/1.29 Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets
und mit einemPOST
zu einemhttps
server vom Terminal führt auch in derSSLRead() return error -9806
Fehler. Dieser Befehl muss arbeite auf Macs & Server, die ich nicht verwalten. Ist dort irgendetwas was kann sein getan?/usr/local/Cellar/curl/<version#>/bin/curl --version
./usr
aber ich könnte in der Lage sein, um eine version voncurl
in meinem app-bundle und verwenden, aber es wäre bevorzugt, wenn könnte ich nur mit OS X version.--with-homebrew-curl
ist nicht mehr vorhanden, aber--with-curl
. Weiß nicht, ob das Ergebnis ist das gleiche, es scheint, wie es nicht kompilieren von binaries wie vorDieser SSL Fehler (OSStatus-code: 9806) bedeutet, dass Ihre Verbindung ist, beendet der server aufgrund eines Fehlers im Aufbau der Verbindung (z.B. auf einigen ungültigen Befehl). Dies scheint passiert nur gelegentlich, wenn die SSL-Verbindung zum remote-host fällt dazwischen.
Dies ist nicht gut dokumentiert, SSL manual (
SSL_get_error
), aber diese Fehlermeldung kommt vonlibcurl
gebaut, die durch die SecureTransport/Darwinssl TLS-backend finden Sie die OSStatus inSecureTransport.h
header-Datei):Aus meiner Erfahrung, dies geschieht in der Regel, wenn Sie hinter dem proxy oder eine Verbindung zu einem eingeschränkten Netzwerk, die verwendet Authentifizierung Mechanismus.
Also bitte stellen Sie sicher, dass Sie über das richtige Netzwerk (via WLAN) und Ihre anderen HTTPS richtig funktioniert. Wenn nicht, prüfen Sie, ob Sie brauchen, um geben Sie die proxy-Anmeldeinformationen oder Ihr ISP ist, überschreiben die Zertifikat-Kette und erfordert irgendeine Art von Authentifizierung oder es ist im Grunde die Sperrung des Zugangs zu bestimmten Websites in Ihrer firewall.
Ich hatte ein ähnliches Problem mit
SSLRead() return error -9806
Fehler, und auch ich hatteSSL Version => SecureTransport
.Aber in meinem Fall das problem war, dass ich die Einstellung curl
CURLOPT_HTTP_VERSION
option:Wenn Sie entfernen, die option, LOCKE wird entscheiden, welche version standardmäßig verwendet werden. Überprüfen Sie curl_setopt Dokumentation für mehr.
Arbeitete für mich, und ich brauchte nicht, etwas zu ändern mit cURL noch PHP. Aber dies ist eine Lösung aus einem von vielen Fällen, in denen
error -9806
erscheint.