Как выполнить повторное рукопожатие (повторное согласование) с помощью OpenSSL API?

Как выполнить повторное рукопожатие (повторное согласование) с помощью OpenSSL API? Мне нужны оба типа: когда сервер инициирует и когда клиент инициирует новое рукопожатие.


person rasjv    schedule 09.03.2015    source источник


Ответы (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