[openssl-users] client ignoring alert

Jeremy Harris jgh at wizmail.org
Tue Oct 9 21:27:14 UTC 2018


Hi,

	OpenSSL version 1.1.1 FIPS, on Fedora 29

(on both client and server)


I'm seeing a client not receiving, or ignoring, what
should be a fatal alert from the server during handshake.

The server is requiring a client-certificate, via:

SSL_CTX_set_verify(sctx,
  SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, ...)
...
server_ssl = SSL_new(server_ctx)
...
SSL_accept(server_ssl)

... and the client is not supplying one.  This is a deliberate
testcase.  The server debug output goes:
==============
21:31:54  8729 SMTP>> 220 TLS go ahead
21:31:54  8729 Calling SSL_accept
21:31:54  8729 SSL info: before SSL initialization
21:31:54  8729 SSL info: before SSL initialization
21:31:54  8729 SSL info: before SSL initialization
21:31:54  8729 SSL info: SSLv3/TLS read client hello
21:31:54  8729 SSL info: SSLv3/TLS write server hello
21:31:54  8729 SSL info: SSLv3/TLS write change cipher spec
21:31:54  8729 SSL info: TLSv1.3 write encrypted extensions
21:31:54  8729 SSL info: SSLv3/TLS write certificate request
21:31:54  8729 SSL info: SSLv3/TLS write certificate
21:31:54  8729 SSL info: TLSv1.3 write server certificate verify
21:31:54  8729 SSL info: SSLv3/TLS write finished
21:31:54  8729 SSL info: TLSv1.3 early data
21:31:54  8729 SSL info: TLSv1.3 early data
21:31:54  8729 SSL info: error
21:31:54  8729 SSL info: error
21:31:54  8729 LOG: MAIN
21:31:54  8729   TLS error on connection from (rhu.barb)
[192.168.122.94] (SSL_accept): error:1417C0C7:SSL
routines:tls_process_client_certificate:peer did not return a certificate
===================
So far so good.  The client however sees:
===================
<<< 220 TLS go ahead
Attempting to start TLS
SSL info: before SSL initialization
SSL info: before SSL initialization
SSL info: SSLv3/TLS write client hello
SSL info: SSLv3/TLS write client hello
SSL info: SSLv3/TLS read server hello
SSL info: TLSv1.3 read encrypted extensions
SSL info: SSLv3/TLS read server certificate request
SSL info: SSLv3/TLS read server certificate
SSL info: TLSv1.3 read server certificate verify
SSL info: SSLv3/TLS read finished
SSL info: SSLv3/TLS write change cipher spec
SSL info: SSLv3/TLS write client certificate
SSL info: SSLv3/TLS write finished
SSL info: SSL negotiation finished successfully
SSL info: SSL negotiation finished successfully
SSL connection using TLS_AES_256_GCM_SHA384
=================

The code running up to that last line indicates that
SSL_connect() returned without error:
----
rc = SSL_connect (*ssl);
alarm(0);

if (sigalrm_seen)
  {
  printf("SSL_connect timed out\n");
  return 0;
  }

if (rc <= 0)
  {
  ERR_print_errors_fp(stdout);
  return 0;
  }

printf("SSL connection using %s\n", SSL_get_cipher (*ssl));
----


What am I doing wrong?
-- 
Thanks,
  Jeremy


More information about the openssl-users mailing list