Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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. 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. To that end, I've done some research and decided to use Boost's Asio library.

I was able to get Boost to build and run in my project by itself. I event made a simple HTTP GET to google.com. Unfortunately, I need to be able to communicate using TLS and I've run into issues trying to use Asio's SSL functionality.

I built both Boost and OpenSSL from source, using default settings (so everything is in /usr/local). I am also using CMAKE to build my project. Below is my CMAKE file:

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:

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:

#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. 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.

Did I put the includes in the wrong order? Is there an issue with my CMAKE file? Did I build OpenSSL or Boost incorrectly?

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 :)).

like image 809
John Price Avatar asked Dec 25 '22 05:12

John Price


1 Answers

This looks to me like Boost has not been updated to work with 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. 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).

like image 199
Matt Caswell Avatar answered Dec 28 '22 21:12

Matt Caswell