我知道这是一个重复的问题:OpenSSL EAP-TLS handshake using BIO。但是似乎没有答案。我还使用BIO_s_mem()
来启动TLS(v1.2)连接,这是我用来进行带注释的握手的代码:
void handshake() {
u_long mode = 1;
struct fd_set fds;
FD_ZERO(&fds);
FD_SET(sfd, &fds);
ioctlsocket(sfd, FIONBIO, &mode); //Make the socket non-blocking
int n, s;
char buf[DEFAULT_BUFFER_SIZE];
SSL_do_handshake(pSSL); //This gives 2 (SSL_ERROR_WANT_READ) with SSL_get_error
do {
n = BIO_read(wbio, buf, sizeof(buf)); // Copy SSL's generated encrypted
if (n > 0) queueEncryptedBytes(buf, n); // ClientHello message
else if (!BIO_should_retry(wbio)) {
std::cout << "Initiate handshake failed...\n";
break;
}
} while (n > 0);
send(sfd, eBuffer, eLen, 0); //Send it to the socket
eBuffer = (char*) realloc(eBuffer, 0);
eLen = 0;
select(0, &fds, NULL, NULL, NULL); //Wait for ServerHello response
memset(buf, 0, sizeof(buf));
do {
n = recv(sfd, buf, sizeof(buf), 0);
if (n > 0) BIO_write(rbio, buf, n); //Write to the rbio (use SSL_read to later received decrypted message)
} while (n > 0);
SSL_do_handshake(pSSL); //I tried to call handshake again but still gives SSL_ERROR_WANT_READ
}
这是ServerHello加密的消息,我认为这表明我的方向是正确的:
201126235959Z0&1$0"Ussl764977.cloudflaressl.com0Y0*åH╬=*åH╬=BU Ç0U 0tp://crt.comodoca4.com/COMODOECCDomainValidationSecureServerCA2.crt+0åhttp://ocsp.comodoca4.com0é
+╓yü⌡ü≥░7~b√Ä╔aä±Ω{7╦V&[≤α≤K≥ATnÅ·t╬ΣÇ)X∙ì<∙ater Manchester10USalford10U
COMODO CA Limited1806U/COMODO ECC Domain Validation Secure Server CA 20Y0*åH╬=*åH╬=B@ ag≡╝âqO▐,o╘╘+v=û0U å0U 0 MODOECCAddTrustCA.crt+0åhttp://ocsp.comodoca4.com0
*åH╬=hater Manchester10USalford10U
281231235959Z0üà10 UGB10Greater Manchester10USalford10U
COMODO CA Limited1+0)U"COMODO ECC Certification A╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╔t░Futhority0v0*åH╬=+ü<╡kÆΓ K╦⌡■T#┬p/ì(╚╘Wⁿ;╩∙ *~╘-Θ]Åß─rîë'XΦ¿sπ@im▓yª¥¿ûy okÉö▄╤`Véçpp.comodoca.com0
╟║╥
但是我无法继续,因为它仍在阻塞,我需要满足基础的BIO
才能继续。任何帮助表示赞赏。