我试图使用OpenSSL C库实现EAP-TLS握手,但使用内存BIO。我成功地实现了客户问候:
ctx = SSL_CTX_new(TLSv1_client_method());
SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);
ssl = SSL_new(ctx);
rbio = BIO_new(BIO_s_mem());
wbio = BIO_new(BIO_s_mem());
SSL_set_bio(ssl, rbio, wbio);
SSL_set_connect_state(ssl);
SSL_do_handshake(ssl);
readbytes = BIO_read(wbio, buf, BUF_SIZ);
并通过套接字发送buf。接下来,服务器向我发送了一条TLS_server_hello消息,我尝试将其加载到上面使用的相同ssl结构中:
readbytes = BIO_write(rbio, temp, bytes);
并再次致电SSL_do_handshake(ssl)
。但是,当我尝试隔离服务器的消息或证书链的密钥交换部分时,我尝试将其作为:
X509 *cert = SSL_get_peer_certificate(ssl);
char cname = cert->name;
但它不起作用。将缓冲区复制到SSL结构时,我做错了吗?我至少走在正确的轨道上?或者这些数据应该以不同的方式处理?谢谢!