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

标签 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() 来区分有效证书和无效证书。(这可以是使用,例如,如果您想在发出某种警告后接受无效证书。)”。

我不知道收到的证书是否无效,但显然是的。而且文档只字不提如何使用它来接受无效的证书。那么问题来了:如何使用这个函数来接受所有(甚至是无效的)证书?

最佳答案

试试这个。 (未经测试的代码!)

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");

关于ssl - 如何在 libsoup 中使用 HTTPS 接受所有证书(甚至无效)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27205532/

相关文章:

java - 在 Java 运行时加载 CA 根证书

php - 带有 SSL 的 cURL 返回我验证位置

iOS 内部分发错误 'Error Domain=SSErrorDomain Code=109'

node.js - 将我的 socket.io 从 http 转换为 https 后,我的 javascript 给我一个奇怪的结果

java - 在 IBM Websphere 8 中使用 axis2 (Sales Force) 访问 Web 服务时出现异常

security - 证书对内网 SSL 有用吗?

spring-mvc - Spring RestTemplate 不允许持久的 https 连接

.htaccess - 仅使用 .htaccess 在某些页面上将 http 重写为 https

ssl - HTTPS 证书问题

security - 在单个节点上将 SSL 与 Kafka 结合使用