tipos simetricos simetrico simetrica introduccion informatica criptografia cifrado asimetricos asimetrico asimetrica algoritmos php ssl curl https curl-multi

php - simetricos - Cómo corregir el enrollamiento:(35) No se puede comunicar de forma segura con un compañero: no hay algoritmos de cifrado comunes



introduccion a la criptografia pdf (5)

El servidor solo admite cifrados ECC (ECDHE- *). La versión de curl se construye con la biblioteca NSS en Redhat / CentOS. Hay un informe de error que Redhat / CentOS anula la configuración de curvatura y deshabilita los cifrados ECC de forma predeterminada . Debido a que el cliente no ofrece cifrados ECC, pero el servidor solo admite cifrados ECC, la conexión fallará.

Usted podría tratar de dar explícitamente el cifrado, es decir,

curl --ciphers ecdhe_rsa_aes_128_gcm_sha_256 ...

Tenga en cuenta que la actualización de OpenSSL no ayudaría porque el enrollamiento no se construye con el backend de OpenSSL. Además, no ayuda deshabilitar la validación de certificados (de todos modos, es una mala idea) o cambiar las CA raíz, ya que el problema no está relacionado en absoluto con la validación de certificados.

Intentar dar explícitamente el cifrado con --ciphers ecdhe_ecdsa_aes_128_sha ya que el cifrado para resolver el problema va en la dirección correcta pero no ayudará en este caso, porque este no es uno de los cifrados admitidos por los servidores. El servidor solo admite varios cifrados ECDHE-RSA- * pero no los cifrados ECDHE-ECDSA- *. Ver SSLLabs para más detalles.

Estoy tratando de acceder y descargar algunos archivos .torrent desde https://torrage.com utilizando php curl . Pero no pasa nada, curl_error($ch) da

$ch = curl_init (''https://torrage.com/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent''); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_USERAGENT, ''Mozilla/5.0''); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_VERBOSE,true); $data = curl_exec($ch); $error = curl_error($ch); curl_close ($ch); echo $error;

esto da.

Cannot communicate securely with peer: no common encryption algorithm(s).

Si lo intento desde shell así

[root@prod1 yum.repos.d]# curl -I https://torrage.com curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).

en modo detallado

[root@prod1 yum.repos.d]# curl -v https://torrage.com * Rebuilt URL to: https://torrage.com/ * Trying 81.17.30.48... * Connected to torrage.com (81.17.30.48) port 443 (#0) * Initializing NSS with certpath: sql:/etc/pki/nssdb * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * NSS error -12286 (SSL_ERROR_NO_CYPHER_OVERLAP) * Cannot communicate securely with peer: no common encryption algorithm(s). * Closing connection 0 curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).

información del sistema centos 7. x86_64

[root@prod1 yum.repos.d]# uname -a Linux prod1.localdomain 3.10.0-229.4.2.el7.x86_64 #1 SMP Wed May 13 10:06:09 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

versión rizo

[root@prod1 yum.repos.d]# curl -V curl 7.29.0 (x86_64-redhat-linux-gnu)

openssl, ya parcheado.

[root@prod1 yum.repos.d]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013 built on: Mon Jun 15 18:39:20 UTC 2015 platform: linux-x86_64 options: bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM OPENSSLDIR: "/etc/pki/tls" engines: dynamic

Verificando openssl parcheado o no.

[root@prod1 yum.repos.d]# rpm -q --changelog openssl | grep CVE-2014-0224 - fix CVE-2014-0224 fix that broke EAP-FAST session resumption support - fix CVE-2014-0224 - SSL/TLS MITM vulnerability

Lo que he intentado:

1) He intentado usar HTTP insted de HTTPS, pero el sitio obliga a usar HTTPS. p.ej

[root@prod1 yum.repos.d]# curl -I http://torrage.com HTTP/1.1 301 Moved Permanently Server: nginx/1.9.0 Date: Mon, 29 Jun 2015 04:13:17 GMT Content-Type: text/html Content-Length: 184 Connection: keep-alive Location: https://torrage.com/

2) actualizando ca-bundle.crt

cp /etc/pki/tls/certs/ca-bundle.crt /root/backup/ curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt

3) Actualizando Curl a la última versión 7.43.0

nano /etc/yum.repos.d/city-fan-for-curl.repo

Con este repo.

[CityFanforCurl] name=City Fan Repo baseurl=http://www.city-fan.org/ftp/contrib/yum-repo/rhel7/x86_64/ enabled=0 gpgcheck=0

y luego haciendo

yum update curl --enablerepo=CityFanforCurl

luego verificando la versión de rizo

[root@prod1 yum.repos.d]# curl -V curl 7.43.0 (x86_64-redhat-linux-gnu) libcurl/7.43.0 NSS/3.18 Basic ECC zlib/1.2.7 libidn/1.28 libssh2/1.6.0 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets Metalink

4) He intentado esto para comprobar si mi rizo está desactualizado o no.

referencia: https://unix.stackexchange.com/questions/162816/disable-sslv3-in-curl

[root@prod1 yum.repos.d]# curl -1IsS --ciphers ecdhe_ecdsa_aes_128_sha https://sslspdy.com HTTP/1.1 200 OK Server: nginx centminmod Content-Type: text/html; charset=utf-8 Connection: close Vary: Accept-Encoding Strict-Transport-Security: max-age=31536000; includeSubdomains Date: Mon, 12 Jan 1970 23:00:11 GMT X-Page-Speed: ngx_pagespeed Cache-Control: max-age=0, no-cache

¿Cómo puedo solucionar el problema? y descargar archivos de Torrage.com usando PHP Curl ?

* No puedo usar file_get_contents porque estoy usando curl_multi para descargas simultáneas.

Actualización 1:

Según lo sugerido por steffen-ullrich

[root@prod1 randoadmin]# curl --ciphers ecdhe_rsa_aes_128_gcm_sha_256 -I https://torrage.com HTTP/1.1 200 OK Server: nginx/1.9.0 Date: Mon, 29 Jun 2015 05:54:17 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Expires: Mon, 26 Jul 1997 05:00:00 GMT Last-Modified: Mon, 29 Jun 2015 05:50:40 GMT Cache-Control: no-store, no-cache, must-revalidate Cache-Control: post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding, Accept-Encoding Strict-Transport-Security: max-age=31536000 X-Frame-Options: DENY X-Content-Type-Options: nosniff

pero eso es con shell ¿cómo puedo implementarlo con PHP-curl ?

Actualización 2:

He modificado el código y definido el cifrado para usarlo mientras uso el curl como este.

$ch = curl_init (''https://torrage.com/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent''); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_USERAGENT, ''Mozilla/5.0''); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, ''ecdhe_rsa_aes_128_gcm_sha_256''); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_VERBOSE,true); $data = curl_exec($ch); $error = curl_error($ch); curl_close ($ch); echo $error; echo $data ;

Está funcionando muy bien. Problema resuelto muchas gracias a steffen-ullrich .


En Centos 7 o superior, actualizar el curl a la última versión, es decir, 7.29. * Solucioné el problema.


Ninguno de los anteriores funcionó para mí. Sospeché que tenía que ver con la versión Curl. Curl_version(); devolví 7.29, mientras estaba en el servidor instalé 7.49.1, que probablemente tenía esos problemas de SSL solucionados.

De repente recordé sobre Cloudflare y CDN deshabilitado por si acaso. Curl comenzó a trabajar. Luego cambié a PHP 7 y Curl comenzó a trabajar incluso con Cloudflare CDN activado. Curl_version(); Comencé a devolver 7.49.1.

No sé cómo funcionó y qué sucedió exactamente, pero después de horas incansables de buscar la solución, esto fue lo que encontré.


Si estás en CentOS 7 y obtienes estos errores mientras usas yum, la actualización de nss nss-util nss-sysinit nss-tools lo solucionará.


También hay posibilidad de comprobar.

en unix (espero que gane también):

> curl -v https://www.youtube.com > test.html

nota : reemplace " https://www.youtube.com " con su dominio con protocolo

Dirigiendo la salida a test.html para que solo veamos la información deseada en la pantalla

resultado:

* Rebuilt URL to: https://www.youtube.com/ * Hostname was NOT found in DNS cache % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 2404:6800:4005:80d::200e... * Trying 216.58.221.238... 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to www.youtube.com (2404:6800:4005:80d::200e) port 443 (#0) * successfully set certificate verify locations: * CAfile: none CApath: /etc/ssl/certs/ * SSLv3, TLS Unknown, Unknown (22): } [data not shown] * SSLv3, TLS handshake, Client hello (1): } [data not shown] * SSLv2, Unknown (22): { [data not shown] * SSLv3, TLS handshake, Server hello (2): { [data not shown] * SSLv2, Unknown (22): { [data not shown] * SSLv3, TLS handshake, CERT (11): { [data not shown] * SSLv2, Unknown (22): { [data not shown] * SSLv3, TLS handshake, Server key exchange (12): { [data not shown] * SSLv2, Unknown (22): { [data not shown] * SSLv3, TLS handshake, Server finished (14): { [data not shown] * SSLv2, Unknown (22): } [data not shown] * SSLv3, TLS handshake, Client key exchange (16): } [data not shown] * SSLv2, Unknown (20): } [data not shown] * SSLv3, TLS change cipher, Client hello (1): } [data not shown] * SSLv2, Unknown (22): } [data not shown] * SSLv3, TLS handshake, Finished (20): } [data not shown] * SSLv2, Unknown (20): { [data not shown] * SSLv3, TLS change cipher, Client hello (1): { [data not shown] * SSLv2, Unknown (22): { [data not shown] * SSLv3, TLS handshake, Finished (20): { [data not shown] * SSL connection using TLSv1.2 / ECDHE-ECDSA-AES128-GCM-SHA256 * Server certificate: * subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=*.google.com * start date: 2017-11-29 09:44:32 GMT * expire date: 2018-02-21 09:37:00 GMT * subjectAltName: www.youtube.com matched * issuer: C=US; O=Google Inc; CN=Google Internet Authority G2 * SSL certificate verify ok. * SSLv2, Unknown (23): } [data not shown] > GET / HTTP/1.1 > User-Agent: curl/7.37.0 > Host: www.youtube.com > Accept: */* > * SSLv2, Unknown (23): { [data not shown] < HTTP/1.1 200 OK < Content-Type: text/html; charset=utf-8 < X-XSS-Protection: 1; mode=block; report=https://www.google.com/appserve/security-bugs/log/youtube < X-Content-Type-Options: nosniff < X-Frame-Options: SAMEORIGIN < Expires: Tue, 27 Apr 1971 19:44:06 EST < Strict-Transport-Security: max-age=31536000 < P3P: CP="This is not a P3P policy! See http://support.google.com/accounts/answer/151657?hl=uk for more info." < Cache-Control: no-cache < Date: Tue, 26 Dec 2017 12:26:21 GMT * Server YouTube Frontend Proxy is not blacklisted < Server: YouTube Frontend Proxy < Set-Cookie: YSC=lkUUrudTNJM; path=/; domain=.youtube.com; httponly < Set-Cookie: PREF=f1=50000000; path=/; domain=.youtube.com; expires=Mon, 27-Aug-2018 00:19:21 GMT < Set-Cookie: VISITOR_INFO1_LIVE=Qo2rlICrfJM; path=/; domain=.youtube.com; expires=Mon, 27-Aug-2018 00:19:21 GMT; httponly < Alt-Svc: hq=":443"; ma=2592000; quic=51303431; quic=51303339; quic=51303338; quic=51303337; quic=51303335,quic=":443"; ma=2592000; v="41,39,38,37,35" < Accept-Ranges: none < Vary: Accept-Encoding < Transfer-Encoding: chunked < { [data not shown] 100 152 0 152 0 0 114 0 --:--:-- 0:00:01 --:--:-- 114* SSLv2, Unknown (23): { [data not shown] * SSLv2, Unknown (23): { [data not shown] * SSLv2, Unknown (23): { [data not shown] * SSLv2, Unknown (23): .......... many-other-same-not-interesting-rows ......... { [data not shown] * SSLv2, Unknown (23): { [data not shown] 100 425k 0 425k 0 0 113k 0 --:--:-- 0:00:03 --:--:-- 113k * Connection #0 to host www.youtube.com left intact

Ver:

* Conexión SSL utilizando TLSv1.2 / ECDHE-ECDSA-AES128-GCM-SHA256

y use:

curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, ''ECDHE-ECDSA-AES128-GCM-SHA256'');