[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#8532) Blank subject name results in failed SSLHandshake



Full_Name: Graham Wells
Version: 2.4.28
OS: macOS 10.12.1
URL: 
Submission from: (NULL) (50.207.27.182)


SSLHandshake fails for ldapsearch when the subject is blank, even if the
certificate is valid and certificate chain trusted (should only require a valid
SAN and for SAN to be marked as critical):

Command: /usr/bin/ldapsearch -b "CN=userid,ou=foo,ou=bar,dc=domain,dc=com" -D
"CN=bind-dn,ou=foo,ou=bar,dc=domain,dc=com" -H ldaps://server-ldap.com:636 -W
-d-1

ldap_url_parse_ext(ldaps://server-ldap.com:636)
ldap_create
ldap_url_parse_ext(ldaps://server-ldap.com:636/??base)
Enter LDAP Password:AlAldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP server-ldap.com:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.2.2.2:636
ldap_pvt_connect: fd: 3 tm: -1 async:%D
tlsst_thr_init()
tlsst_init()
tlsst_ctx_new() = 0x7fa10de02f90
tlsst_ctx_init(0x7fa10de02f90)
tlsst_ciphers_get((null), TLS_CIPHER_SUITE)
tlsst_trusted_certs_get(CA 002|CA 001|CA 003|ROOT CA 001|Other Root CA,
TLS_TRUSTED_CERTS)
tlssttetem_get(CA 002, TLS_TRUSTED_CERTS)
tlsst_item_get(CA 001, TLS_TRUSTED_CERTS)
tlsst_item_get(CA 003, TLS_TRUSTED_CERTS)
tlsst_item_get(ROOT CA 001, TLS_TRUSTED_CERTS)
tlsst_item_get(Other Root CA, TLS_TRUSTED_CERTS)
tlsst_session_new(0x7fa10de02f90)
tlsst_ciphers_set(42, TLS_CIPHER_SUITE)
TLS: 42 ciphers wanted:
...(omitted)
TLS: 72 ciphers supported:
...(omitted)
TLS: 16 ciphers enabled
...(omitted)
tlsst_ctx_ref(0x7fa10de02f90)
tlsst_session_new(0x7fa10de02f90) = 0x7fa10dd08280
tlsst_sb_setup(0x7fa10dd08280)
tlsst_ctx_ref(0x7fa10de02f90)
tlsst_session_connect(0x7fa10dd08280)
tlsst_session_handshake()
tlsst_socket_write(0x7fa10dd0ef68, 123)
tls_write: want=123, written=123
  0000:  16 03 01 00 76 01 00 00  72 03 03 58 33 55 fe 4e   ....v...r..X3U.N
  0010:  8e 16 0d df 99 3a e6 68  36 a1 ff 90 71 1f 78 bb   .....:.h6...q.x.
  0020:  70 bf 2a 02 05 44 c9 94  07 33 2f 00 00 22 00 ff   p.*..D...3/.."..
  0030:  00 9d 00 9f 00 3d 00 6b  00 35 00 39 00 9c 00 9e   .....=.k.5.9....
  0040:  00 3c 00 67 00 2f 00 33  00 0a 00 16 00 05 00 04   .<.g./.3........
  0050:  01 00 00 27 00 0d 00 12  00 10 04 01 02 01 05 01   ...'............
  0060:  06 01 04 03 02 03 05 03  06 03 00 05 00 05 01 00   ................
  0070:  00 00 00 00 12 00 00 00  17 00 00                  ...........
tlsst_socket_read(0x7fa10e81d800, 5)
tls_read: want=5, got=5
  0000:  16 03 03 11 38                                     ....8
tlsst_socket_read(0x7fa10e81d805, 4408)
tls_read: want=0808, got=2891
...(sanitized)
tlsst_socket_read -  received (2891) bytes of (4408) requested bytes -  (1517)
encrypted bytes remaining
tlsst_socket_flags sess(0x7fa10dd08280)
tlsst_socket_flags ->(2)
tlsst_socket_read(0x7fa10e81e350, 1517)
tls_read: want=1517, got=1517
  ...(sanitized)
TLS: during handshake: peer cert is valid, or was ignored if verification
disabled (-9841)
TLS: during handshake: Peer certificate is not trusted:
kSecTrustResultRecoverableTrustFailure
tlsst_session_upflags(0x7fa10dd08280)
tlsst_session_errmsg(0x7fa10dd08280)
TLS: can't connect: SSLHandshake() failed: misc. bad certificate (-9825).
tlsst_sb_remove(0x7fa10dd08280)
tlsst_session_free(0x7fa10dd08280)
tlsst_ctx_free(0x7fa10de02f90)
ldap_err2string
ldap_sasl_bind(SIMPLE): Can7t7t contact LDAP server (-1)
ldap_pvt_clear_search_results_callback: ld 0x7fa10dd00ab0
ldap_pvt_close_select_pipe: sip = 0x7fa10e803800
tlsst_ctx_free(0x7fa10de02f90)
tlsst_ctx_free(0x7fa10de02f90)
tlsst_destroy()

Certificate is otherwise valid:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            (redacted)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: DC=foo, DC=bar, CN=CA 003
        Validity
            Not Before: Oct 25 23:33:16 2016 GMT
            Not After : Oct 25 23:33:16 2017 GMT
        Subject:
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
         (redacted)
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            1.3.6.1.4.1.311.21.7:
                0-.%+.....7....`...W......./....W...b......d...
            X509v3 Extended Key Usage:
                1.3.6.1.5.2.3.5, Microsoft Smartcardlogin, TLS Web Server
Authentication, TLS Web Client Authentication
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            1.3.6.1.4.1.311.21.10:
                010...+......0..
+.....7...0
..+.......0
..+.......
            X509v3 Subject Key Identifier:
                E2:D2:D9:24:6D:A6:5A:2D:59:03:08:38:03:AE:E8:F4:2A:EA:EB:9F
            X509v3 Authority Key Identifier:
                keyid:16:70:AA:1C:31:53:76:FB:26:B5:B8:EA:FC:76:08:E6:3F:17:0D:2F

            X509v3 CRL Distribution Points:
                URI:http://foo.bar.com/CertData/CA 003.crl
                URI:ldap:///CN=CA
003,CN=server-ldap,CN=CDP,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=domain,DC=co3F3FcertificateRevocationList?base?objectClass=cRLDistributionPoint

            Authority Information Access:
                CA Issuers -
URI:http://foo.bar.com/CertData/server-ldap_CA-003.crt
                CA Issuers - URI:ldap:///CN=CA
003,CN=AIA,CN=Public%20Key%20Services,CN=Services,CN=Configuration,DC=domain,DC=com?cACertificate?base?objectClass=certificationAuthority

            X509v3 Subject Alternative Name: critical
                DNS:server-ldap.com, DNS:domain.com, DNS:DOMAIN
    Signature Algorithm: sha256WithRSAEncryption
        (redacted)

The certificate is RFC5280 compliant despite having a blank subject name,
specifically:

"If the subject field contains an empty sequence, then the issuing CA MUST
include a subjectAltName extension that is marked as critical." 

Reissuing the certificate and populating the subject field resolves the issue,
but it should not be necessary according to the RFC.