2014-11-29 2 views
0

Я использую libsoup в своем приложении Vala для загрузки изображений. Но моя программа всегда сбой с кодом SSL_FAILED (это не в программе, это я забрасываю ошибку), и изображение не загружается. Я переключил ssl_strict на false в моем приложении, но он не работает так, как я этого хочу.Как принять все сертификаты (даже недействительные) с помощью HTTPS в libsoup?

Вот моя функция, которая загружает изображения:

var session = new Soup.Session(); 
session.ssl_strict = false; 

var message = new Soup.Message ("GET", url); 
message.tls_errors = GLib.TlsCertificateFlags.VALIDATE_ALL; 

session.send_message (message); 
if (message.status_code != Soup.Status.OK) 
    error("Something wrong with downloading."); // here it crashes 

Я проверил документацию, и он говорит: «Если вы установили„SSL-строгий“ЛОЖЬ, то все сертификаты будут приняты, и вам нужно будет для вызова soup_message_get_https_status(), чтобы отличать действительные от недействительных сертификатов (это можно использовать, например, если вы хотите принять недопустимые сертификаты после предоставления какого-либо предупреждения.) ».

Я не знаю, является ли полученный сертификат недействительным, но, по-видимому, да. И в документации не сказано ни слова, как использовать его для принятия недействительных сертификатов. Итак, вопрос: как использовать эту функцию для приема всех (даже недействительных) сертификатов?

ответ

0

Попробуйте это. (Неиспользованный код!)

var session = new Soup.Session(); 
session.ssl_strict = false; 

// drop this line 
//message.tls_errors = GLib.TlsCertificateFlags.VALIDATE_ALL; 

var message = new Soup.Message ("GET", url); 
session.send_message (message); 

// Now you can check the message.tls_errors property for why the 
// certificate validation failed. E.g.: 
if (message.tls_errors == TlsCertificateFlags.UNKNOWN_CA) 
    print ("Unknown CA\n"); 
Смежные вопросы