Как исправить ошибки сертификата при запуске wget по URL-адресу HTTPS в Cygwin?


164

Например, выполнение 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.

Ответы:


131

Глядя на текущие хакерские решения, я чувствую, что в конце концов мне нужно описать правильное решение.

Во-первых, вам нужно установить пакет cygwin ca-certificatesчерез Cygwin setup.exe, чтобы получить сертификаты.

НЕ ИСПОЛЬЗУЙТЕ скручивание или аналогичные методы взлома для загрузки сертификатов (как совет соседнего ответа), потому что это принципиально небезопасно и может поставить под угрозу систему.

Во-вторых, вам нужно указать wget, где находятся ваши сертификаты, поскольку он не принимает их по умолчанию в среде Cygwin. Если вы можете сделать это либо с параметром командной строки --ca-directory=/usr/ssl/certs(лучше всего для сценариев оболочки), либо путем добавления ca_directory = /usr/ssl/certsв ~/.wgetrcфайл.

Вы также можете исправить это, выполнив, ln -sT /usr/ssl /etc/sslкак указано в другом ответе, но это будет работать, только если у вас есть административный доступ к системе. Другие решения, которые я описал, не требуют этого.


5
Спасибо за этот ответ, и особенно за напоминание о файле ~ / .wgetrc. Как пользователь MacPorts, мои сертификаты находятся в / opt / local / etc / openssl, и я надеюсь, что кто-то найдет это полезным.
Брайс Андерсон

3
И для fink, они находятся в /sw/etc/ssl/certs/ca-bundle.crt, который входит в ca-bundleпакет - как описано здесь .
Jhfrontz

Не уверен, что это опечатка, но ln -s /etc/ssl /usr/sslработал на меня.
zkent

240

Если вам не нужно проверять действительность сертификата, просто добавьте --no-check-certificateпараметр в командной строке wget. Это хорошо сработало для меня.

ПРИМЕЧАНИЕ. Это открывает доступ к атакам типа «человек посередине» и не рекомендуется ни для чего, где вы заботитесь о безопасности.


1
Это сработало для меня. Другие решения, касающиеся установки и обновления сертификатов, не помогли. В моем конкретном случае нет проблем с безопасностью.
marlar

103

Если проблема в том, что известный корневой CA отсутствует, и когда вы используете Ubuntu или Debian, вы можете решить проблему с помощью одной строки:

sudo apt-get install ca-certificates

1
apt-get находится на cygwin? apt-get находится на redgat? ;)
Денис Чену

5
CA-сертификаты уже были установлены на моем компьютере. Бег update-ca-certificatesрешил проблему.
Томас Фокс

Это также работало на моем Synology DS215j с Debian chroot.
microspino

@fox update-ca-certificates- это команда Ubuntu, недоступная в Debian.
Деви

@Devy Это действительно сработало на моем малиновом пи, работающем под Debian Wheezy
Луис Лобо

13

Во-первых, необходимо установить сертификаты SSL. Инструкции (на основе https://stackoverflow.com/a/4454754/278488 ):

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

6
Разве это небезопасно для установки корневых центров сертификации со случайного веб-сайта, особенно с именем haxx?
Хлоя

6
@Chloe curl.haxx.se это сайт разработчиков cURL. Довольно надежные люди.
Иллюминат

как починить без скручивания?
Марк Лаката

1
OMFG символьная ссылка была то, что я пропустил ... искал 30 минут для исправления 1 лайнера> <
Populus

4
Это взломано на нескольких уровнях. Во-первых, вам не нужно загружать сертификаты вручную, потому что для этого есть пакет Cygwin, который называется ca-Certificates. Во-вторых, символическая ссылка будет работать, только если у вас есть административный доступ к системе или вы установили cygwin только для своей учетной записи, что не всегда так, поэтому код не является надежным.
Шнацель

10

Может быть, это поможет:

wget --no-check-certificate https://blah-blah.tld/path/filename

1
Еще одно: эта ситуация также возможна, если вы используете Антивирус Касперского или тот же софт (по умолчанию он заменяет собственный проверенный SSL-сертификат сайта на собственный) - так что вы можете отключить проверку трафика SSL в софте Антивирус.
Алексей Соловьев


1

У меня есть похожая проблема, и я исправил ее, временно отключив антивирус (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



-4

Если вы используете Windows, просто перейдите на панель управления, нажмите на автоматические обновления, а затем нажмите на ссылку веб-сайта Центра обновления Windows. Просто следуйте за шагом. По крайней мере, это работает для меня, больше не выдача сертификатов, т. Е. Всякий раз, когда я иду на https://www.dropbox.com, как раньше.


Это не связано с Cygwin
Synthead
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.