Zwijanie się: problem z certyfikatem SSL, sprawdź, czy certyfikat CA jest OK
07 kwietnia 2006 r
Podczas otwierania bezpiecznego adresu URL za pomocą Curl może pojawić się następujący błąd:
Problem z certyfikatem SSL, sprawdź, czy certyfikat CA jest OK
Wyjaśnię, dlaczego błąd i co należy z tym zrobić.
Najłatwiejszym sposobem na pozbycie się błędu jest dodanie do skryptu następujących dwóch wierszy. To rozwiązanie stanowi zagrożenie dla bezpieczeństwa.
//WARNING: this would prevent curl from detecting a 'man in the middle' attack
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
Zobaczmy, co robią te dwa parametry. Cytując instrukcję.
CURLOPT_SSL_VERIFYHOST : 1, aby sprawdzić istnienie wspólnej nazwy w certyfikacie równorzędnym SSL. 2, aby sprawdzić istnienie wspólnej nazwy, a także sprawdzić, czy jest ona zgodna z podaną nazwą hosta.
CURLOPT_SSL_VERIFYPEER : FALSE, aby powstrzymać CURL od weryfikacji certyfikatu peera. Alternatywne certyfikaty do weryfikacji można określić za pomocą opcji CURLOPT_CAINFO lub katalog certyfikatów można określić za pomocą opcji CURLOPT_CAPATH. CURLOPT_SSL_VERIFYHOST może także wymagać wartości PRAWDA lub FAŁSZ, jeśli CURLOPT_SSL_VERIFYPEER jest wyłączony (domyślnie 2). Ustawienie CURLOPT_SSL_VERIFYHOST na 2 (jest to wartość domyślna) zagwarantuje, że przedstawiony Ci certyfikat będzie miał „wspólną nazwę” pasującą do URN, którego używasz do uzyskania dostępu do zdalnego zasobu. Jest to zdrowy czek, ale nie gwarantuje, że twój program nie zostanie oszukany.
Wpisz „mężczyzna w środku”
Zamiast tego twój program może zostać wprowadzony w błąd i rozmawiać z innym serwerem. Można to osiągnąć za pomocą kilku mechanizmów, takich jak zatrucie dns lub arp (to historia na inny dzień). Intruz może również samopodpisać certyfikat z taką samą „wspólną nazwą”, jakiej oczekuje Twój program. Komunikacja nadal będzie szyfrowana, ale będziesz zdradzał swoje tajemnice oszustowi. Ten rodzaj ataku nazywa się „człowiekiem w środku”
Pokonanie „mężczyzny na środku”
Cóż, musimy sprawdzić, czy przedstawiony nam certyfikat jest prawdziwy. Robimy to, porównując go z certyfikatem, któremu możemy * zaufać.
Jeśli zdalny zasób jest chroniony certyfikatem wydanym przez jeden z głównych urzędów certyfikacji, takich jak Verisign, GeoTrust i in., Można bezpiecznie porównać z pakietem certyfikatów CA Mozilli, który można uzyskać ze strony
http://curl.haxx.se/docs/caextract .html
Zapisz plik cacert.pem
gdzieś na serwerze i ustaw następujące opcje w skrypcie.
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");