почему тест закрепления сертификата curl не работает при использовании sha1 digest?

почему тест закрепления сертификата curl не работает при использовании sha1 digest?

У меня проблема с использованием sha1 digest в тесте на прикрепление сертификата. Использование sha256 работает нормально, но если я использую sha1, то это не работает. Почему?

версия curl:
 
➜ источник ./curl -V
curl 7.55.1 (x86_64-apple-darwin16.0.0) libcurl/7.55.1 SecureTransport zlib/1.2.8
Дата выпуска: 2017-08-14
Протоколы: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Возможности: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets

ТЕСТ 1 с использованиемsha256   ➜ источник openssl s_client -connect uol.com.br:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst sha256 -binary | openssl enc -base64 глубина=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA проверить ошибку:num=19:самозаверяющий сертификат в цепочке сертификатов проверить возврат:0 написание ключа RSA d9W9zyq64Gw8JEA/siAixfvoRRwZVpSgbYJV//0CeKM=

➜ src ./curl --head --verbose --pinnedpubkey "sha256//d9W9zyq64Gw8JEA/siAixfvoRRwZVpSgbYJV//0CeKM="https://uol.com.br * Попытка 200.147.67.142... * TCP_NODELAY установлен * Подключен к uol.com.br (200.147.67.142) порт 443 (#0) * хеш открытого ключа: sha256//d9W9zyq64Gw8JEA/siAixfvoRRwZVpSgbYJV//0CeKM= * Подключение TLS 1.2 с использованием TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * Сертификат сервера: www.uol.com.br * Сертификат сервера: RapidSSL SHA256 CA * Сертификат сервера: GeoTrust Global CA > ГОЛОВЫ / HTTP/1.1 > Хост: uol.com.br > User-Agent: curl/7.55.1 > Принять:/ > < HTTP/1.1 302 Найдено HTTP/1.1 302 Найдено < Дата: Пятница, 29 сентября 2017 г. 19:32:18 GMT Дата: Пятница, 29 сентября 2017 г., 19:32:18 GMT < Сервер: Apache Сервер: Apache < Соединение: закрыть Соединение: близко < Тип содержимого: text/html; кодировка=iso-8859-1 Тип содержимого: text/html; кодировка=iso-8859-1   < * Закрытие соединения 0

ТЕСТ 2 с использованиемша1   ➜ источник openssl s_client -connect uol.com.br:443 | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha1 -binary | openssl enc -base64 глубина=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA проверить ошибку:num=19:самозаверяющий сертификат в цепочке сертификатов проверить возврат:0 написание ключа RSA BQr5oEtKUmTzlcelRcWvGvMnQzk=

➜ src ./curl --head --verbose --pinnedpubkey "sha1//BQr5oEtKUmTzlcelRcWvGvMnQzk="https://uol.com.br * Попытка 200.221.2.45... * TCP_NODELAY установлен * Подключен к uol.com.br (200.221.2.45) порт 443 (#0) * SSL: открытый ключ не соответствует закрепленному открытому ключу! * Закрытие соединения 0 curl: (90) SSL: открытый ключ не соответствует закрепленному открытому ключу!

решение1

Потому что curlпроверяет только хеши SHA256, а не хеши SHA1.

Из страницы руководства:

--pinnedpubkey <закрепленный открытый ключ (хэши)>

          (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 ´;´

Связанный контент