SSL-сертификаты - OS X Mavericks

Я пытаюсь подключиться к приложению на localhost, которое использует SSL. Я использую Mac OS X Mavericks. Ошибка, которую я получаю, следующая:

Error sending cURL get request to https://dev.site.com:5555/version  
Error code: 60 Error msg: SSL certificate problem: Invalid certificate chain

Я попытался добавить сертификаты в цепочку:

/usr/bin/security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" /etc/path/ca_key.pem 

По-прежнему возникает ошибка.

Ответ 1

--cacert и --cert нарушены в OSX Mavericks.

Подробнее об этом можно прочитать здесь: https://groups.google.com/forum/#!topic/munki-dev/oX2xUnoQEi4

Обходной путь здесь: http://curl.haxx.se/mail/archive-2013-10/0036.html, который указывает, что вам нужно импортировать сертификат в качестве сертификата доверенной системы:

Импортируйте сертификат в системный ( "Системный" ) или пользовательский ( "логин" ) брелок с использованием Keychain Access и пометьте его как всегда надежным для базовой политики SSL и X.509.

Ответ 2

В некоторых случаях лучше использовать стандартный завиток (например, если вы разрабатываете код Mac для Linux или * BSD). В этом случае вы можете сделать так:

  • Установите Homebrew

  • Установить завиток при поддержке стандартных сертификатов (не более сертификатов Keychain).

    brew install curl --with-openssl && brew link curl --force

  • Установите корневые сертификаты CA из http://curl.haxx.se/ca/cacert.pem в /usr/local/etc/openssl/certs/cacert.pem

  • Добавьте в свой файл ~/.bash_profile

    export CURL_CA_BUNDLE=/usr/local/etc/openssl/certs/cacert.pem

  • После 4 шагов вы можете использовать завиток с сертификатами из файла, а не из Keychain.

Ответ 3

Есть две вещи, которые вы можете сделать:

(1) Преобразуйте сертификат .pem в .p12:

openssl pkcs12 -export -out my_certificate.p12 -inkey my_certificate.pem -in my_certificate.pem`

и используйте его с curl с помощью PASSWORD, который вы выбираете при преобразовании:

curl --cert my_certificate.p12:PASSWORD.

(2) Перетащите файл .pem в свою цепочку ключей, откройте инфо-папку, установите для нее "всегда доверять" для SSL и X.509 и обратите внимание на COMMON-NAME. (название сертификата)

curl --cert COMMON-NAME

Оба работают для меня на OSX 10.9 с cURL 7.35.0

Ответ 4

Опция --with-openssl больше не работает с https://github.com/Homebrew/homebrew-core/pull/36263

Просто установите curl-openssl вместо curl.

$ brew install curl-openssl

$ /usr/local/opt/curl-openssl/bin/curl --version
curl 7.64.1 (x86_64-apple-darwin18.2.0) libcurl/7.64.1 OpenSSL/1.0.2r zlib/1.2.11 brotli/1.0.7 c-ares/1.15.0 libssh2/1.8.2 nghttp2/1.38.0 librtmp/2.3
Release-Date: 2019-03-27
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz Metalink NTLM NTLM_WB SPNEGO SSL TLS-SRP UnixSockets