3

I'm trying to diagnose a potential SSL/TLS problem between a Mac client and a Windows server. I have generated my own root cert and signed a cert for the server, and installed the root cert on the Mac client. When I try to connect to the server from the mac like this

echo quit | openssl s_client -connect newmail.example.com:443 -CAfile ~/Downloads/myroot.cer 

I see these results

---
SSL handshake has read 1365 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: DE2800000D2050CAB6CEE9136CD377998559C46C7AD57A1062907EE417457DE0
    Session-ID-ctx: 
    Master-Key: 24E2BE661880D703B7033E0F723323296C26ECEDA0BA79493AE134C7F03EEBD765692C9DF10933BE213FF4E0F89771AC
    Key-Arg   : None
    Start Time: 1458249776
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
DONE

Do these results mean that the HIGHEST level of protocol negotiated is TLSv1 ? (Which I suspect is causing my app problem)? Shouldn't this be TLS 1.2 ?

6

Protocol version is the result of a negotiation between client and server. Client sends, in the ClientHello, the maximum version that it supports; then the server responds with the version that will be used. Normally, the server will select the highest protocol version that it supports and is not higher than the client's advertised max version.

Here, with the openssl command-line tool as client, you got TLS 1.0. So either the client (here, OpenSSL) or the server knows only TLS 1.0 and not 1.2.

The /usr/bin/openssl tool shipped with OS X is pretty old; on an up-to-date OS X installation (El Capitan), it is OpenSSL-0.9.8zg -- this is an ancient OpenSSL with bug fixes, but no support for features added in the OpenSSL-1.* versions. In particular, no TLS 1.1 or 1.2. Which explains that, with OpenSSL, you only get 1.0.

(OS X does not upgrade OpenSSL to the newer versions because the OpenSSL developers broke backward compatibility in the API, so changing the library version may break third-party existing applications that use it.)


To further investigate your issue, I suggest the following:

  • Try a newer openssl client. You could use MacPorts (for instance) to reasonably easily install such opensource software.

  • You may want to test your server with one of the tools that are dedicated to such a purpose. If your server is reachable from the Internet, Qualys SSL Labs is the usual method. For servers on private networks, there are also command-line tools such as testssl.sh or TestSSLServer that can give you some information.

  • You should observe a SSL handshake attempt with a network monitoring application (e.g. Network Monitor on the Windows server, or Wireshark). This will reveal whether the client tries to initiate a handshake at all, what versions / cipher suites it sends, and what the server responds.

    Such a trace may also reveal other things, such as failed attempts to download CRL as part as certificate validation on the client side.

  • The Qualys site confirmed my server is using 1.2, and your explanation explains mac openssl using 1.0. I'll close the question as I dig deeper. – TSG Mar 17 '16 at 22:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.