[英]Boost Asio and OpenSSL 1.1.0
I am currently working on a C++ IMAP library so that I can improve on some admittedly rusty C++ skills. 我目前正在开发一个C ++ IMAP库,以便我可以改进一些公认的生锈的C ++技能。 I would like to make the library as portable as possible so that I can use it across OS's and, if I'm feeling crazy, maybe even on a mobile device.
我想让这个库尽可能便携,以便我可以在OS上使用它,如果我感到疯狂,甚至可能在移动设备上。 To that end, I've done some research and decided to use Boost's Asio library.
为此,我做了一些研究并决定使用Boost的Asio库。
I was able to get Boost to build and run in my project by itself. 我能够让Boost独立构建并运行在我的项目中。 I event made a simple HTTP GET to google.com.
我的活动为google.com做了一个简单的HTTP GET。 Unfortunately, I need to be able to communicate using TLS and I've run into issues trying to use Asio's SSL functionality.
不幸的是,我需要能够使用TLS进行通信,并且我遇到了试图使用Asio的SSL功能的问题。
I built both Boost and OpenSSL from source, using default settings (so everything is in /usr/local). 我使用默认设置从源代码构建了Boost和OpenSSL(所以一切都在/ usr / local中)。 I am also using CMAKE to build my project.
我也在使用CMAKE来构建我的项目。 Below is my CMAKE file:
下面是我的CMAKE文件:
cmake_minimum_required(VERSION 3.2)
project(IMAP)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
message(WARNING "Starting CMAKE...")
set(SOURCE_FILES main.cpp)
add_executable(IMAP ${SOURCE_FILES})
find_package(Boost COMPONENTS system thread regex REQUIRED)
message(WARNING "Boost_INCLUDE_DIR: ${Boost_INCLUDE_DIR}")
message(WARNING "Boost_LIBRARIES: ${Boost_LIBRARIES}")
message(WARNING "Boost_VERSION: ${Boost_VERSION}")
include_directories(${Boost_INCLUDE_DIR})
target_link_libraries(IMAP ${Boost_LIBRARIES})
find_package(OpenSSL REQUIRED)
message(WARNING "OpenSSL_VERSION: ${OPENSSL_VERSION}")
message(WARNING "OpenSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}")
message(WARNING "OpenSSL_LIBRARIES: ${OPENSSL_LIBRARIES}")
include_directories(${OPENSSL_INCLUDE_DIR})
target_link_libraries(IMAP ${OPENSSL_LIBRARIES})
And this is the output of my CMAKE messages: 这是我的CMAKE消息的输出:
Warning:Starting CMAKE...
Warning:Boost_INCLUDE_DIR: /usr/local/include
Warning:Boost_LIBRARIES: /usr/local/lib/libboost_system.dylib;/usr/local/lib/libboost_thread.dylib;/usr/local/lib/libboost_regex.dylib;/usr/local/lib/libboost_chrono.dylib;/usr/local/lib/libboost_date_time.dylib;/usr/local/lib/libboost_atomic.dylib
Warning:Boost_VERSION: 106100
Warning:OpenSSL_VERSION: 1.1.0
Warning:OpenSSL_INCLUDE_DIR: /usr/local/include
Warning:OpenSSL_LIBRARIES: /usr/local/lib/libssl.dylib;/usr/local/lib/libcrypto.dylib
When I try to build the project I receive the following pile of errors: 当我尝试构建项目时,我收到以下一堆错误:
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:
In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:43:23: error: expected unqualified-id
mutexes_.resize(::CRYPTO_num_locks());
^
/usr/local/include/openssl/crypto.h:218:41: note: expanded from macro 'CRYPTO_num_locks'
# define CRYPTO_num_locks() (0)
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:
In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:46:66: error: expected unqualified-id
::CRYPTO_set_locking_callback(&do_init::openssl_locking_func);
^
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:47:56: error: expected unqualified-id
::CRYPTO_set_id_callback(&do_init::openssl_id_func);
^
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:64:32: error: expected unqualified-id
::CRYPTO_set_id_callback(0);
^
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:65:37: error: expected unqualified-id
::CRYPTO_set_locking_callback(0);
^
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:66:7: error: expected unqualified-id
::ERR_free_strings();
^
/usr/local/include/openssl/err.h:241:29: note: expanded from macro 'ERR_free_strings'
# define ERR_free_strings() while(0) continue
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:
In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:68:7: warning: 'ERR_remove_thread_state' is deprecated [-Wdeprecated-declarations]
::ERR_remove_thread_state(NULL);
^
/usr/local/include/openssl/err.h:244:25: note: 'ERR_remove_thread_state' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *))
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:
In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:72:7: error: expected unqualified-id
::EVP_cleanup();
^
/usr/local/include/openssl/evp.h:865:25: note: expanded from macro 'EVP_cleanup'
# define EVP_cleanup() while(0) continue
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:
In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:73:7: error: expected unqualified-id
::CRYPTO_cleanup_all_ex_data();
^
/usr/local/include/openssl/crypto.h:206:39: note: expanded from macro 'CRYPTO_cleanup_all_ex_data'
# define CRYPTO_cleanup_all_ex_data() while(0) continue
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:
In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:76:7: error: expected unqualified-id
::ENGINE_cleanup();
^
/usr/local/include/openssl/engine.h:508:27: note: expanded from macro 'ENGINE_cleanup'
# define ENGINE_cleanup() while(0) continue
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:29:
In file included from /usr/local/include/boost/asio/ssl/detail/openssl_init.hpp:100:
/usr/local/include/boost/asio/ssl/detail/impl/openssl_init.ipp:106:16: error: use of undeclared identifier 'CRYPTO_LOCK'
if (mode & CRYPTO_LOCK)
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:83:31: error: no member named 'SSLv2_method' in the global namespace
handle_ = ::SSL_CTX_new(::SSLv2_method());
~~^
/usr/local/include/boost/asio/ssl/impl/context.ipp:86:31: error: no member named 'SSLv2_client_method' in the global namespace
handle_ = ::SSL_CTX_new(::SSLv2_client_method());
~~^
/usr/local/include/boost/asio/ssl/impl/context.ipp:89:31: error: no member named 'SSLv2_server_method' in the global namespace
handle_ = ::SSL_CTX_new(::SSLv2_server_method());
~~^
/usr/local/include/boost/asio/ssl/impl/context.ipp:111:31: warning: 'TLSv1_method' is deprecated [-Wdeprecated-declarations]
handle_ = ::SSL_CTX_new(::TLSv1_method());
^
/usr/local/include/openssl/ssl.h:1556:45: note: 'TLSv1_method' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:114:31: warning: 'TLSv1_client_method' is deprecated [-Wdeprecated-declarations]
handle_ = ::SSL_CTX_new(::TLSv1_client_method());
^
/usr/local/include/openssl/ssl.h:1558:45: note: 'TLSv1_client_method' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) /* TLSv1.0 */
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:117:31: warning: 'TLSv1_server_method' is deprecated [-Wdeprecated-declarations]
handle_ = ::SSL_CTX_new(::TLSv1_server_method());
^
/usr/local/include/openssl/ssl.h:1557:45: note: 'TLSv1_server_method' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) /* TLSv1.0 */
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:130:31: warning: 'TLSv1_1_method' is deprecated [-Wdeprecated-declarations]
handle_ = ::SSL_CTX_new(::TLSv1_1_method());
^
/usr/local/include/openssl/ssl.h:1562:45: note: 'TLSv1_1_method' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:133:31: warning: 'TLSv1_1_client_method' is deprecated [-Wdeprecated-declarations]
handle_ = ::SSL_CTX_new(::TLSv1_1_client_method());
^
/usr/local/include/openssl/ssl.h:1564:45: note: 'TLSv1_1_client_method' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) /* TLSv1.1 */
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:136:31: warning: 'TLSv1_1_server_method' is deprecated [-Wdeprecated-declarations]
handle_ = ::SSL_CTX_new(::TLSv1_1_server_method());
^
/usr/local/include/openssl/ssl.h:1563:45: note: 'TLSv1_1_server_method' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) /* TLSv1.1 */
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:148:31: warning: 'TLSv1_2_method' is deprecated [-Wdeprecated-declarations]
handle_ = ::SSL_CTX_new(::TLSv1_2_method());
^
/usr/local/include/openssl/ssl.h:1568:45: note: 'TLSv1_2_method' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:151:31: warning: 'TLSv1_2_client_method' is deprecated [-Wdeprecated-declarations]
handle_ = ::SSL_CTX_new(::TLSv1_2_client_method());
^
/usr/local/include/openssl/ssl.h:1570:45: note: 'TLSv1_2_client_method' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) /* TLSv1.2 */
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:154:31: warning: 'TLSv1_2_server_method' is deprecated [-Wdeprecated-declarations]
handle_ = ::SSL_CTX_new(::TLSv1_2_server_method());
^
/usr/local/include/openssl/ssl.h:1569:45: note: 'TLSv1_2_server_method' has been explicitly marked deprecated here
DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) /* TLSv1.2 */
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:208:16: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')
if (handle_->default_passwd_callback_userdata)
^
/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'
typedef struct ssl_ctx_st SSL_CTX;
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:212:20: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')
handle_->default_passwd_callback_userdata);
^
/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'
typedef struct ssl_ctx_st SSL_CTX;
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:212:22: error: expected ')'
handle_->default_passwd_callback_userdata);
^
/usr/local/include/boost/asio/ssl/impl/context.ipp:211:53: note: to match this '('
static_cast<detail::password_callback_base*>(
^
/usr/local/include/boost/asio/ssl/impl/context.ipp:214:14: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')
handle_->default_passwd_callback_userdata = 0;
^
/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'
typedef struct ssl_ctx_st SSL_CTX;
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:551:18: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')
handle_->default_passwd_callback,
^
/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'
typedef struct ssl_ctx_st SSL_CTX;
^
In file included from /path/to/my/code/JMail/IMAP/main.cpp:4:
In file included from /path/to/my/code/JMail/IMAP/IMAPClient.h:6:
In file included from /path/to/my/code/JMail/IMAP/TLSSocket.h:9:
In file included from /usr/local/include/boost/asio/ssl.hpp:19:
In file included from /usr/local/include/boost/asio/ssl/context.hpp:786:
/usr/local/include/boost/asio/ssl/impl/context.ipp:552:18: error: member access into incomplete type 'SSL_CTX' (aka 'ssl_ctx_st')
handle_->default_passwd_callback_userdata) };
^
/usr/local/include/openssl/ossl_typ.h:144:16: note: forward declaration of 'ssl_ctx_st'
typedef struct ssl_ctx_st SSL_CTX;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
10 warnings and 20 errors generated.
The TLSSocket class that is being referenced is basically just a wrapper around the Boost Asio SSL example: 正在引用的TLSSocket类基本上只是Boost Asio SSL示例的包装器:
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
void TLSSocket::connect() {
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query(this->address, this->port);
boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve(query);
boost::asio::ssl::context ctx(boost::asio::ssl::context::tlsv1);
mSocket = new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(io_service, ctx);
mSocket->set_verify_mode(boost::asio::ssl::verify_peer);
mSocket->set_verify_callback(boost::bind(&TLSSocket::on_verify_certificate, this, _1, _2));
boost::asio::async_connect(mSocket->lowest_layer(), iterator,
boost::bind(&TLSSocket::on_connect, this, boost::asio::placeholders::error));
io_service.run();
}
void TLSSocket::disconnect() {
mSocket->lowest_layer().cancel();
}
TLSSocket::TLSSocket(std::string address, std::string port) {
this->address = address;
this->port = port;
mSocket = nullptr;
}
void *TLSSocket::send(IMAPRequest *request) {
boost::asio::streambuf requestBuff;
std::ostream request_stream(&requestBuff);
request_stream << request->getTag() << " " << request->getCommand() << " " << request->getContent() << "\r\n";
boost::asio::write(*mSocket, requestBuff);
for (; ;) {
boost::array<char, 128> buffer;
boost::system::error_code error;
size_t len = mSocket->read_some(boost::asio::buffer(buffer), error);
if (error == boost::asio::error::eof)
break;
else if (error)
throw boost::system::system_error(error);
std::cout.write(buffer.data(), len);
}
}
void TLSSocket::on_connect(const boost::system::error_code& error){
if(!error) {
try {
mSocket->async_handshake(boost::asio::ssl::stream_base::handshake_type ::client,
boost::bind(&TLSSocket::on_handshake, this, boost::asio::placeholders::error));
} catch (std::exception ex){
std::cout << "Handshaking error: " << ex.what() << "\n";
}
} else {
std::cout << "Connect error: " << error.message() << "\n";
}
}
void TLSSocket::on_handshake(const boost::system::error_code& error){
if(!error){
} else {
std::cout << "Handshaking error: " << error.message() << "\n";
}
}
bool TLSSocket::on_verify_certificate(bool verified, boost::asio::ssl::verify_context &ctx) {
char subject_name[256];
X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle());
X509_NAME_oneline(X509_get_subject_name(cert), subject_name, 256);
std::cout << "Verifying " << subject_name << "\n";
return verified;
}
It looks to me like it isn't even getting to the linking stage of compilation, it's just trying to make the .o file for my main.cpp. 在我看来它甚至没有进入编译的链接阶段,它只是试图为我的main.cpp制作.o文件。 If I open one of the files that it complains about in my IDE, the IDE gives me a syntax error highlight, but I'm stumped as to why.
如果我在IDE中打开它抱怨的其中一个文件,IDE会给我一个语法错误突出显示,但我很难过为什么。
Did I put the includes in the wrong order? 我把包含的顺序错了吗? Is there an issue with my CMAKE file?
我的CMAKE文件有问题吗? Did I build OpenSSL or Boost incorrectly?
我是否错误地构建了OpenSSL或Boost?
Any help would be appreciated. 任何帮助,将不胜感激。 I've been working on this on and off for a couple of weeks and have spent the majority of that time just getting it to build (C++ Lesson 1, I guess :)).
我已经开发了几个星期并且已经花费了大部分时间来构建它(C ++第1课,我猜:))。
This looks to me like Boost has not been updated to work with OpenSSL 1.1.0. 这看起来像Boost还没有更新到使用OpenSSL 1.1.0。 There have been a number of API changes between OpenSSL 1.0.2 and 1.1.0 and they are not fully source compatible.
OpenSSL 1.0.2和1.1.0之间存在许多API更改,并且它们不完全源兼容。 I suggest you use 1.0.2 until Boost has been updated to work with the new OpenSSL version (which is still in beta anyway).
我建议您使用1.0.2,直到Boost更新为使用新的OpenSSL版本(无论如何仍处于测试阶段)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.