Как выполнить повторное рукопожатие (повторное согласование) с помощью OpenSSL API? Мне нужны оба типа: когда сервер инициирует и когда клиент инициирует новое рукопожатие.
Как выполнить повторное рукопожатие (повторное согласование) с помощью OpenSSL API?
Ответы (1)
Несмотря на то, что вы, вероятно, уже поняли это, я оставлю это как полезный материал для всех новичков в грязи OpenSSL.
Повторное согласование (запросы сервера)
printf("Starting SSL renegotiation on SSL server (initiating by SSL server)");
if(SSL_renegotiate(ssl) <= 0){
printf("SSL_renegotiate() failed\n");
exit(1);
}
if(SSL_do_handshake(ssl) <= 0){
printf("SSL_do_handshake() failed\n");
exit(1);
}
ssl->state = SSL_ST_ACCEPT;
if(SSL_do_handshake(ssl) <= 0){
printf("SSL_do_handshake() failed\n");
exit(1);
}
Переоформление (запросы клиентов)
printf("Starting SSL renegotiation on SSL client (initiating by SSL client)");
if(SSL_renegotiate(ssl) <= 0){
printf("SSL_renegotiate() failed\n");
exit(1);
}
if(SSL_do_handshake(ssl) <= 0){
printf("SSL_do_handshake() failed\n");
exit(1);
}
(взято с http://h71000.www7.hp.com/doc/83final/ba554_90007/ch04s03.html)
Кроме того, другая сторона может обработать запрос, просто вызвав SSL_read
.
Чтобы еще раз проверить, удалось ли повторное согласование, вы можете вызвать SSL_renegotiate_pending
после этого.
На этой странице (и связанных с ней) представлены все методы, необходимые для правильной реализации сервера и клиента (с использованием блокирующих сокетов).
person
Leśny Rumcajs
schedule
04.12.2015