当使用ssl时,POCO库挂在android上

时间:2014-05-14 17:30:34

标签: android ssl android-ndk poco

我为android构建了openssl和POCO库。在我的应用程序中,我正在尝试使用SSL。问题是当我创建处理程序时,它会挂起并且永远不会返回。无论我使用哪种类型的证书处理程序,它都会发生。这里可能出现什么问题?

我的代码:

Poco::Net::initializeSSL();
// Creating this handler is where it hangs.
SharedPtr<Poco::Net::InvalidCertificateHandler> pCert = new AcceptCertificateHandler(false);
//It never gets to this line.
Context::Ptr pContext = new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_NONE, 9, true, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");

2 个答案:

答案 0 :(得分:3)

哦,其他人在Android上做POCO / SSL。欢迎来到地狱:P

无论如何,你会把它挂在那里令人困惑 - 我假设你已经通过打印验证了吗?也许你的调用线程正在从Android端被杀掉?显然你不应该从UI线程中调用它,所以就是这样。

如果没有任何问题,那么我不确定问题是什么。我的初始化SSL几乎与您完全相同:

Poco::Net::initializeSSL();
Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> accept_cert_handler =
    new Poco::Net::AcceptCertificateHandler(false);
Poco::SharedPtr<Poco::Net::PrivateKeyPassphraseHandler> console_handler =
    new Poco::Net::KeyConsoleHandler(false);
Poco::Net::Context::Ptr context =
    new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "",
    Poco::Net::Context::VERIFY_NONE, 9, true,
    "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");     

Poco::Net::SSLManager::instance().
    certificateHandlerFactoryMgr().
    setFactory("accept_handler",
    new Poco::Net::CertificateHandlerFactoryImpl<AcceptCertificateHandler>());

Poco::Net::SSLManager::instance().initializeClient(console_handler, 
                                                   accept_handler,
                                                   context);

答案 1 :(得分:0)

我实际上通过使用Android make文件(.mk)构建POCO而不是像我一样使用独立工具链来实现这一点。我不知道区别是什么,但它现在正常运作。