ssl - 如何使用 OpenSSL API 执行重新握手(重新协商)?

标签 ssl openssl handshake

如何使用 OpenSSL API 执行重新握手(重新协商)? 我需要两种类型:服务器启动时和客户端启动新握手时。

最佳答案

尽管您现在可能已经弄清楚了,但我会将其作为对所有 OpenSSL 初学者的有用 Material 。

重新协商(服务器请求)

     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

此页面(及相关页面)介绍了正确实现服务器和客户端(使用阻塞套接字)所需的所有技术。

关于ssl - 如何使用 OpenSSL API 执行重新握手(重新协商)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28944294/

相关文章:

linux - WGET - HTTPS 与 HTTP = HTTPS 更慢

php - 如何将 http ://domain. com 重定向到 https ://www. domain.com?

ssl - 使用 SSL 的 Mosquitto,为什么要生成 .csr?

Python SocketServer不会握手

node.js - 错误 : connect ECONNREFUSED at exports. _errnoException 在 TCPConnectWrap.afterConnect

ios - 验证用于 XMPPFramework iOS 的 SSL/TLS 版本

java - 使用 SSLContext.getDefault() 在 Spring 使用 SSL 设置 Ignite 集群

encryption - Java 应用程序和 C 应用程序与 OpenSSL 正确通信几分钟后发出 'bad record mac' 警报

ssl - 我可以在 LAMP 堆栈 Wordpress 上生成 SSL 证书,然后将其移至 Bitnami 吗?

node.js - 如何使用nodejs中的ws npm模块从客户端向WebSocket服务器发送 "Upgrade"握手?