ошибка libcurl gnutls_handshake(): получено предупреждение TLS

#c #ssl #libcurl

#c #ssl #libcurl

Вопрос:

По сути, я пытаюсь сделать следующее:

http://curl.haxx.se/libcurl/c/https.html

На моем сервере apache настроен mod_ssl и сертификат сервера. Я добавил строку:

 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
  

и также пытался:

 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
  

но я продолжаю получать ошибку: ошибка gnutls_handshake (): получено предупреждение TLS.

Кто-нибудь знает, кто может это исправить или обойти?

Комментарии:

1. Выдает ли браузер предупреждение, когда вы указываете его на этот адрес?

2. Да, обычное предупреждение, которое вы получаете.

Ответ №1:

Понимая, что вопрос довольно старый и один ответ уже был принят, вот альтернативный ответ, который отлично сработал для меня и может быть полезен для людей, пришедших сюда из поиска:

  • Заменить libcurl-gnutls на libcurl-openssl альтернативный вариант.

Я заметил, что ошибка сертификата была сгенерирована только с программами, использующими libcurl, а не с браузерами, поэтому я предположил, что здесь что-то связано с GNUTLS, а не с сертификатами.

Вот что сработало у меня (Ubuntu 12.04 LTS):

 $ sudo apt-get remove libcurl4-gnutls-dev
$ sudo apt-get install libcurl4-openssl-dev 
  

Все программы, которые полагались на libcurl, начали нормально работать сразу после того, как я заменил библиотеки (я также перекомпилировал программы на всякий случай).

Примечание: это решение поможет вам, только если вы получаете предупреждение с GNUTLS, но не, скажем, с браузерами. То есть я предполагаю, что цепочка сертификатов действительно настроена правильно.

Ответ №2:

Я попытался использовать вышеупомянутое решение, но у меня это не сработало. В python я попробовал следующую опцию, которая эффективно запускает SSLv3 и отключает TLS.

 c.setopt(pycurl.SSLVERSION, pycurl.SSLVERSION_SSLv3)
  

в PHP это должно быть возможно выполнить, установив для CURLOPT_SSLVERSION параметра значение 3.

Ответ №3:

Это «обычное» предупреждение, которое вы получаете, означает, что нет известной организации (центра сертификации), готовой поручиться за его подлинность. Именно это означает «обычное» предупреждение, и именно об этом сообщает вам предупреждение TLS.

Попробуйте установить CURLOPT_SSL_VERIFYHOST значение 0 или установить соответствующий сертификат.

Комментарии:

1. Установка curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); Давайте я пока обойду проверку.