如何使用 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/