c ++ boost Получить общее имя из ssl-сертификата - PullRequest
0 голосов
/ 28 декабря 2018

Я использую сервер C ++ boost для сокетов SSL.Как я могу проанализировать CN из SSL-сертификата подключения?

Я использую context_.set_verify_callback (boost :: bind (& ProxyServer :: verify_certificate, this, _1, _2));чтобы проверить crt-info:

bool verify_certificate(bool preverified, 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:\n" << subject_name << std::endl;

    CN = FUNC.split(FUNC.split (subject_name, "CN=") [1], "/")[0];



    return preverified;
}

и все работает нормально.Я получаю:

/ C = ua / ST = Киев / L = Киев / O = тест / OU = тест / CN = test00005

И тогда мне нужно получить эту информацию в handle_read:

class Session {public: Session (boost :: asio :: io_context & io_context, boost :: asio :: ssl :: context & context): socket_ (io_context, context) {}

ssl_socket::lowest_layer_type& socket()
{
    return socket_.lowest_layer();
}

void stop()
{
    socket().close();
}

void start(int num)
{



    socket_.async_handshake(boost::asio::ssl::stream_base::server,
        boost::bind(&Session::handle_handshake, this,
            boost::asio::placeholders::error, num));



}

void handle_handshake(const boost::system::error_code& error, int num)
{
    if (!error)
    {

        socket_.async_read_some(boost::asio::buffer(data_, max_length),
            boost::bind(&Session::handle_read, this,
                boost::asio::placeholders::error,
                boost::asio::placeholders::bytes_transferred, num));
    }
    else
    {
        delete this;
    }
}


void handle_read(const boost::system::error_code& error,
    size_t bytes_transferred, int num)
{
    if (!error)
    {

и я не знаю, как получить сертификат оттуда.Пожалуйста, помогите, спасибо!

...