¿Por qué la prueba de fijación de certificados curl no funciona con el resumen sha1?

¿Por qué la prueba de fijación de certificados curl no funciona con el resumen sha1?

Tengo un problema al utilizar el resumen sha1 en la prueba de fijación de certificados. Usar sha256 funciona bien, pero si uso sha1 no funciona. ¿Por qué?

versión de rizo:
 
➜ origen ./curl -V
curl 7.55.1 (x86_64-apple-darwin16.0.0) libcurl/7.55.1 SecureTransport zlib/1.2.8
Fecha de lanzamiento: 2017-08-14
Protocolos: archivo dict ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Características: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets

PRUEBA 1 usandosha256   ➜ src openssl s_client -connect uol.com.br:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst sha256 -binario | openssl enc -base64 profundidad=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA verificar error:num=19:certificado autofirmado en cadena de certificados verificar devolución:0 escribiendo clave RSA d9W9zyq64Gw8JEA/siAixfvoRRwZVpSgbYJV//0CeKM=

➜ src ./curl --head --verbose --pinnedpubkey "sha256//d9W9zyq64Gw8JEA/siAixfvoRRwZVpSgbYJV//0CeKM="https://uol.com.br * Probando 200.147.67.142... * TCP_NODELAY establecido * Conectado a uol.com.br (200.147.67.142) puerto 443 (#0) * hash de clave pública: sha256//d9W9zyq64Gw8JEA/siAixfvoRRwZVpSgbYJV//0CeKM= * Conexión TLS 1.2 usando TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * Certificado de servidor: www.uol.com.br * Certificado de servidor: RapidSSL SHA256 CA * Certificado de servidor: GeoTrust Global CA > CABEZA/HTTP/1.1 > Anfitrión: uol.com.br > Usuario-Agente: curl/7.55.1 > Aceptar:/ > <HTTP/1.1 302 encontrado HTTP/1.1 302 encontrado < Fecha: viernes, 29 de septiembre de 2017 19:32:18 GMT Fecha: viernes, 29 de septiembre de 2017 19:32:18 GMT < Servidor: Apache Servidor: Apache < Conexión: cerrar Conexión: cerrar < Tipo de contenido: texto/html; juego de caracteres=iso-8859-1 Tipo de contenido: texto/html; juego de caracteres=iso-8859-1   < * Cerrando conexión 0

PRUEBA 2 usandosha1   ➜ src openssl s_client -connect uol.com.br:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha1 -binario | openssl enc -base64 profundidad=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA verificar error:num=19:certificado autofirmado en cadena de certificados verificar devolución:0 escribiendo clave RSA BQr5oEtKUmTzlcelRcWvGvMnQzk=

➜ src ./curl --head --verbose --pinnedpubkey "sha1//BQr5oEtKUmTzlcelRcWvGvMnQzk="https://uol.com.br * Probando 200.221.2.45... * TCP_NODELAY establecido * Conectado a uol.com.br (200.221.2.45) puerto 443 (#0) * SSL: ¡la clave pública no coincide con la clave pública fijada! * Cerrando conexión 0 curl: (90) SSL: ¡la clave pública no coincide con la clave pública fijada!

Respuesta1

Porque curlsolo verifica los hashes SHA256; no hashes SHA1.

Desde la página de manual:

--pinnedpubkey <clave pública fijada (hashes)>

          (SSL) Tells curl to  use  the  specified  public  key  file  (or
          hashes)  to  verify the peer. This can be a path to a file which
          contains a single public key in PEM or DER format, or any number
          of base64 encoded sha256 hashes preceded by ´sha256//´ and sepa‐
          rated by ´;´

información relacionada