483b06
From 533f2539cbc8fe5b4bb748982a6cfee7d73416e6 Mon Sep 17 00:00:00 2001
483b06
From: Fraser Tweedale <ftweedal@redhat.com>
483b06
Date: Wed, 9 Aug 2017 12:55:57 +1000
483b06
Subject: [PATCH] Restore old version of caIPAserviceCert for upgrade only
483b06
483b06
The latest version of caIPAserviceCert profile includes a feature
483b06
that is not available before Dogtag 10.4, and this version of the
483b06
profile is intended for new installs only (otherwise, problems will
483b06
arise in topologies containing CA replicas at an earlier version).
483b06
But IPA versions before v4.2 did not use LDAP-based profiles, so the
483b06
new version of the profile gets imported when upgrading from
483b06
pre-v4.2 to v4.5 or later.
483b06
483b06
We do not yet have a proper version- and topology-aware profile
483b06
update mechanism, so to resolve this issue, ship the older version
483b06
of the profile alongside the newer version, and make sure we use the
483b06
older version when importing the profile in an upgrade context.
483b06
483b06
https://pagure.io/freeipa/issue/7097
483b06
483b06
Reviewed-By: Florence Blanc-Renaud <frenaud@redhat.com>
483b06
---
483b06
 install/share/profiles/Makefile.am                 |   1 +
483b06
 .../share/profiles/caIPAserviceCert.UPGRADE.cfg    | 109 +++++++++++++++++++++
483b06
 ipaserver/install/cainstance.py                    |  18 +++-
483b06
 3 files changed, 126 insertions(+), 2 deletions(-)
483b06
 create mode 100644 install/share/profiles/caIPAserviceCert.UPGRADE.cfg
483b06
483b06
diff --git a/install/share/profiles/Makefile.am b/install/share/profiles/Makefile.am
483b06
index 640ca0a4a54c574da57b62b2b3c23f6db78df2fb..7f188e3fcac2ad80558399015d49216caa32c14b 100644
483b06
--- a/install/share/profiles/Makefile.am
483b06
+++ b/install/share/profiles/Makefile.am
483b06
@@ -3,6 +3,7 @@ NULL =
483b06
 appdir = $(IPA_DATA_DIR)/profiles
483b06
 app_DATA =				\
483b06
 	caIPAserviceCert.cfg		\
483b06
+	caIPAserviceCert.UPGRADE.cfg	\
483b06
 	IECUserRoles.cfg		\
483b06
 	KDCs_PKINIT_Certs.cfg		\
483b06
 	$(NULL)
483b06
diff --git a/install/share/profiles/caIPAserviceCert.UPGRADE.cfg b/install/share/profiles/caIPAserviceCert.UPGRADE.cfg
483b06
new file mode 100644
483b06
index 0000000000000000000000000000000000000000..1efd2066b9f75b4e26c390932353f20141d800b9
483b06
--- /dev/null
483b06
+++ b/install/share/profiles/caIPAserviceCert.UPGRADE.cfg
483b06
@@ -0,0 +1,109 @@
483b06
+profileId=caIPAserviceCert
483b06
+classId=caEnrollImpl
483b06
+desc=This certificate profile is for enrolling server certificates with IPA-RA agent authentication.
483b06
+visible=false
483b06
+enable=true
483b06
+enableBy=admin
483b06
+auth.instance_id=raCertAuth
483b06
+name=IPA-RA Agent-Authenticated Server Certificate Enrollment
483b06
+input.list=i1,i2
483b06
+input.i1.class_id=certReqInputImpl
483b06
+input.i2.class_id=submitterInfoInputImpl
483b06
+output.list=o1
483b06
+output.o1.class_id=certOutputImpl
483b06
+policyset.list=serverCertSet
483b06
+policyset.serverCertSet.list=1,2,3,4,5,6,7,8,9,10,11
483b06
+policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl
483b06
+policyset.serverCertSet.1.constraint.name=Subject Name Constraint
483b06
+policyset.serverCertSet.1.constraint.params.pattern=CN=[^,]+,.+
483b06
+policyset.serverCertSet.1.constraint.params.accept=true
483b06
+policyset.serverCertSet.1.default.class_id=subjectNameDefaultImpl
483b06
+policyset.serverCertSet.1.default.name=Subject Name Default
483b06
+policyset.serverCertSet.1.default.params.name=CN=$$request.req_subject_name.cn$$, $SUBJECT_DN_O
483b06
+policyset.serverCertSet.2.constraint.class_id=validityConstraintImpl
483b06
+policyset.serverCertSet.2.constraint.name=Validity Constraint
483b06
+policyset.serverCertSet.2.constraint.params.range=740
483b06
+policyset.serverCertSet.2.constraint.params.notBeforeCheck=false
483b06
+policyset.serverCertSet.2.constraint.params.notAfterCheck=false
483b06
+policyset.serverCertSet.2.default.class_id=validityDefaultImpl
483b06
+policyset.serverCertSet.2.default.name=Validity Default
483b06
+policyset.serverCertSet.2.default.params.range=731
483b06
+policyset.serverCertSet.2.default.params.startTime=0
483b06
+policyset.serverCertSet.3.constraint.class_id=keyConstraintImpl
483b06
+policyset.serverCertSet.3.constraint.name=Key Constraint
483b06
+policyset.serverCertSet.3.constraint.params.keyType=RSA
483b06
+policyset.serverCertSet.3.constraint.params.keyParameters=1024,2048,3072,4096,8192
483b06
+policyset.serverCertSet.3.default.class_id=userKeyDefaultImpl
483b06
+policyset.serverCertSet.3.default.name=Key Default
483b06
+policyset.serverCertSet.4.constraint.class_id=noConstraintImpl
483b06
+policyset.serverCertSet.4.constraint.name=No Constraint
483b06
+policyset.serverCertSet.4.default.class_id=authorityKeyIdentifierExtDefaultImpl
483b06
+policyset.serverCertSet.4.default.name=Authority Key Identifier Default
483b06
+policyset.serverCertSet.5.constraint.class_id=noConstraintImpl
483b06
+policyset.serverCertSet.5.constraint.name=No Constraint
483b06
+policyset.serverCertSet.5.default.class_id=authInfoAccessExtDefaultImpl
483b06
+policyset.serverCertSet.5.default.name=AIA Extension Default
483b06
+policyset.serverCertSet.5.default.params.authInfoAccessADEnable_0=true
483b06
+policyset.serverCertSet.5.default.params.authInfoAccessADLocationType_0=URIName
483b06
+policyset.serverCertSet.5.default.params.authInfoAccessADLocation_0=http://$IPA_CA_RECORD.$DOMAIN/ca/ocsp
483b06
+policyset.serverCertSet.5.default.params.authInfoAccessADMethod_0=1.3.6.1.5.5.7.48.1
483b06
+policyset.serverCertSet.5.default.params.authInfoAccessCritical=false
483b06
+policyset.serverCertSet.5.default.params.authInfoAccessNumADs=1
483b06
+policyset.serverCertSet.6.constraint.class_id=keyUsageExtConstraintImpl
483b06
+policyset.serverCertSet.6.constraint.name=Key Usage Extension Constraint
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageCritical=true
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageDigitalSignature=true
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageNonRepudiation=true
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageDataEncipherment=true
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageKeyEncipherment=true
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageKeyAgreement=false
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageKeyCertSign=false
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageCrlSign=false
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageEncipherOnly=false
483b06
+policyset.serverCertSet.6.constraint.params.keyUsageDecipherOnly=false
483b06
+policyset.serverCertSet.6.default.class_id=keyUsageExtDefaultImpl
483b06
+policyset.serverCertSet.6.default.name=Key Usage Default
483b06
+policyset.serverCertSet.6.default.params.keyUsageCritical=true
483b06
+policyset.serverCertSet.6.default.params.keyUsageDigitalSignature=true
483b06
+policyset.serverCertSet.6.default.params.keyUsageNonRepudiation=true
483b06
+policyset.serverCertSet.6.default.params.keyUsageDataEncipherment=true
483b06
+policyset.serverCertSet.6.default.params.keyUsageKeyEncipherment=true
483b06
+policyset.serverCertSet.6.default.params.keyUsageKeyAgreement=false
483b06
+policyset.serverCertSet.6.default.params.keyUsageKeyCertSign=false
483b06
+policyset.serverCertSet.6.default.params.keyUsageCrlSign=false
483b06
+policyset.serverCertSet.6.default.params.keyUsageEncipherOnly=false
483b06
+policyset.serverCertSet.6.default.params.keyUsageDecipherOnly=false
483b06
+policyset.serverCertSet.7.constraint.class_id=noConstraintImpl
483b06
+policyset.serverCertSet.7.constraint.name=No Constraint
483b06
+policyset.serverCertSet.7.default.class_id=extendedKeyUsageExtDefaultImpl
483b06
+policyset.serverCertSet.7.default.name=Extended Key Usage Extension Default
483b06
+policyset.serverCertSet.7.default.params.exKeyUsageCritical=false
483b06
+policyset.serverCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2
483b06
+policyset.serverCertSet.8.constraint.class_id=signingAlgConstraintImpl
483b06
+policyset.serverCertSet.8.constraint.name=No Constraint
483b06
+policyset.serverCertSet.8.constraint.params.signingAlgsAllowed=SHA1withRSA,SHA256withRSA,SHA512withRSA,MD5withRSA,MD2withRSA,SHA1withDSA,SHA1withEC,SHA256withEC,SHA384withEC,SHA512withEC
483b06
+policyset.serverCertSet.8.default.class_id=signingAlgDefaultImpl
483b06
+policyset.serverCertSet.8.default.name=Signing Alg
483b06
+policyset.serverCertSet.8.default.params.signingAlg=-
483b06
+policyset.serverCertSet.9.constraint.class_id=noConstraintImpl
483b06
+policyset.serverCertSet.9.constraint.name=No Constraint
483b06
+policyset.serverCertSet.9.default.class_id=crlDistributionPointsExtDefaultImpl
483b06
+policyset.serverCertSet.9.default.name=CRL Distribution Points Extension Default
483b06
+policyset.serverCertSet.9.default.params.crlDistPointsCritical=false
483b06
+policyset.serverCertSet.9.default.params.crlDistPointsNum=1
483b06
+policyset.serverCertSet.9.default.params.crlDistPointsEnable_0=true
483b06
+policyset.serverCertSet.9.default.params.crlDistPointsIssuerName_0=$CRL_ISSUER
483b06
+policyset.serverCertSet.9.default.params.crlDistPointsIssuerType_0=DirectoryName
483b06
+policyset.serverCertSet.9.default.params.crlDistPointsPointName_0=http://$IPA_CA_RECORD.$DOMAIN/ipa/crl/MasterCRL.bin
483b06
+policyset.serverCertSet.9.default.params.crlDistPointsPointType_0=URIName
483b06
+policyset.serverCertSet.9.default.params.crlDistPointsReasons_0=
483b06
+policyset.serverCertSet.10.constraint.class_id=noConstraintImpl
483b06
+policyset.serverCertSet.10.constraint.name=No Constraint
483b06
+policyset.serverCertSet.10.default.class_id=subjectKeyIdentifierExtDefaultImpl
483b06
+policyset.serverCertSet.10.default.name=Subject Key Identifier Extension Default
483b06
+policyset.serverCertSet.10.default.params.critical=false
483b06
+policyset.serverCertSet.11.constraint.class_id=noConstraintImpl
483b06
+policyset.serverCertSet.11.constraint.name=No Constraint
483b06
+policyset.serverCertSet.11.default.class_id=userExtensionDefaultImpl
483b06
+policyset.serverCertSet.11.default.name=User Supplied Extension Default
483b06
+policyset.serverCertSet.11.default.params.userExtOID=2.5.29.17
483b06
diff --git a/ipaserver/install/cainstance.py b/ipaserver/install/cainstance.py
483b06
index b0e9e8757ec3e3c0d03ed930743ef5a1253b864a..62f79b28000b015edb66f4c39a270097ab3ed666 100644
483b06
--- a/ipaserver/install/cainstance.py
483b06
+++ b/ipaserver/install/cainstance.py
483b06
@@ -1568,8 +1568,22 @@ def __get_profile_config(profile_id):
483b06
         CRL_ISSUER='CN=Certificate Authority,o=ipaca',
483b06
         SUBJECT_DN_O=dsinstance.DsInstance().find_subject_base(),
483b06
     )
483b06
-    return ipautil.template_file(
483b06
-        '/usr/share/ipa/profiles/{}.cfg'.format(profile_id), sub_dict)
483b06
+
483b06
+    # To work around lack of proper profile upgrade system, we ship
483b06
+    # two versions of some profiles - one for new installs only, and
483b06
+    # the other for upgrading to LDAP-based profiles in an existing
483b06
+    # deployment.
483b06
+    #
483b06
+    # Select UPGRADE version if we are in the 'updates' API context
483b06
+    # and an upgrade-specific version of the profile exists.
483b06
+    #
483b06
+    profile_filename = '/usr/share/ipa/profiles/{}.cfg'.format(profile_id)
483b06
+    profile_upg_filename = \
483b06
+        '/usr/share/ipa/profiles/{}.UPGRADE.cfg'.format(profile_id)
483b06
+    if api.env.context == 'updates' and os.path.isfile(profile_upg_filename):
483b06
+        profile_filename = profile_upg_filename
483b06
+
483b06
+    return ipautil.template_file(profile_filename, sub_dict)
483b06
 
483b06
 def import_included_profiles():
483b06
     server_id = installutils.realm_to_serverid(api.env.realm)
483b06
-- 
483b06
2.9.4
483b06