summaryrefslogtreecommitdiffstats
path: root/ipalib/x509.py
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2012-03-26 07:11:41 -0400
committerRob Crittenden <rcritten@redhat.com>2012-03-26 20:29:26 -0400
commitbd440d515ed7cf769e357105becc5dbe6aa1beee (patch)
treebf9d3a5749ae016e07bceb5618026a92da10b698 /ipalib/x509.py
parentef21a286f0e4ed561be81bcc12c2432d8371fb3d (diff)
downloadfreeipa-bd440d515ed7cf769e357105becc5dbe6aa1beee.tar.gz
freeipa-bd440d515ed7cf769e357105becc5dbe6aa1beee.tar.xz
freeipa-bd440d515ed7cf769e357105becc5dbe6aa1beee.zip
Fix uses of O=REALM instead of the configured certificate subject base.
ticket 2521
Diffstat (limited to 'ipalib/x509.py')
-rw-r--r--ipalib/x509.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/ipalib/x509.py b/ipalib/x509.py
index 04e1b9479..1274673c3 100644
--- a/ipalib/x509.py
+++ b/ipalib/x509.py
@@ -42,15 +42,29 @@ from ipalib import api
from ipalib import _
from ipalib import util
from ipalib import errors
+from ipalib.dn import DN
PEM = 0
DER = 1
PEM_REGEX = re.compile(r'(?<=-----BEGIN CERTIFICATE-----).*?(?=-----END CERTIFICATE-----)', re.DOTALL)
-def valid_issuer(issuer, realm):
- return issuer in ('CN=%s Certificate Authority' % realm,
- 'CN=Certificate Authority,O=%s' % realm,)
+_subject_base = None
+
+def subject_base():
+ global _subject_base
+
+ if _subject_base is None:
+ config = api.Command['config_show']()['result']
+ _subject_base = DN(config['ipacertificatesubjectbase'][0])
+
+ return _subject_base
+
+def valid_issuer(issuer):
+ if api.env.ra_plugin == 'dogtag':
+ return DN(issuer) == DN(('CN', 'Certificate Authority'), subject_base())
+ else:
+ return DN(issuer) == DN(('CN', '%s Certificate Authority' % api.env.realm))
def strip_header(pem):
"""
@@ -209,7 +223,7 @@ def verify_cert_subject(ldap, hostname, dercert):
issuer = str(nsscert.issuer)
# Handle both supported forms of issuer, from selfsign and dogtag.
- if (not valid_issuer(issuer, api.env.realm)):
+ if (not valid_issuer(issuer)):
raise errors.CertificateOperationError(error=_('Issuer "%(issuer)s" does not match the expected issuer') % \
{'issuer' : issuer})