Jak naprawić błędy certyfikatów podczas uruchamiania wget na adresie URL HTTPS w Cygwin?

164

Na przykład uruchomienie wget https://www.dropbox.comskutkuje następującymi błędami:

ERROR: The certificate of `www.dropbox.com' is not trusted.
ERROR: The certificate of `www.dropbox.com' hasn't got a known issuer.
Russell Davis
źródło

Odpowiedzi:

131

Patrząc na obecne, hakerskie rozwiązania, czuję, że mimo wszystko muszę opisać właściwe rozwiązanie.

Najpierw musisz zainstalować pakiet cygwin ca-certificatesza pośrednictwem programu setup.exe Cygwin, aby uzyskać certyfikaty.

NIE używaj curl lub podobnych hacków do pobierania certyfikatów (jako sąsiednich porad dotyczących odpowiedzi), ponieważ jest to zasadniczo niepewne i może zagrozić systemowi.

Po drugie, musisz powiedzieć wget, gdzie są twoje certyfikaty, ponieważ nie pobiera ich domyślnie w środowisku Cygwin. Jeśli możesz to zrobić za pomocą parametru wiersza polecenia --ca-directory=/usr/ssl/certs(najlepiej dla skryptów powłoki) lub przez dodanie ca_directory = /usr/ssl/certsdo ~/.wgetrcpliku.

Możesz to również naprawić, uruchamiając ln -sT /usr/ssl /etc/sslzgodnie z inną odpowiedzią, ale zadziała to tylko wtedy, gdy masz dostęp administracyjny do systemu. Inne opisane przeze mnie rozwiązania tego nie wymagają.

Shnatsel
źródło
5
Dzięki za tę odpowiedź, a zwłaszcza za przypomnienie o pliku ~ / .wgetrc. Jako użytkownik MacPorts moje certyfikaty znajdują się w / opt / local / etc / openssl, co, mam nadzieję, komuś się przyda.
Bryce Anderson
3
A dla fink, są w /sw/etc/ssl/certs/ca-bundle.crt, który jest częścią ca-bundlepakietu - jak opisano tutaj .
jhfrontz
Nie jestem pewien, czy to literówka, ale ln -s /etc/ssl /usr/sslzadziałało dla mnie.
zkent
240

Jeśli nie zależy Ci na sprawdzeniu ważności certyfikatu, po prostu dodaj --no-check-certificateopcję w wierszu poleceń wget. To działało dobrze dla mnie.

UWAGA: Otwiera to cię na ataki typu man-in-the-middle (MitM) i nie jest zalecane w przypadku niczego, na czym zależy Ci na bezpieczeństwie.

DH4
źródło
1
To zadziałało dla mnie. Inne rozwiązania dotyczące instalacji i aktualizacji certyfikatów nie rozwiązały tego problemu. W moim przypadku nie ma obaw dotyczących bezpieczeństwa.
marlar
103

Jeśli problem polega na tym, że brakuje znanego głównego urzędu certyfikacji i gdy używasz Ubuntu lub Debian, możesz rozwiązać problem za pomocą tej jednej linii:

sudo apt-get install ca-certificates
cguenther
źródło
1
apt-get jest na Cygwin? apt-get jest na redgacie? ;)
Denis Chenu
5
c-certyfikaty zostały już zainstalowane na moim komputerze. Uruchomienie update-ca-certificatesrozwiązało problem.
Tomás Fox
Działało to również na moim serwerze Synology DS215j z chrootem Debiana.
microspino
@fox update-ca-certificatesto polecenie ubuntu, niedostępne w debianie.
Devy
@Devy To faktycznie działało na moim raspberry pi z Debian wheezy
Luis Lobo Borobia
13

Najpierw należy zainstalować certyfikaty SSL. Instrukcje (na podstawie 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

Powyższe wystarczy, aby naprawić curl, ale wgetwymaga dodatkowego łącza symbolicznego:

ln -sT /usr/ssl /etc/ssl
Russell Davis
źródło
6
Czy instalowanie głównych urzędów certyfikacji z losowej witryny internetowej, zwłaszcza z haxx w nazwie, nie jest niebezpieczne?
Chloe
6
@Chloe curl.haxx.se to strona deweloperów cURL. Całkiem godni zaufania ludzie.
ylluminate
jak to naprawić bez zawijania?
Mark Lakata,
1
omfg przegapiłem link symboliczny ... szukałem 30 minut dla poprawki 1 linera> <
Populus,
4
To jest hacking na kilku poziomach. Po pierwsze, nie musisz ręcznie pobierać certyfikatów, ponieważ istnieje pakiet Cygwin o nazwie „ca-Certificates”. Po drugie, dowiązanie symboliczne będzie działać tylko wtedy, gdy masz dostęp administracyjny do systemu lub zainstalowałeś cygwin tylko dla swojego konta użytkownika, co nie zawsze ma miejsce, więc kod nie jest wiarygodny.
Shnatsel
10

Może to pomoże:

wget --no-check-certificate https://blah-blah.tld/path/filename
Alexey Soloviev
źródło
1
Jeszcze jedno: ta sytuacja jest również możliwa, jeśli używasz Kaspersky AntiVirus lub tego samego oprogramowania (domyślnie zastępuje normalny zweryfikowany certyfikat SSL witryny na ich własny) - więc możesz wyłączyć sprawdzanie ruchu SSL w oprogramowaniu antywirusowym.
Alexey Soloviev
4
apt-get install ca-certificates 

To srobi różnicę;)

Pete
źródło
W apt-getcygwin nie ma , więc to nie działa.
jlh
1

Mam podobny problem i naprawiłem go, tymczasowo wyłączając program antywirusowy (Kaspersky Free 18.0.0.405). To AV ma moduł przechwytywania HTTPS, który automatycznie podpisuje wszystkie certyfikaty znalezione w odpowiedziach HTTPS.

Wget z Cygwin nie wie nic o certyfikacie głównym AV, więc gdy stwierdzi, że certyfikat tej witryny został podpisany certyfikatem nieufnym, drukuje ten błąd.

Aby to naprawić na stałe bez wyłączania AV, należy skopiować główny certyfikat AV z magazynu certyfikatów systemu Windows do /etc/pki/ca-trust/source/anchorspliku .pem (kodowanie base64) i uruchomićupdate-ca-trust

Denis Bakharev
źródło
-2

Po prostu zrób

apt-get install ca-certificate
tekintian
źródło
-4

Jeśli używasz systemu Windows, po prostu przejdź do panelu sterowania, kliknij automatyczne aktualizacje, a następnie kliknij łącze Witryna sieci Web Windows Update. Po prostu postępuj zgodnie z instrukcjami. Przynajmniej to działa dla mnie, nie ma już wydawania certyfikatów, tj. Za każdym razem, gdy wchodzę na https://www.dropbox.com, jak poprzednio.

Saiful
źródło
To nie jest związane z Cygwin
Synthead