similar questionBoost Asio SSL anlaşması asla
Davam farklıdır döndürür. Bir SSL istemcisini boost::asio::ssl
kullanarak yazdım ancak şu anda diğer grup tarafından geliştirilmekte olan sınanacak sunucunuz yok. Bu yüzden mevcut sunucu sadece düz TCP (güvensiz) bağlantıları kabul eder. Ssl istemcisini sunucuya karşı kullandığımda, handshake()
engellemesi kilitleniyor/hiç geri dönüyor. Ağ üzerinden arama yaptım ve Mozilla'nın da benzer sorunları olduğunu anladım - SSL bağlantısı olmayan bir sunucuya SSL bağlantısı kurulurken takıldı, ancak hataları sabit duruyor.
ctor
yılında:
SecuredConnectionPolicy<ThreadPolicy>::SecuredConnectionPolicy() :
m_sslContext(boost::asio::ssl::context::sslv23),
m_socket(m_ioService, m_sslContext) //ssl::stream<tcp::socket>
{
}
benim "connect
(...)" denir:
m_sslContext.set_options(boost::asio::ssl::context::default_workarounds);
m_sslContext.set_verify_mode(
boost::asio::ssl::context::verify_none,
errorCode
);
if(!errorCode)
{
/*m_sslContext.set_verify_callback(
[this](bool bIsPreverificationSuccessful, boost::asio::ssl::verify_context &context){return this->verificationHandler(bIsPreverificationSuccessful, context);},
errorCode
);*/
if(!errorCode)
{
m_sslContext.load_verify_file("newcert.pem", errorCode);
if(!errorCode)
{
m_socket.lowest_layer().connect(remoteEndpoint, errorCode);
if(!errorCode)
{ // ########### Following NEVER RETURNS #############
m_socket.handshake(boost::asio::ssl::stream_base::client, errorCode);
if(errorCode)
{
std::cerr << "Secured Connection Handshake Failed! " << errorCode.message() << std::endl;
}
}
else
{
std::cerr << "Secured Connection Failed! " << errorCode.message() << std::endl;
}
}
else
{
std::cerr << "Secured Connection loading certificate files from default paths Failed! " << errorCode.message() << std::endl;
}
}
else
{
std::cerr << "Registering Verification callback failed! " << errorCode.message() << std::endl;
}
}
else
{
std::cerr << "Secured Connection verify mode Failed! " << errorCode.message() << std::endl;
}
Sebep ne olabilir? Yanlış bir şey yapıyorum?
Herhangi bir veri doğrulama işleyicisi sağlamadığım için, OpenSSL tarafından yapılan ön düzeltmenin yapıldığını varsayıyorum (çünkü her yerde destek, OpenSSL eşdeğer işlevini çağırdığını söylüyor). Bunun bir dezavantajı var mı yoksa bu < 1> 'i etkileyebilir mi?
Bu, önemsiz bir şeydir, ancak sorunlara neden olmadığından emin olmak için: Genellikle, destekleme örneklerinde, ssl context nesnesinin,
ssl::stream<tcp::socket>
kretine vermeden önce ayarlandığını gösterir. Ancak ben daha önce (yukarıdaki ctor) ve daha sonraconnect()
'daki özellikleri değiştiriyorum. Bunlar inşa edilmiş ssl :: akışının davranışına yansıyacak mıdır (çünkü bu referansa dayanır ve umarım kopya çıkarmaz). (Fayda varsa) Yan not
load_verify_file(...)
'a verdiğim şeydir.