Я использую сервер 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)
{
и я не знаю, как получить сертификат оттуда.Пожалуйста, помогите, спасибо!