Curl: Проблема з сертифікатом SSL, перевірте, чи підтверджено сертифікат CA
07 квітня 2006 року
Під час відкриття захищеної URL-адреси за допомогою Curl ви можете отримати таку помилку:
Проблема з сертифікатом SSL, перевірте, чи підтверджено сертифікат CA
Я поясню, чому помилка і що з цим ви повинні зробити.
Найпростішим способом позбавлення від помилки було б додавання наступних двох рядків до вашого сценарію. Це рішення становить загрозу безпеці.
//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);
Давайте подивимося, що роблять ці два параметри. Цитуючи посібник.
CURLOPT_SSL_VERIFYHOST : 1, щоб перевірити наявність загального імені в сертифікаті однорангових SSL. 2, щоб перевірити наявність загального імені, а також переконатися, що воно відповідає вказаному імені хоста.
CURLOPT_SSL_VERIFYPEER : FALSE, щоб зупинити CURL від перевірки сертифікату однолітків. Альтернативні сертифікати, для підтвердження яких можна встановити, можна вказати за допомогою параметра CURLOPT_CAINFO або каталог сертифікатів можна вказати за допомогою параметра CURLOPT_CAPATH. CURLOPT_SSL_VERIFYHOST також може бути TRUE або FALSE, якщо CURLOPT_SSL_VERIFYPEER вимкнено (за замовчуванням до 2). Якщо встановити значення CURLOPT_SSL_VERIFYHOST на 2 (це значення за замовчуванням), гарантується, що представлений вам сертифікат має "загальне ім'я", що відповідає URN, який ви використовуєте для доступу до віддаленого ресурсу. Це корисна перевірка, але це не гарантує, що ваша програма не буде сприйнята.
Введіть "людина посередині"
Ваша програма може бути введена в оману в розмові з іншим сервером. Цього можна досягти за допомогою декількох механізмів, як отруєння dns або arp (це історія для іншого дня). Зловмисник також може самостійно підписати сертифікат з тим самим «ім'ям комуна», який очікує ваша програма. Комунікація все ще буде зашифрована, але ви передасте свої таємниці самозванець. Такий напад називається "людина посередині"
Перемога над "людиною посередині"
Ну, нам потрібно перевірити, чи представлений нам сертифікат є справжнім. Ми робимо це, порівнюючи його з сертифікатом, якому ми довіряємо *.
Якщо віддалений ресурс захищений сертифікатом, виданим одним із основних CA, таких як Verisign, GeoTrust та ін., Ви можете сміливо порівнювати з пакетом сертифікатів Mozilla CA, який ви можете отримати з
http://curl.haxx.se/docs/caextract .html
Збережіть файл cacert.pem
десь на вашому сервері та встановіть у вашому сценарії наступні параметри.
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");