Setup:
Client: Curl/libcurl 7.21.7  OpenSSL 1.0.1 on powerpc linux
Server: Win2008 R2 IIS 7.  Virtual directory with Client Authentication
set to Accept or Require
Local network, IPV4 addressing
I do not have the specific build of openssl 1.0.1 yet, will get that
from the other dev.

Symptom: openssl starts with TLS v1.2, gets TLS v1.0 back from IIS, and
client authentication fails with bad_record_mac  .  If TLS v1.0 is
forced in curl, TLS v1.0 is used in the initial CLIENT HELLO and the
full connection handshakes successfully.

More detail:
When client authentication is enabled on the IIS 7 virtual directory,
connections from curl are getting hard reset by the server after the
client provides the certificate, CLIENT KEY EXCHANGE and CERITIFICATE
VERIFY messages.  Windows schannel provider reports event ID 36888 fatal
alert 20.  This maps to TLS definition of BAD_RECORD_MAC

The client is showing TLS v1.2 in the initial CLIENT HELLO, but SERVER
HELLO uses TLS v1.0 moving the rest of the conversation down to v1.0.
The negotiated cipher used is TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
The connection establishes at first without client auth until the client
does its HTTP post and IIS sees that client auth is required on that
site.  IIS starts a renegotiation using the existing session and
proceeds to send it's CERTIFICATE and the CERTIFICATE REQUEST.  Client
replies with CERTIFICATE, CLIENT KEY EXCHANGE, CERTIFICATE VERIFY,
CHANGE CIPHER SPEC and FINISHED, but IIS never sends the CHANGE CIPHER
SPEC and just hard resets the connection.

This behavior is consistent and happens everytime.  But if through curl
I force TLS v1.0 (with it's -1 parameter), initial CLIENT HELLO is sent
with TLS v1.0, server responds v1.0  - and connection establishes
correctly - no errors.

So issue is why when the initial hello is v1.2 and steps down to v1.0,
the CERTIFICATE VERIFY message appears to be rejected by IIS as having a
bad MAC... but if v1.0 is forced, all is good.

-Steve

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to