Niedawno zaktualizowałem nasz serwer z 8.04 do 10.04 i całe oprogramowanie wraz z nim.
Z tego, co znalazłem online, wydaje się, że nowa wersja CURL nie zawiera pakietu urzędu certyfikacji, w wyniku czego nie weryfikuje, czy certyfikat serwera, z którym się łączysz, jest podpisany przez ważny organ .
Rzeczywisty błąd to:
Błąd CURL: 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ę
Niektóre znalezione przeze mnie pliki sugerują ręczne określenie pliku CA lub całkowite wyłączenie sprawdzania poprzez ustawienie opcji podczas wywoływania CURL, ale wolałbym raczej rozwiązać problem globalnie, niż musiałbym modyfikować wywołania CURL każdej aplikacji.
Czy istnieje sposób na rozwiązanie problemu CURL dla całego serwera, aby cały istniejący kod aplikacji działał bez zmian?
Miałem podobny problem z uruchomieniem curl z Ubuntu 12.04 z wiersza poleceń, aby uzyskać narzędzia wiersza polecenia aws, które były w github. Znalazłem, jeśli uruchomiłem wiersz poleceń jako taki:
to by działało. Ale próba ustawienia zmiennej środowiskowej CURL_CA_BUNDLE, aby uniknąć argumentu „cacert”, nie zadziałałaby. Ostatecznie aktualizacja certyfikatów ca rozwiązała problem:
Na marginesie, w pewnym momencie zaktualizowałem ca-cert z curl.haxx.se, które nie rozwiązały problemu, ale mogły być powiązane. (
sudo wget http://curl.haxx.se/ca/cacert.pem
bieg z/etc/ssl/certs
).źródło
Zazwyczaj oprogramowanie, które nie ma unikalnej implementacji i jest kompilowane z OpenSSL, będzie odwoływać się do ogólnosystemowego pliku ca-bundle.crt, często znajdującego się w nim
/usr/share/ssl/certs
.Lokalizacja może być inna w Ubuntu, ale pakiet OpenSSL powinien zawierać plik ca-bundle.
CURL ma wiele opcji określających sposób weryfikacji certyfikatów.
CURL_CA_BUNDLE
Zmienną środowiskową dla lokalizacji pliku ca-bundle.--capath
pozwala określić katalog, w którym znajdują się certyfikaty CA. (PrzesłaniaCURL_CA_BUNDLE
)--cacert
pozwala określić plik certyfikatu urzędu certyfikacji.Na moim serwerze CentOS mogę uruchomić następujące polecenie, aby zidentyfikować ścieżkę pakietu ca używaną przez CURL:
źródło
libcurl3-openssl-dev
pakietu opartego na szybkim wyszukiwaniu w Internecie.CURL_CA_BUNDLE
jest tylko zmienną środowiskową. W bashuCURL_CA_BUNDLE=/path/to/file
.