curl: (60) SSL-сертификат: невозможно получить сертификат локального эмитента
root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* About to connect() to {abc} port 21 (#0)
* Trying {abc}...
* Connected to {abc} ({abc}) port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-This is the UNLICENSED Home Edition and may be used for home, personal use only
< 220-Welcome to Cerberus FTP Server
< 220 Created by Cerberus, LLC
> AUTH SSL
< 234 Authentication method accepted
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
39 ответов
Это может быть вызвано Homebrew, если вы его используете. В моем случае проблема была вызвана неработающей установкой черезbrew
как зависимость от какого-то другого пакета, который затмевал идеальную функциональность, предоставляемую ОС.
Проверьте, где вашcurl
исходит изwhich curl
. Если это из варева, то можно запуститьbrew unlink curl
чтобы «скрыть» пакет-нарушитель.
в моем случае, когда я настраиваю веб-сервер SSL с помощью NodeJS , проблема заключалась в том, что я не прикрепил сертификат файла Bundle, наконец, я решил проблему, добавив этот файл следующим образом:
Примечание: код с aboutssl.org
var https = require('https');
var fs = require('fs');
var https_options = {
key: fs.readFileSync("/path/to/private.key"),
cert: fs.readFileSync("/path/to/your_domain_name.crt"),
ca: [
fs.readFileSync('path/to/CA_root.crt'),
fs.readFileSync('path/to/ca_bundle_certificate.crt') // this is the bundle file
]
};
https.createServer(options, function (req, res) {
res.writeHead(200);
res.end("Welcome to Node.js HTTPS Servern");
}).listen(8443)
В приведенном выше тексте замените текст, выделенный жирным шрифтом, следующим.
path/to/private.key — это путь к файлу вашего закрытого ключа.
path/to/your_domain_name.crt — введите путь к файлу сертификата SSL.
path/to/CA_root.crt — укажите полный путь к файлу корневого сертификата ЦС.
path/to/ca_bundle_certificate — это полный путь к вашему загруженному файлу пакета CA.
ссылка: https://aboutssl.org/how-to-install-ssl-certificate-on-node-js/
До сих пор я видел эту проблему в корпоративных сетях по двум причинам, одна или обе из которых могут иметь место в вашем случае:
- Из-за того, как работают сетевые прокси, они имеют свои собственные сертификаты SSL, тем самым изменяя сертификаты, которые видит curl. Многие или большинство корпоративных сетей вынуждают вас использовать эти прокси.
- Некоторые антивирусные программы, работающие на клиентских ПК, также работают аналогично прокси-серверу HTTPS, поэтому они могут сканировать ваш сетевой трафик. Ваша антивирусная программа может иметь возможность отключить эту функцию (если ваши администраторы разрешат ее).
Как примечание № 2 выше, вы можете испытывать беспокойство по поводу сканирования вашего предположительно безопасного трафика TLS. Это корпоративный мир для вас.
-k
(SSL) Эта опция явно позволяет curl выполнять "небезопасные" SSL-соединения и передачи. Начиная с curl 7.10, все SSL-соединения будут пытаться сделать безопасными с помощью пакета сертификатов CA, установленного по умолчанию. Это приводит к тому, что все соединения, считающиеся "небезопасными", прерываются, если не используется ключ -k/- insecure.
У меня была эта проблема с Digicert всех центров сертификации. Я создал файл digicertca.pem, который был как промежуточным, так и корневым, вставленным в один файл.
curl https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
curl https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt.pem
curl -v https://mydigisite.com/sign_on --cacert DigiCertCA.pem
...
* subjectAltName: host "mydigisite.com" matched cert's "mydigisite.com"
* issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
* SSL certificate verify ok.
> GET /users/sign_in HTTP/1.1
> Host: mydigisite.com
> User-Agent: curl/7.65.1
> Accept: */*
...
У Эорекана был ответ, но только я и еще один человек проголосовали за его ответ.
Специально для Windows
пользователи, использующие curl-7.57.0-win64-mingw
или похожая версия.
Это немного поздно, и существующие ответы верны. Но мне все еще пришлось немного постараться, чтобы заставить его работать на моей машине с Windows, хотя процесс на самом деле довольно прост. Итак, делимся пошаговым процессом.
Эта ошибка в основном означает, что curl не может проверить сертификат целевого URI. Если вы доверяете издателю сертификата (CA), вы можете добавить его в список доверенных сертификатов.
Для этого просмотрите URI (например, в Chrome) и следуйте инструкциям
- Щелкните правой кнопкой мыши значок безопасного замка
- Нажмите на сертификат, откроется окно с информацией о сертификате
- Перейти на вкладку "Путь сертификации"
- Нажмите ROOT сертификат
- Нажмите View Certificate, откроется другое окно сертификата.
- Перейти на вкладку Подробности
- Нажмите кнопку "Копировать в файл", откроется мастер экспорта
- Нажмите кнопку "Далее
- Выберите "X.509 (.CER) в кодировке Base-64"
- Нажмите кнопку "Далее
- Дайте понятное имя, например, "MyDomainX.cer" (перейдите к нужному каталогу)
- Нажмите кнопку "Далее
- Нажмите Finish, он сохранит файл сертификата
- Теперь откройте это
.cer
файл и скопировать содержимое (включая ----- НАЧАТЬ СЕРТИФИКАТ ----- и ----- КОНЕЦ СЕРТИФИКАТ -----) - Теперь перейдите в каталог, где
curl.exe
сохраняется, напримерC:\SomeFolder\curl-7.57.0-win64-mingw\bin
- Открой
curl-ca-bundle.crt
файл с текстовым редактором - Добавьте скопированный текст сертификата в конец файла. Сохранить
Теперь ваша команда должна хорошо выполняться в curl.
Была эта проблема, и она не была решена с более новой версией. У / etc / certs был корневой сертификат, браузер сказал, что все в порядке. После некоторого тестирования я получил от ssllabs.com предупреждение о том, что моя цепочка не завершена (действительно, это была цепочка для старого сертификата, а не для нового). После исправления цепочки сертификатов все было хорошо, даже с локонами.
Для моего Mac M1 я просто использовал эту команду, и она сработала:
/bin/bash -c "$(curl -fsSLk https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
То, что я сделал здесь, добавилk
в-fsSLk
Простое решение: IN ~/.sdkman/etc/config
, менять sdkman_insecure_ssl=true
шаги:
нано ~/.sdkman/etc/config
менять sdkman_insecure_ssl=false
в sdkman_insecure_ssl=true
Сохранить и выйти