Как исправить ошибки сертификата при запуске wget по URL-адресу HTTPS в Cygwin?
Например, бег wget https://www.dropbox.com
приводит к следующим ошибкам:
ERROR: The certificate of `www.dropbox.com' is not trusted.
ERROR: The certificate of `www.dropbox.com' hasn't got a known issuer.
14 ответов
Глядя на текущие хакерские решения, я чувствую, что в конце концов мне нужно описать правильное решение.
Во-первых, вам нужно установить пакет cygwin ca-certificates
через Cygwin's setup.exe, чтобы получить сертификаты.
НЕ ИСПОЛЬЗУЙТЕ скручивание или аналогичные методы взлома для загрузки сертификатов (как совет соседнего ответа), потому что это принципиально небезопасно и может поставить под угрозу систему.
Во-вторых, вам нужно указать wget, где находятся ваши сертификаты, поскольку он не принимает их по умолчанию в среде Cygwin. Если вы можете сделать это либо с параметром командной строки --ca-directory=/usr/ssl/certs
(лучше всего для сценариев оболочки) или путем добавления ca_directory = /usr/ssl/certs
в ~/.wgetrc
файл.
Вы также можете это исправить, запустив ln -sT /usr/ssl /etc/ssl
как указано в другом ответе, но это будет работать, только если у вас есть административный доступ к системе. Другие решения, которые я описал, не требуют этого.
Если вам не нужна проверка действительности сертификата, просто добавьте --no-check-certificate
опция в командной строке wget. Это хорошо сработало для меня.
ПРИМЕЧАНИЕ. Это открывает доступ к атакам "человек посередине" (MitM) и не рекомендуется ни для чего, где вы заботитесь о безопасности.
Если проблема в том, что известный корневой CA отсутствует, и когда вы используете Ubuntu или Debian, вы можете решить проблему с помощью одной строки:
sudo apt-get install ca-certificates
Может быть, это поможет:
wget --no-check-certificate https://blah-blah.tld/path/filename
Во-первых, необходимо установить сертификаты SSL. Инструкции (на основе /questions/46370743/sertifikat-ssl-otklonen-pri-popyitke-dostupa-k-github-cherez-https-cherez-brandmauer/46371053#46371053):
pushd /usr/ssl/certs
curl http://curl.haxx.se/ca/cacert.pem | awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
c_rehash
Выше достаточно исправить curl
, но wget
требуется дополнительная символическая ссылка:
ln -sT /usr/ssl /etc/ssl
У меня похожая проблема, и я исправил ее, временно отключив антивирус (Kaspersky Free 18.0.0.405). Этот AV имеет модуль перехвата HTTPS, который автоматически подписывает все сертификаты, найденные в ответах HTTPS.
Wget от Cygwin ничего не знает о корневом сертификате AV, поэтому, когда он обнаруживает, что сертификат веб-сайта был подписан с использованием недоверенного сертификата, он печатает эту ошибку.
Чтобы исправить это навсегда, не отключая AV, необходимо скопировать корневой сертификат AV из хранилища сертификатов Windows в /etc/pki/ca-trust/source/anchors
как.pem файл (кодировка base64) и запустить update-ca-trust
В моем случае на raspberry pi 3B время было в будущем (2025), которое мне нужно обновить до текущего местного времени, используя
ntpdate
передав время в прошлое, и это решило проблему.
$ sudo date +%Y%m%d -s "20210101"
$ sudo ntpdate times1.mike.fi
Благодаря Денису Бахареву я раскрыл это дело.
Если у кого-то Cygwin wget не работает из-за того, что «сертификат не доверен» и у него установлены CA-сертификаты И антивирус, который автоматически подписывает все сертификаты, которые он находит в ответах HTTPS, вам нужно:
- Получите корневой сертификат от вашего AV (я получил свой с помощью браузера: откройте любой веб-сайт https, проверьте его сертификат, перейдите на
Certification Path
вкладку, щелкните Корневой сертификат. Затем нажмитеView certificate
кнопка, перейти кDetails
вкладку и нажмитеCopy to File...
кнопка. Настройки по умолчанию подходят для сохранения сертификата в файле *.cer). - Преобразование *.cer в *.crt. Вы можете использовать OpenSSL Cygwin с помощью следующей команды:
openssl x509 -inform DER -in <your *.cer certificate file> -out <new cert>.crt
- Переместите новый файл *.crt в каталог ca (в моем случае это был
/etc/pki/tls/certs/
).
Этого было достаточно, чтобы заставить wget работать.
У нас возникла такая же проблема, когда мы установили новый сертификат только на прошлой неделе. Я также видел это еще два раза ... но я медленно учусь. Во всех трех случаях мне приходилось получать «промежуточные сертификаты» и устанавливать их. Другими словами, мой сертификат был хорош, но его подписывающая сторона или подписывающая сторона была установлена неправильно. Убедитесь, что вы зашли на сайт поставщика сертификатов, получили правильные промежуточные сертификаты и также установили их на свой сервер, после чего это предупреждение исчезнет.
Это может быть НЕ ПРОСТО, как указано выше, также может быть, что у клиентов нет обновленных списков ... но я хотел бы убедиться, что это не просто вы не полностью устанавливаете сертификаты правильно ПЕРВЫЙ, а затем после этого переходите к клиентам и убедиться, что их список обновлен.
У меня была аналогичная проблема с wget на моем собственном веб-сайте, возвращающем ошибки после установки нового сертификата SSL. Я уже проверил несколько браузеров, и они не сообщали об ошибках:
wget --no-cache -O - "https://example.com/..." ERROR: The certificate of ‘example.com’ is not trusted. ERROR: The certificate of ‘example.com’ hasn't got a known issuer.
Проблема заключалась в том, что я установил неправильный файл центра сертификации.pem /.crt от эмитента. Обычно они объединяют сертификат SSL и файл CA в виде zip-файла, но DigiCert отправляет вам сертификат по электронной почте, и вы должны самостоятельно определить соответствующий CA. https://www.digicert.com/help/ имеет средство проверки сертификатов SSL, в котором перечислены полномочия SSL и, надеюсь, соответствующий ЦС с красивой синей графикой ссылки, если они согласны:
`SSL Cert: Issuer GeoTrust TLS DV RSA Mixed SHA256 2020 CA-1
CA: Subject GeoTrust TLS DV RSA Mixed SHA256 2020 CA-1 Действителен с 16 июля 2020 г. по 31 мая 2023 г. Эмитент DigiCert Global Root CA`
Не совсем та же проблема. В докере я монтировал свою файловую систему хоста на
/etc
где уже были установлены сертификаты OpenSSL, которые перезаписываются.
Изменение монтирования на другую файловую систему исправило это.
Если вы используете Windows, просто перейдите на панель управления, нажмите на автоматические обновления, а затем нажмите на ссылку веб-сайта Центра обновления Windows. Просто следуйте за шагом. По крайней мере, это работает для меня, больше не выдача сертификатов, т. Е. Всякий раз, когда я иду на https://www.dropbox.com/ как раньше.