Kiedy próbuję użyć Curl w systemie Windows, aby pobrać https
adres URL, pojawia się przerażający „błąd połączenia (60)”.
Dokładny komunikat o błędzie to:
curl: (60) Problem z certyfikatem SSL, sprawdź, czy certyfikat CA jest OK. Szczegóły:
błąd: 14090086: Procedury SSL: SSL3_GET_SERVER_CERTIFICATE: weryfikacja certyfikatu nie powiodła się
Więcej szczegółów tutaj: http://curl.haxx.se/docs/sslcerts.html
Jak to rozwiązać?
Odpowiedzi:
Nie wiem dlaczego, ale nie znalazłem tych informacji w jednym miejscu.
Pobierz wersję Curl obsługującą SSL lub sam skompiluj wersję obsługującą SSL.
Z http://curl.haxx.se/docs/caextract.html Pobierz plik cacert.pem.
Umieść curl.exe i plik .pem w tym samym katalogu.
Zmień nazwę
cacert.pem
pliku nacurl-ca-bundle.crt
Uruchom ponownie curl.exe!
EDYTOWAĆ:
Istnieją inne sposoby rozwiązania problemu. ten szczególny sposób opiera się na cacert wyprodukowanym przez twórcę Curl. Może to nie być to, czego chcesz, a w szczególności może nie działać w przypadkach, gdy masz mniej znany organ certyfikujący (taki jak organ znany tylko twojej korporacji) dla certyfikatu używanego przez witrynę SSL . W takim przypadku będziesz chciał wygenerować własny
curl-ca-bundle.crt
plik. Możesz użyć certreq.exe i openssl.exe, aby wyeksportować taki certyfikat ze sklepu IE / Windows, a następnie odpowiednio przekonwertować na format pem.źródło
curl
oznaczonegoWinSSL
na Windows 7. Zgodnie z linkiem do dokumentacji, tak oznaczone wersje powinny po prostu działać z wykorzystaniem certyfikatów systemu. Jednak pojawiał się błąd, dopóki nie zastosowałem się do twojego rozwiązania.set CURL_CA_BUNDLE=<path to crt>
. Upewnij się, że format pliku jest prawidłowy. Ta metoda zadziała, nawet jeśli masz wielecurl
instalacji, np. Git, włóczęga ...Utworzyłem skrypt PowerShell, który jest w stanie zapisać
ca-cert.crt
plik na podstawie certyfikatów CA zainstalowanych w magazynie certyfikatów Windows (CurrentUser lub LocalMachine). Uruchom skrypt w następujący sposób:Spowoduje to utworzenie
curl-ca-cert.crt
pliku, który powinien być przechowywany w tym samym katalogu co,curl.exe
i powinieneś być w stanie zweryfikować te same witryny, jak możesz w aplikacjach Windows (pamiętaj, że ten plik może być również używanygit
).„Oficjalny” skrypt można znaleźć na GitHub , ale początkowa wersja znajduje się tutaj w celach informacyjnych:
źródło
W rzeczywistości mieliśmy ten sam problem z Typheous / Ruby. Rozwiązaniem było pobranie pliku cacert.pem i zapisanie go w folderze C: \ Windows \ System32 (lub innym systemie Windows). Następnie ustawiamy globalną zmienną środowiskową, taką jak opisana tutaj, gdzie musi być „Nazwa zmiennej”,
CURL_CA_BUNDLE
a „Wartość zmiennej” ścieżka do pliku%SystemRoot%\System32\cacert.pem
.Podczas rozpoczynania nowej sesji CMD możesz teraz po prostu użyć funkcji Typheous / Libcurl do uwierzytelnienia połączeń SSL. Z powodzeniem wypróbowałem to w systemie Windows 8.1.
źródło