Tôi đang cố gắng viết một ứng dụng khách trong C++ bằng Poco Libraries (phiên bản poco-1.4.6p1-all) và biên dịch trong Visual Studio 2010, gửi một yêu cầu HTTPS tới một máy chủ có chứng chỉ tự viết. Tôi có một lỗi vì giấy chứng nhận không được công nhận:Yêu cầu HTTPS bằng C++ sử dụng Poco
First-chance exception at 0x76e8c41f in httprequest.exe: Microsoft C++ exception: Poco::Net::SSLException at memory location 0x0044ed38..
Tôi đã cố gắng thay đổi các chức năng bằng văn bản trong thư viện (trong X509Certificate.h) để họ luôn trở thành sự thật và xây dựng lại thư viện xác minh. Lỗi tương tự.
Đây là mã:
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;;
}
Cảm ơn bạn!
Tôi nhận thấy rằng ngoại lệ này được ném bất kể máy chủ tôi cố kết nối đến. Nó có thể là do cài đặt OpenSSL không chính xác không? – CJJ
Tôi tìm thấy câu trả lời. Vấn đề là tôi đã không thực sự nhận được chứng chỉ. Nó hoạt động như thế này: – CJJ