【发布时间】:2018-12-21 23:13:20
【问题描述】:
Poco 库 (poco-1.9.0-all) 和 OpenSSL(来自 slproweb 站点的 v1.1.0h)存在问题。 我无法与任何网站建立安全连接。
简单代码:
Poco::Net::initializeSSL();
Poco::Net::Context* pCtx = new Poco::Net::Context(Poco::Net::Context::Usage::TLSV1_2_CLIENT_USE, "", "cacert.pem", "", Poco::Net::Context::VerificationMode::VERIFY_RELAXED, 9, false);
Poco::Net::HTTPSClientSession cs("ya.ru", 443, pCtx);
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, "/?encoding=text", Poco::Net::HTTPMessage::HTTP_1_1);
Poco::Net::HTTPResponse resp;
try
{
Poco::Net::WebSocket sock(cs, req, resp);
}
catch (Poco::Net::SSLException& e)
{
cout << "ssl exception: " << e.displayText() << endl;
}
catch (...)
{
}
我从 poco 库中得到一个异常:“SSL 异常:错误:1416F086:SSL 例程:tls_process_server_certificate:certificate verify failed”。 从https://curl.haxx.se/docs/caextract.html下载的文件cacert.pem
OpenSSL 通过 Poco::Net::Context::init(const Params& params) 中的 SSL_CTX_use_certificate_chain_file 函数读取它而没有错误。
如果我在 Poco::Net::Context 构造函数中指定验证模式 VERIFY_NONE - 连接没有问题。
也许我在 Poco::Net::Context 构造函数中设置了错误的参数?
【问题讨论】: