Hi everyone,
Recently I have problem when trying to update my OpenSSL library from 1.0.1f to
1.1.0g.
I have a server that runs 24/24 and receive connections from only 1 source, and
1 connection at a time, nothing really fancy, but it worked very well in
OpenSSL 1.0.1f version. In 1.1.0g, the connection is establish and runs
perfectly the 1st time. And the 2nd time the client try to connect, after the
SSL connection is establish, SSL_read cannot return -1, and have no errors
(checked with SSL_get_errors...)
My server runs on Linux 14.04, while my client runs on Windows 7, both with
OpenSSL 1.1.0.
If anyone have an idea what happened, I would be glad to know, please tell me
if you need any details.
Here the principal code snipset (I don't have the certificate verification code
snip here, but it was there, and it always works so I guess there no point
repost it now):
+ Some initial configurations:
SSL_CTX* ctx_in;
const SSL_METHOD *method;
OpenSSL_add_all_algorithms();
SSL_load_error_strings();
method = TLS_server_method();
ctx_in = SSL_CTX_new(method);
//Setup trusted certs & list of clients CA
SSL_CTX_set_verify(ctx_in, SSL_VERIFY_PEER, NULL);
SSL_CTX_set_verify_depth(ctx_in, 1); //our certificate chain contain only 1
more root CA
//Load issuer certificate from memory
X509_STORE* store = SSL_CTX_get_cert_store(ctx_in);
X509_STORE_add_cert(store, certinMem(caVerifClientReal);
SSL_CTX_set_client_CA_list(ctx_in, NULL);
SSL_CTX_add_client_CA(ctx_in, certinMem(pubClientReal));
//Setup curves parameters
EC_KEY *ecdh = EC_KEY_new_by_curve_name (NID_X9_62_prime256v1);
SSL_CTX_set_tmp_ecdh (ctx_in, ecdh);
EC_KEY_free(ecdh);
//Set options
SSL_CTX_set_options(ctx_in, SSL_OP_SINGLE_ECDH_USE && SSL_MODE_AUTO_RETRY);
...
+ Main loop:
char buf[1024];
struct sockaddr_in addr; //client
socklen_t len = sizeof(addr);
while (1)
{
//initialize buffer
buf[0] = '\0';
int client = accept(server, reinterpret_cast<struct sockaddr*>(&addr),
&len);
if (-1 != client)
{
//set SSL security
const char* const PREFERRED_CIPHERS = "ECDHE-RSA-AES256-SHA"; //define
cipher suite used for SSL connection
SSL_set_cipher_list(ssl, PREFERRED_CIPHERS);
//set SSL socket
SSL_set_fd(ssl, client); /* set connection socket to SSL state */
if (SSL_accept(ssl) == FAIL) //waits for a client to initiate the
handshake
{/* do SSL-protocol accept */
ERR_print_errors_fp(stderr);
}
else
{
verifCerts(ssl);
int ret = -1;
ret = SSL_do_handshake(ssl); //check connection
if (ret <= 0)
{
ERR_print_errors_fp(stderr);
}
else
{
//wait on buffer
int bytes = SSL_read(ssl, buf, sizeof(buf));
//here bytes return -1, and there is no error with
SSL_get_errors
}
}
sd = SSL_get_fd(ssl); /* get socket connection */
close(sd); /* close connection */
}
Huy-Cong VU
Platform hardware member
Network administrator
Wandercraft
09 72 58 77 03
--
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users