如何在libsoup中使用HTTPS接受所有证书(甚至无效)?

时间:2014-11-29 18:31:21

标签: ssl https ssl-certificate vala

我在Vala应用程序中使用libsoup来下载图像。但我的程序总是崩溃与SSL_FAILED代码(它不在程序中,它是我的错误)并且没有下载图像。我在我的应用程序中将ssl_strict切换为false,但它并没有按照我想要的方式工作。

这是我下载图片的功能:

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-strict”设置为FALSE,那么将接受所有证书,你需要调用soup_message_get_https_status()来区分有效证书和无效证书。 (例如,如果您想在发出某种警告后接受无效证书,则可以使用此方法。)"。

我不知道收到的证书是否无效,但显然是的。并且文档没有说出如何使用它来接受无效的证书。那么,问题是:如何使用此函数接受所有(甚至无效)证书?

1 个答案:

答案 0 :(得分: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");