LINUX.ORG.RU

curl игнорирует --cacert и --capath

 , ,


0

1

Есть старый

$ curl --version
curl 7.30.0 ...

который игнорирует опции --cacert и --capath (man-страница от него):

$ man curl
...
    --cacert <CA certificate>
              (SSL) Tells curl to use the specified certificate file to verify the peer.
...
    --capath <CA certificate directory>
              (SSL) Tells  curl to use the specified certificate directory to verify the peer.
...

Это видно из того, что указание любых значений этих опций (включая несуществующие файлы) не меняет поведение программы: всегда только ошибка 60 (Invalid certificate chain) и никогда 77 (Error setting certificate file).

Почему так и лечится ли оно в рамках текущего экземпляра curl? Также прошу объяснить, какие сертификаты используются по умолчанию?

$ curl-config --ca

$
★★

Последнее исправление: Evenik (всего исправлений: 4)
Ответ на: комментарий от dataman

А что в «…», с чем собрано?

$ curl --version
curl 7.30.0 libcurl/7.30.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp 
Features: AsynchDNS GSS-Negotiate IPv6 Largefile NTLM NTLM_WB SSL libz

У меня: /etc/ssl/certs/ca-certificates.crt

Тоже ожидал чего-то похожего, но нет.

Evenik ★★
() автор топика
Последнее исправление: Evenik (всего исправлений: 1)
Ответ на: комментарий от dataman

Почему бы не попробовать:

Попробовать можно, интересно разобраться с этим.

Вот ещё: в списке библиотек не вижу OpenSSL, а в Features есть SSL — не понимаю.

Evenik ★★
() автор топика
Последнее исправление: Evenik (всего исправлений: 2)

curl-7.30 образца 2012 года? Не, такой рухляди уже нет.

~$ curl --version
curl 7.48.0 (i686-pc-linux-gnu) libcurl/7.48.0 OpenSSL/1.0.2u zlib/1.2.8 libidn/1.30 libssh2/1.10.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: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 
~$ curl-config --ca
/usr/share/curl/ca-bundle.crt
~$ ls -l  /usr/share/curl/ca-bundle.crt
-rw-r--r-- 1 root root 252451 Jan 20  2016 /usr/share/curl/ca-bundle.crt

А что мешает запустить его через strace и посмотреть где он ищет сертификаты?

Проблема в том, что curl может быть собран не только с openssl. 7.31 можно собрать с

--with-{ssl,gnutls,nss,polarssl,cyassl,axtls,winssl,darwinssl} 
PS
 ~$ curl -V
curl 8.11.1 (x86_64-pc-linux-gnu) libcurl/8.11.1 OpenSSL/1.1.1zb zlib/1.2.13 brotli/1.0.9 zstd/1.5.5 c-ares/1.19.1 libidn2/2.3.2 libpsl/0.21.1 libssh2/1.11.1 nghttp2/1.61.0 OpenLDAP/2.4.59
Release-Date: 2024-12-11
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM PSL SPNEGO SSL threadsafe TLS-SRP UnixSockets zstd
 ~$ curl-config --ca

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

Не, такой рухляди уже нет.

--with-{ssl,gnutls,nss,polarssl,cyassl,axtls,winssl,darwinssl}

По отсутствию в моём curl --version чего-либо из этого списка, начинаю думать, что оно не устарело, а никогда и не умело в SSL, кроме как с опцией --insecure.

Evenik ★★
() автор топика
Последнее исправление: Evenik (всего исправлений: 1)
Ответ на: комментарий от vel

Погугли про SecureTransport

Понял. Оно собрано с ним вместо OpenSSL (хотя OpenSSL в системе и присутствует). В мане есть намёк на библиотекозависимость этих опций:

If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module (libnsspem.so) needs to be  available  for  this option to work properly.

Спасибо!

P.S. Вот сообщение автора curl про эту библиотеку: https://daniel.haxx.se/blog/2025/01/14/secure-transport-support-in-curl-is-on...

Evenik ★★
() автор топика
Последнее исправление: Evenik (всего исправлений: 2)