You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
X509 cert with GEN_RID subject alt name causes SytemError #71878
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=<Date2016-09-09.00:05:05.045>created_at=<Date2016-08-05.09:26:35.351>labels= ['type-security', 'extension-modules']
title='X509 cert with GEN_RID subject alt name causes SytemError'updated_at=<Date2016-09-09.00:05:05.044>user='https://github.com/tiran'
A X509 cert with a registered id general name in subject alternative name causes a SystemError: error return without exception set. This prevents host name validation of certs with a registered id.
>>> import _ssl
>>> _ssl._test_decode_cert('rid.pem')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
SystemError: error return without exception set
The problem is caused by a bug in OpenSSL's print function for general names. Python's _get_peer_alt_names() uses GENERAL_NAME_print() to print GEN_IPADD, GEN_RID and others into a buffer. The buffer is then split at ':' into two strings. This works for all fields except for GEN_RID because OpenSSL doesn't put a ':' after 'Registered ID', https://github.com/openssl/openssl/blob/master/crypto/x509v3/v3_alt.c#L183 . _get_peer_alt_names() fails and returns NULL without setting a proper exception.
It looks like we haven't had tests for GEN_RID as well as some other field types.
A GEN_RID is an OID plus some opaque data. It's up to an application to understand an OID and interpret its data. The value of a GEN_RID can be as simple as an int or UTF-8 strings or as complex as a nested ASN.1 struct for Kerberos principals.
Activity
tiran commentedon Aug 5, 2016
A X509 cert with a registered id general name in subject alternative name causes a SystemError: error return without exception set. This prevents host name validation of certs with a registered id.
The problem is caused by a bug in OpenSSL's print function for general names. Python's _get_peer_alt_names() uses GENERAL_NAME_print() to print GEN_IPADD, GEN_RID and others into a buffer. The buffer is then split at ':' into two strings. This works for all fields except for GEN_RID because OpenSSL doesn't put a ':' after 'Registered ID', https://github.com/openssl/openssl/blob/master/crypto/x509v3/v3_alt.c#L183 . _get_peer_alt_names() fails and returns NULL without setting a proper exception.
It looks like we haven't had tests for GEN_RID as well as some other field types.
Related Red Hat bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1364268
tiran commentedon Aug 20, 2016
ping
pitrou commentedon Sep 1, 2016
I can't comment on this, as I don't even know what a "registered id" is, sorry :-/
tiran commentedon Sep 1, 2016
A GEN_RID is an OID plus some opaque data. It's up to an application to understand an OID and interpret its data. The value of a GEN_RID can be as simple as an int or UTF-8 strings or as complex as a nested ASN.1 struct for Kerberos principals.
I have modified Lib/test/make_ssl_certs.py to include two GEN_RIDS:
[princ_name]
realm = EXP:0, GeneralString:KERBEROS.REALM
principal_name = EXP:1, SEQUENCE:principal_seq
[principal_seq]
name_type = EXP:0, INTEGER:1
name_string = EXP:1, SEQUENCE:principals
[principals]
princ1 = GeneralString:username
1.3.6.1.5.2.2 is the OID for Kerberos public key init (pkinit), used for e.g. FAST pre-auth and SmartCard authentication.
python-dev commentedon Sep 6, 2016
New changeset 9bbf0b31da48 by Christian Heimes in branch '3.5':
Issue bpo-27691: Fix ssl module's parsing of GEN_RID subject alternative name fields in X.509 certs.
https://hg.python.org/cpython/rev/9bbf0b31da48
New changeset 2b9af57af3e4 by Christian Heimes in branch 'default':
Issue bpo-27691: Fix ssl module's parsing of GEN_RID subject alternative name fields in X.509 certs.
https://hg.python.org/cpython/rev/2b9af57af3e4
New changeset 74805fd9e734 by Christian Heimes in branch '2.7':
Issue bpo-27691: Fix ssl module's parsing of GEN_RID subject alternative name fields in X.509 certs.
https://hg.python.org/cpython/rev/74805fd9e734