#openssl
Вопрос:
Кто-нибудь знает, как выполнить повторное подтверждение(повторное согласование) с аутентификацией клиента с использованием API Openssl 1.1.1 для существующих подключений? Я переношу наш серверный код с Opernssl 1.0.2 на Openssl 1.1.1, и у меня возникли проблемы с пересмотром. Мы используем код из https://www.linuxjournal.com/article/5487
int vflags = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
SSL_set_verify(ssl, vflags, 0);
try {
// Set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION to force new session and send client certificate request
SSL_set_options(ssl, SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION);
/* Stop the client from just resuming the un-authenticated session */
//SSL_set_session_id_context(ssl, s_server_auth_session_id_context,sizeof(s_server_auth_session_id_context));
if (SSL_renegotiate(ssl) <= 0) {
// Clear SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
SSL_clear_options(ssl, SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION);
throw runtime_error("SSL_renegotiate()");
}
if (SSL_do_handshake(ssl) <= 0) {
// Clear SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
SSL_clear_options(ssl, SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION);
throw runtime_error("SSL_do_handshake(1) ");
}
//ssl->state = SSL_ST_ACCEPT;
int Res = SSL_do_handshake(ssl);
if (Res <= 0) {
//always returns error that certificate is not available
}
Он корректно работает с OpenSSL 1.0.2, но не работает на Openssl 1.1.1. Я больше не могу использовать ssl->состояние = SSL_ST_ACCEPT>, потому что такой член структуры SSl больше недоступен. Но, к сожалению, я не могу найти пример, как я могу заставить сервер ждать повторного рукопожатия клиента.