Me acabo de actualizar a OS x 10.10 Yosemite y yo desde la actualización no puedo hacer Curl de CORREOS a una dirección url de SSL más.

La primera vez que utiliza wordpress es wp_remote_request llamada y también trató de utilizar curl en php.
Ambos (como se esperaba), dar el mismo mensaje de error:

Número De Error:56

Cadena de Error:SSLRead() devuelve el error -9806

Nota: cuando me rizo POST HTTP funciona bien.
Creo que es una configuración en PHP.ini o en mi apache (he perdido la original de mi HTTPD.conf archivo después de la actualización…).

¿Alguien puede ayudarme?

  • por qué voto??? Es un verdadero problema que estoy experimentando, y no puede encontrar ninguna buena solución en Google
  • Para aclarar: yo curl POST de mi local MB externo HTTPS APi
  • Usted probablemente tiene la downvote porque a pesar de que esta es una pregunta perfectamente razonable, esto es fuera de tema, para que ASÍ debe ser en Serverfault.
  • En Mattijs de la defensa, de la codificación de una llamada a wp_remote_request() en PHP que depende de la curvatura por debajo. Creo que es válido que él pide de MODO que desde su proximal cuestión que se inició con la codificación. Es sólo después de saber que la respuesta que él podía saber que la pregunta que probablemente hubiera sido mejor en ServerFault
  • gracias amigo. eso es exactamente lo que he querido.
  • Tengo estos errores en mi 2017 MBP así. Misma solución que funcionó para mí también.
  • Me alegro de que usted fue resuelto!

InformationsquelleAutor Mattijs | 2014-10-20

3 Comentarios

  1. 142

    He visto este error sucede cuando php está compilado con una versión de cURL que se utiliza Apple Seguro de Transporte bajo Yosemite y el destino de la solicitud de URL no admite SSLv3 (que probablemente fue inhabilitado debido a la CANICHE vulnerabilidad). ¿Cuál es la salida de este comando?

    $ php -i | grep "SSL Version"

    Sospecho que vas a ver esto:

    SSL Version => SecureTransport

    Puede superar mediante la instalación de una versión de php que utiliza una versión de cURL que utiliza OpenSSL en lugar de SecureTransport. Esto se hace más fácilmente con homebrew. Así que instalar primero si no lo tienes ya. Si homebrew se instala pero no se ejecuta brew update desde la actualización a Yosemite, hacer que la primera. También asegúrese de que ha instalado XCode >= 6.1 y la última versión de XCode herramientas de línea de comandos. brew doctor le dirá si has hecho todo bien.

    Agregar el Homebrew grifos de abajo que usted necesita con el fin de obtener elaborada php instalado. Omita este paso si estos repos ya están aprovechando. Si no está seguro de si estas repos ya están giradas, sólo tiene que ejecutar los siguientes comandos. Peor de los casos, usted obtendrá un inofensivo Warning: Already tapped!

    $ brew tap homebrew/dupes
    $ brew tap homebrew/versions
    $ brew tap homebrew/php

    A continuación, instalar curl con openssl:

    $ brew install --with-openssl curl

    A continuación, instalar php usando el curl instalado y preparado openssl:

    $ brew install --with-homebrew-curl --with-httpd24 php55
    • si el uso de apache, asegúrese de agregar LoadModule php5_module /usr/local/opt/php55/libexec/apache2/libphp5.so a su /etc/apache2/httpd.conf y reiniciar apache.

    • si no el uso de apache 2.4, se puede quitar --with-httpd24 desde el comando de arriba.

    • si utilizar nginx, seguir la advertencia de instrucciones para el inicio de fpm:

      Para el lanzamiento de php-fpm en el arranque:

      mkdir -p ~/Library/LaunchAgents
      cp /usr/local/opt/php55/homebrew.mxcl.php55.plist ~/Library/LaunchAgents/
      launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php55.plist

    Instalar cualquier extensión php que vamos a necesitar, por ejemplo. mcrypt.

    $ brew install php55-mcrypt

    Después de que haya terminado, ejecute de nuevo:

    $ php -i | grep "SSL Version"

    Y usted debería ver:

    SSL Version => OpenSSL/1.0.2h

    Y ahora, volver a probar la aplicación y el SSLRead() return error -9806 debe desaparecer.

    • Hola Asaf, Sí, tengo la Versión SSL => SecureTransport. Tengo Cerveza, sólo me preguntaba si se instala con Cerveza sobrescribirá mi actual php, o agregar otra versión de PHP junto con lo que tengo que desactivar para stock de la versión? También Gracias por tu respuesta detallada. No me hubiera encontrado a mí mismo, a un problema específico
    • este es el openssl info que tengo: 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)
    • Homebrew se instala todo el software a /usr/local y no toque OSX php. Mientras /usr/local/bin aparece antes de /usr/bin en su sistema $PATH variable de entorno, el sistema utilizará brew la versión de php. Si desinstala cerveza php, a continuación, el sistema se vuelve a utilizar el binario de php en /usr/bin.
    • impresionante. Gracias!
    • Hola Asaf, he instalado la CERVEZA versión de PHP, todo salió bien después de la cerveza sugerencias del Médico. El SSL llame ahora trabaja mediante PHP (wordpress wp_remote_request). Sin embargo, cuando me rizo en la terminal a la misma enpoint, veo la -9806 de nuevo:* SSLRead() return error -9806 * Closing connection 0 curl: (56) SSLRead() return error -9806. cuando hago php -yo veo que la versión Brew está ejecutando, ya que la fecha de construcción fue ayer. Puede ser que la línea de comando Curl, es el viejo y no el nuevo que preparé ayer?
    • Otra cosa interesante es que a mi las llamadas a la API de Canvas ( 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 bien en la terminal de Curl, pero a través de PHP que estoy recibiendo SSL certificate problem: unable to get local issuer certificate. Así que mi problema original se fija en php, pero no funciona en la curvatura. Y mi otra llamada Canvas API que se utiliza para trabajar en PHP no más, pero las obras en la terminal 🙂
    • Traté de agregar un archivo PEM para mi php.ini, curl.cainfo = "/usr/local/cacert.pem pero que desencadena otro error error setting certificate verify locations: CAfile: /usr/local/cacert.pem CApath: none. Estoy un poco desconcertado. Necesito tener la Poción de PHP Curl versión de trabajo tanto de la API. Ahora que no trabajo es trabajo, pero el otro que estaba trabajando no es. (lanzando el no se puede obtener el local emisor certiciface mensaje). La sabiduría se agradece.
    • Su línea de comandos curl es el stock de Apple curl (/usr/bin/curl) que utiliza SecureTransport y sufre el SSLRead() error. Esto es diferente a la elaborada curl (/usr/local/Cellar/curl/7.38.0/bin/curl) que utiliza elaborada php. Cuando brew install curl, no funciona el enlace de el paso. En lugar de ello le dice: «Mac OS X, ya ofrece este software y la instalación de otra versión en paralelo puede causar todo tipo de problemas.» Usted todavía puede hacer de la terminal de pruebas con el preparado de rizo con la ruta de acceso completa. por ejemplo: /usr/local/Cellar/curl/7.38.0/bin/curl http://www.example.com/.
    • Como para el Lienzo de la API de certificado problema, por favor enviar una nueva pregunta a resolver que uno. Los comentarios en esta pregunta son demasiado desordenado. Puede vincular a esta pregunta en su nuevo contexto.
    • Gracias! He creado una nueva: stackoverflow.com/questions/26666920/…
    • Tenía que seguir la brew tap instrucciones en (Re)instalación de PHP en Mac OS X antes de que pudiera ejecutar brew install php55, pero aparte de que esta respuesta era sólido.
    • He estado usando Yosemite versión de PHP, se esta stomp en todos los hosts virtuales y las cosas que he configurado en la configuración de Apache?
    • Hosts virtuales no serán afectados, pero usted tendrá que modificar su /etc/apache2/httpd.conf para hacer referencia a homebrew del libphp5.so en lugar de Apple como se describe en la respuesta. Usted tendrá que reiniciar Apache demasiado. Si usted cambia de opinión y se desea restaurar Yosemite php en tu configuración de Apache, simplemente deshacer el cambio en /etc/apache2/httpd.conf, brew rm de php paquetes que haya instalado, y reiniciar Apache de nuevo.
    • Hay una alternativa además de instalar otra versión de PHP?
    • Usted puede volver a compilar la de Apple, la versión de PHP, pero que parece más invasivos. Lo bueno de homebrew es que se instala todo en /usr/local (que OSX no tocar) y tiene que «pasar por encima» de los binarios en /usr. Así que si un día decides que quieres volver a usar los de Apple, la versión de PHP, simplemente quite la instalada por el homebrew y el sistema vuelve a la forma en que estaba antes.
    • Mis colegas nos aconseja no instalar macports y homebrew, y utilizamos macports, es por eso que me pidió una alternativa. Pero de todos modos, tu comentario suena bien, me puede simplemente ignorar 🙂
    • Traté de conseguir este trabajo, pero me sale el siguiente error acerca de la versión incorrecta de curvatura: httpd: error de Sintaxis en la línea 171 /private/etc/apache2/httpd.conf: No se puede cargar /usr/local/opt/php55/libexec/apache2/libphp5.así que en el servidor: dlopen(/usr/local/opt/php55/libexec/apache2/libphp5.así, 10): la Biblioteca no carga: /usr/local/opt/curl/lib/libcurl.4.dylib\n Referencia a de: /usr/local/opt/php55/libexec/apache2/libphp5.así\n Razón: Incompatible la versión de la librería: libphp5.así lo requiere la versión 8.0.0 o más tarde, pero libcurl.4.dylib proporciona la versión 7.0.0
    • Estoy usando OS X nativo de curl en OS X 10.11 El Capitan. curl --version resultados en curl 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 y el uso de un POST a un https servidor desde el Terminal también los resultados en la SSLRead() return error -9806 de error. Este comando debe trabajar en equipos Mac & servidores no me administrar. ¿Hay algo que pueda hacer?
    • Son capaces de cambiar a cocerse cURL? Al instalar cURL a través de homebrew, queda desvinculado de modo que no interfiera con el OSX interna. Pero todavía se puede utilizar en la línea de comandos para especificar la ruta de acceso completa. por ejemplo. /usr/local/Cellar/curl/<version#>/bin/curl --version.
    • Gracias por la sugerencia. Yo no puedo instalar en /usr pero yo podría ser capaz de incluir una versión de curl en mi aplicación del paquete y el uso que pero sería preferible si tan sólo pudiera usar OS X versión.
    • Seguido de esto un par de veces y aún así no funciona. Por favor ayuda
    • Por favor, publique una nueva pregunta de referencia y este en ella. Asegúrese de que está específicas acerca de lo que «no funciona» significa.
    • He seguido estos pasos y todavía dice «Versión SSL => SecureTransport». Cuando traté de la «cerveza de grifo homebrew/incautos» comando me dio esta advertencia «homebrew/incautos era obsoleto. Este toque es ahora vacía como todos sus fórmulas se han migrado.» Por favor ayuda, mi migrar db pro no funciona 🙁
    • Parece que el php toque que ya no existe y se trasladó a hombrebrew-core post aquí, yo no exhaustiva de probarlo, pero parece que las conexiones https ahora trabajo fuera de la caja… ¿alguien puede confirmar esto? Acabo de instalar [email protected]
    • también se me olvidó señalar que el argumento de --with-homebrew-curl ya no existe, pero --with-curl. No sé si el resultado es el mismo, parece que no compilar los binarios como antes
    • Esta solución no funciona? ¿Alguien administrar el conseguir que esto funcione recientemente?

  2. 5

    Este error de SSL (OSStatus código: 9806) significa que la conexión se termina con el servidor debido a un error en el establecimiento de la conexión (por ejemplo, en algunos de comando no válido). Esto parece que ocurre sólo en ocasiones, cuando la conexión SSL a un host remoto que cae en el medio.

    Esto no está bien documentado por el manual de SSL (SSL_get_error), sin embargo este mensaje de error proviene de libcurl construido que es utilizado por el SecureTransport/Darwinssl TLS backend (usted puede encontrar su OSStatus en SecureTransport.h archivo de encabezado):

    errSSLClosedAbort           = -9806,    /* connection closed via error */

    Desde mi experiencia, esto sucede generalmente cuando estás detrás del proxy o conectado a una red limitada que utiliza el mecanismo de autenticación.

    Así que por favor, compruebe que está conectado a la red (a través de WiFi) y sus otros HTTPS funciona correctamente. Si no, verifique si necesita especificar las credenciales de proxy o su ISP es reemplazar la cadena de certificados y requiere de algún tipo de autenticación o se trata básicamente de bloquear el acceso a determinados sitios en su firewall.

  3. 1

    Tuve un problema similar con SSLRead() return error -9806 error, y también tenía SSL Version => SecureTransport.

    Pero en mi caso el problema era que me estaba preparando curl CURLOPT_HTTP_VERSION opción:

    $curl = curl_init();    
    curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);

    Si se quita esa opción, cURL decidirá la versión que se utilizará por defecto. Compruebe curl_setopt documentación para más.

    Que trabajó para mí, y no tenía la necesidad de cambiar nada con cURL ni PHP. Pero esta es una solución de uno de los muchos casos donde error -9806 aparece.

Dejar respuesta

Please enter your comment!
Please enter your name here