Я пытаюсь написать клиентское приложение на C++ с использованием Poco Libraries (версия poco-1.4.6p1-all) и компиляции в Visual Studio 2010, который отправляет HTTPS-запрос на сервер, который имеет самописный сертификат. У меня есть ошибка, потому что сертификат не распознается:HTTPS-запрос в C++ с использованием Poco
First-chance exception at 0x76e8c41f in httprequest.exe: Microsoft C++ exception: Poco::Net::SSLException at memory location 0x0044ed38..
Я попытался изменить подтверждать функции, написанные в библиотеке (в X509Certificate.h), так что они всегда возвращают истинное и восстановили библиотеку. Такая же ошибка.
Вот код:
try{
const Poco::URI uri("https://www.theServer.com");
Poco::Net::Context::Ptr context =
new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "",
"","",Poco::Net::Context::VERIFY_RELAXED,
9, true, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> pAcceptCertHandler = new Poco::Net::AcceptCertificateHandler(true);
Poco::Net::SSLManager::instance().initializeClient(NULL, pAcceptCertHandler, context);
Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context);
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, "");
req.setContentType("application/x-javascript; charset=utf-8\r\n");
req.setKeepAlive(true);
Poco::Net::HTTPBasicCredentials cred("[email protected]", "lala");
cred.authenticate(req);
session.sendRequest(req);
Poco::Net::HTTPResponse res;
std::istream& rs = session.receiveResponse(res);
std::string resp;
std::vector<Poco::Net::HTTPCookie> cookies;
res.getCookies(cookies);
res.write(std::cout);
}
catch(const Poco::Net::SSLException& e)
{
std::cerr << e.what() << ": " << e.message() << std::endl;
}
catch(const std::exception& e)
{
std::cerr << e.what() << std::endl;;
}
Спасибо!
Я понял, что это исключение выбрасывается независимо от сервера, к которому я пытаюсь подключиться. Возможно ли это из-за неправильной установки OpenSSL? – CJJ
Я нашел тебя. Проблема в том, что я фактически не получил сертификат. Он работает следующим образом: – CJJ