我正在尝试构建一个EAP-TLS客户端。我正在使用OpenSSL来构建数据的TLS部分。由于EAP适用于较低层,我使用OpenSSL的内存BIO使用原始套接字向Freeradius服务器发送信息。这是我生成客户端问候的代码
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);
这就是我试图将服务器的回复读到同一个ssl
:
BIO_write(rbio, temp, numbytes);
SSL_do_handshake(ssl);
readbytes = BIO_read(wbio, read, BUF_SIZ); // read is a buffer
然而,当我尝试使用读取时保存的数据发送数据包时,wireshark将数据包显示为:有谁知道为什么会发生这种情况?这是由于RADIUS服务器配置不当造成的吗?或者我在阅读数据时犯了错误?根据我读到的内容,应该调用SSL_do_handshake,直到完成所有握手步骤,所以我不认为那里有错误。非常感谢!完整数据包序列(使用过滤器EAP):http://www.filehosting.org/file/details/453553/eap-tls.pcapng