Currently the base profiles (ex. IECUserRoles) use an http route as opposed to an https route for the definition of the Authority Information Access (OCSP), and it would be nice to have this default to https as a best practice and to minimize replay attacks.
The default profiles provide an OCSP url of type http
Authority Information Access: OCSP - URI:http://ipa-ca.dev.local/ca/ocsp
The default profiles should define OCSP and CRL uris with https
Authority Information Access: OCSP - URI:https://ipa-ca.dev.local/ca/ocsp
(freeipa container)
ipa-server-4.12.2-6.el9.x86_64 ipa-client-4.12.2-6.el9.x86_64 389-ds-base-2.5.2-2.el9.x86_64 krb5-server-1.21.1-4.el9.x86_64
Example PEMs for root and user certificate generated with a default install and default IECUserRoles profile
policyset.serverCertSet.5.constraint.class_id=noConstraintImpl policyset.serverCertSet.5.constraint.name=No Constraint policyset.serverCertSet.5.default.class_id=authInfoAccessExtDefaultImpl policyset.serverCertSet.5.default.name=AIA Extension Default policyset.serverCertSet.5.default.params.authInfoAccessADEnable_0=true policyset.serverCertSet.5.default.params.authInfoAccessADLocationType_0=URIName policyset.serverCertSet.5.default.params.authInfoAccessADLocation_0=http://ipa-ca.dev.local/ca/ocsp policyset.serverCertSet.5.default.params.authInfoAccessADMethod_0=1.3.6.1.5.5.7.48.1 policyset.serverCertSet.5.default.params.authInfoAccessCritical=false policyset.serverCertSet.5.default.params.authInfoAccessNumADs=1 policyset.serverCertSet.9.constraint.name=No Constraint policyset.serverCertSet.9.default.class_id=crlDistributionPointsExtDefaultImpl policyset.serverCertSet.9.default.name=CRL Distribution Points Extension Default policyset.serverCertSet.9.default.params.crlDistPointsCritical=false policyset.serverCertSet.9.default.params.crlDistPointsEnable_0=true policyset.serverCertSet.9.default.params.crlDistPointsIssuerName_0=CN=Certificate Authority,o=ipaca policyset.serverCertSet.9.default.params.crlDistPointsIssuerType_0=DirectoryName policyset.serverCertSet.9.default.params.crlDistPointsNum=1 policyset.serverCertSet.9.default.params.crlDistPointsPointName_0=http://ipa-ca.dev.local/ipa/crl/MasterCRL.bin policyset.serverCertSet.9.default.params.crlDistPointsPointType_0=URIName policyset.serverCertSet.9.default.params.crlDistPointsReasons_0=
Certificate: Data: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: sha256WithRSAEncryption Issuer: O=DEV.LOCAL, CN=Certificate Authority Validity Not Before: Dec 29 23:41:15 2024 GMT Not After : Dec 19 23:41:15 2026 GMT Subject: O=DEV.LOCAL, CN=OCSP Subsystem Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:e0:98:fd:78:d9:4c:7f:02:82:a7:17:4f:b0:d0: ae:88:b1:d6:e8:dc:16:ec:8d:4a:ab:fd:d2:c6:67: 52:de:bd:72:6e:87:77:bc:95:f1:8f:0a:8c:e4:dc: fa:09:37:aa:46:7b:09:06:6a:b8:68:d2:d7:22:8b: 85:08:bf:61:cb:50:1b:60:15:77:fe:9b:95:d9:94: 80:2b:6f:3c:7f:4b:03:09:63:c9:df:60:84:bd:ca: d0:8c:6d:88:71:14:bc:71:8f:b3:be:23:3e:b6:d8: 7b:c3:76:0e:3f:1a:25:3c:39:22:49:ae:3e:7f:c7: 2c:ba:5e:4f:04:a0:11:13:32:89:5b:ff:a2:55:e6: 8f:05:50:25:8a:01:2b:25:68:8c:c5:01:5f:ac:9f: 59:ac:a3:1d:6e:2e:0b:79:ef:14:d7:7d:d6:02:ba: 10:0c:08:42:99:85:72:57:c0:e7:17:d8:8e:ea:95: 68:c9:82:31:64:d5:2f:cc:6c:ec:55:a4:03:7f:21: 97:62:83:c6:f4:67:df:21:19:42:23:5a:e6:28:aa: 19:15:ca:06:5c:e4:6a:d7:4d:a7:c7:7b:d9:44:d2: 0d:cf:be:0d:7b:56:ba:7e:17:a4:69:ab:b8:ae:f8: 48:2b:77:a5:c4:51:08:c3:dc:d1:8d:df:3d:52:9c: 62:8d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: 6A:74:DE:C5:3B:9D:CC:AC:8F:83:B6:7C:8B:A3:4A:F6:0D:88:DE:AF Authority Information Access: OCSP - URI:http://ipa-ca.dev.local/ca/ocsp X509v3 Extended Key Usage: OCSP Signing OCSP No Check: Signature Algorithm: sha256WithRSAEncryption Signature Value: 62:d9:33:ea:97:7a:af:3a:ad:eb:c0:1b:b1:22:42:05:6e:e4: 9b:83:d9:7b:ff:36:8f:b4:44:54:dd:48:32:5d:61:82:70:67: a8:2a:ed:cd:2c:2a:95:b2:14:5f:a1:2d:fc:52:05:0e:c3:d4: 3b:c4:21:b9:0e:06:20:8e:21:de:e8:2d:43:f5:1d:1c:b7:4d: 8b:0d:5b:dc:bd:5f:8c:b0:2b:ba:7d:13:0e:fd:92:45:e6:64: 2b:4a:09:c6:9f:58:b2:e0:45:50:8a:d1:04:7f:2f:36:c8:05: 62:7c:bb:11:14:fb:7b:c4:c6:04:bc:64:d2:5a:a5:f4:a2:f8: 31:8f:4d:d1:9d:a3:9e:10:0d:b4:63:cc:30:c1:ef:73:50:12: f6:87:67:71:6c:b1:ab:8f:70:fe:d0:10:53:b1:2e:16:5e:9a: 9d:53:52:d5:34:77:f6:d9:94:86:b8:09:62:52:6c:40:23:1f: 38:ad:99:10:f9:53:71:3e:df:2c:a0:61:ed:61:28:96:e6:f1: 2d:1c:75:a1:a2:ef:3c:a7:7e:8a:35:a9:56:85:8e:bc:87:56: d0:e0:a9:87:46:ca:9c:af:f7:7c:d9:92:ed:66:8f:ff:df:fd: 4e:65:1f:ae:b7:4d:db:02:34:a9:a4:24:3e:55:a2:a5:18:ca: 12:66:91:32:25:2c:08:2e:18:da:7a:9d:86:a3:ab:f7:51:32: da:fb:6b:ca:1b:01:05:d1:f9:04:91:31:11:c2:08:4d:35:1e: 2f:24:fc:97:fa:4d:48:a4:65:77:a0:49:a7:bf:d8:c1:15:59: 99:49:92:4c:15:59:d7:36:cb:5d:c0:7f:49:d5:09:5e:b0:b2: c1:4f:11:5e:a3:42:7a:44:37:ea:83:52:49:fd:46:0a:c0:ae: cb:27:d3:9e:3c:c3:be:3e:ed:aa:a4:7e:b5:01:72:b1:5f:10: f2:72:2b:ff:ce:b3:21:6a:4d:bd:a2:62:3c:03:ae:b5:f7:91: 8c:88:50:5c:82:ee -----BEGIN CERTIFICATE----- MIID5DCCAkygAwIBAgIBAjANBgkqhkiG9w0BAQsFADA0MRIwEAYDVQQKDAlERVYu TE9DQUwxHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0yNDEyMjky MzQxMTVaFw0yNjEyMTkyMzQxMTVaMC0xEjAQBgNVBAoMCURFVi5MT0NBTDEXMBUG A1UEAwwOT0NTUCBTdWJzeXN0ZW0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDgmP142Ux/AoKnF0+w0K6Isdbo3BbsjUqr/dLGZ1LevXJuh3e8lfGPCozk 3PoJN6pGewkGarho0tcii4UIv2HLUBtgFXf+m5XZlIArbzx/SwMJY8nfYIS9ytCM bYhxFLxxj7O+Iz622HvDdg4/GiU8OSJJrj5/xyy6Xk8EoBETMolb/6JV5o8FUCWK ASslaIzFAV+sn1msox1uLgt57xTXfdYCuhAMCEKZhXJXwOcX2I7qlWjJgjFk1S/M bOxVpAN/IZdig8b0Z98hGUIjWuYoqhkVygZc5GrXTafHe9lE0g3Pvg17Vrp+F6Rp q7iu+Egrd6XEUQjD3NGN3z1SnGKNAgMBAAGjgYcwgYQwHwYDVR0jBBgwFoAUanTe xTudzKyPg7Z8i6NK9g2I3q8wOwYIKwYBBQUHAQEELzAtMCsGCCsGAQUFBzABhh9o dHRwOi8vaXBhLWNhLmRldi5sb2NhbC9jYS9vY3NwMBMGA1UdJQQMMAoGCCsGAQUF BwMJMA8GCSsGAQUFBzABBQQCBQAwDQYJKoZIhvcNAQELBQADggGBAGLZM+qXeq86 revAG7EiQgVu5JuD2Xv/No+0RFTdSDJdYYJwZ6gq7c0sKpWyFF+hLfxSBQ7D1DvE IbkOBiCOId7oLUP1HRy3TYsNW9y9X4ywK7p9Ew79kkXmZCtKCcafWLLgRVCK0QR/ LzbIBWJ8uxEU+3vExgS8ZNJapfSi+DGPTdGdo54QDbRjzDDB73NQEvaHZ3FssauP cP7QEFOxLhZemp1TUtU0d/bZlIa4CWJSbEAjHzitmRD5U3E+3yygYe1hKJbm8S0c daGi7zynfoo1qVaFjryHVtDgqYdGypyv93zZku1mj//f/U5lH663TdsCNKmkJD5V oqUYyhJmkTIlLAguGNp6nYajq/dRMtr7a8obAQXR+QSRMRHCCE01Hi8k/Jf6TUik ZXegSae/2MEVWZlJkkwVWdc2y13Af0nVCV6wssFPEV6jQnpEN+qDUkn9RgrArssn 0548w74+7aqkfrUBcrFfEPJyK//OsyFqTb2iYjwDrrX3kYyIUFyC7g== -----END CERTIFICATE-----
Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: O=DEV.LOCAL, CN=Certificate Authority Validity Not Before: Dec 29 23:41:09 2024 GMT Not After : Dec 29 23:41:09 2044 GMT Subject: O=DEV.LOCAL, CN=Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (3072 bit) Modulus: 00:bb:4b:c5:78:14:4e:17:e4:8c:69:53:75:ad:a2: 20:5e:78:fa:88:60:ad:09:0d:39:cd:25:1d:90:e5: e6:8c:fe:f6:06:35:f0:c0:84:7b:ca:cc:3a:e8:59: 5f:58:19:0b:53:e3:ff:1d:7d:9e:25:03:4d:e3:46: 3a:a8:9c:e7:af:7e:47:61:5f:40:10:d8:7b:bc:81: f0:45:2a:a6:81:48:cf:1c:f0:6f:d1:95:47:12:82: 8a:3d:9a:66:15:23:e0:d5:0f:c5:65:87:a2:d1:6d: 7c:11:1d:82:71:5c:b6:b9:8f:33:cb:da:87:d1:32: ce:09:f9:7c:01:9a:df:29:72:cf:90:c3:14:8b:3c: 53:e8:6f:28:04:8a:59:88:d0:a9:cd:a0:58:a8:a9: 83:9d:e4:0c:43:67:e3:02:80:d5:82:12:37:ea:2a: cd:95:06:11:84:0e:fe:bc:db:3e:58:b1:2a:82:40: 0e:ea:94:63:8d:0d:a8:4d:5d:86:92:97:54:28:32: 6e:35:d7:1e:66:02:50:e6:e1:7b:bd:4e:a0:e9:23: a4:a4:6a:7f:af:59:13:c7:a5:f3:ba:84:1a:ad:f0: be:d0:f0:58:e1:23:eb:84:c4:2d:39:86:b1:88:ad: 10:a1:bb:ba:9c:c2:b8:7d:7e:b0:bd:c9:e8:a7:52: f1:31:9c:32:30:66:f5:a0:75:e2:53:ab:20:22:2a: 40:3f:4c:af:86:2d:38:e1:5c:40:ab:c3:52:3a:94: 20:da:e2:ce:be:c1:00:90:7f:cf:3b:1a:40:46:b7: 25:24:ac:7e:b3:a8:f7:6c:de:8c:49:85:9e:4e:43: a6:20:7d:02:35:a1:a7:8f:b3:36:94:4e:19:a4:b0: e1:ed:25:96:11:30:f4:23:28:7f:6d:5e:e0:6d:29: 1f:0e:43:d6:21:f8:4f:02:6b:38:93:ee:45:93:09: 88:8f:93:3d:4c:69:9f:a9:f6:aa:a5:91:e6:18:0e: 0c:4e:79:21:4b:00:1f:0d:6d:41 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 6A:74:DE:C5:3B:9D:CC:AC:8F:83:B6:7C:8B:A3:4A:F6:0D:88:DE:AF X509v3 Authority Key Identifier: 6A:74:DE:C5:3B:9D:CC:AC:8F:83:B6:7C:8B:A3:4A:F6:0D:88:DE:AF X509v3 Basic Constraints: critical CA:TRUE X509v3 Key Usage: critical Digital Signature, Non Repudiation, Certificate Sign, CRL Sign Signature Algorithm: sha256WithRSAEncryption Signature Value: 8e:93:ad:6f:a7:ce:35:bd:24:80:6c:eb:fb:1d:8d:dd:6f:11: 72:81:c9:0a:12:b4:1c:09:c3:84:ba:ed:82:78:c1:60:b9:3d: 79:3b:21:46:68:0e:9e:04:e3:9e:0b:09:e2:b7:5c:85:fe:c2: 10:b5:21:05:ff:8e:d7:57:37:df:d1:b2:d4:fe:68:c0:63:6a: 4e:79:70:c9:90:f9:ac:61:eb:1c:c6:a1:78:de:8e:49:48:04: 39:7c:97:37:93:2b:60:9e:bd:38:bd:e1:25:f6:13:e1:9b:8a: 4b:01:fa:82:37:d5:d8:4a:1e:90:ea:72:99:ff:6f:e1:ea:79: 45:ec:73:6a:48:47:b4:0e:bb:de:a0:20:f5:f4:8c:6a:c0:bb: 14:7e:6c:c1:d6:ef:a9:63:40:d2:cd:61:11:5f:ee:6b:ce:2a: 28:57:58:7a:ac:22:c3:8a:4e:13:6b:da:e7:31:47:11:c3:32: 1c:49:8d:12:71:4d:b7:4f:c0:b7:94:34:09:0e:58:8a:7a:8d: 87:e9:b1:27:63:cf:2b:7c:a6:76:db:5b:a6:d7:e0:3f:20:a7: d3:ac:1d:05:a6:34:e3:27:33:76:7b:f2:1c:c5:c6:7a:95:ef: 31:33:e8:b3:f8:ff:14:03:12:b7:ba:79:91:4c:c9:ed:b7:fc: 44:9d:5e:d6:45:49:12:7d:87:99:cb:6f:d6:77:7f:a4:a6:04: 89:1b:e4:69:ad:92:d1:2c:9b:58:be:16:5e:f1:fc:fa:03:38: be:2d:8b:fe:17:a9:1c:8a:9b:29:d2:17:33:c2:e9:da:3e:65: dc:9e:ee:ca:20:c7:c3:2d:c3:3a:46:be:98:0e:f7:1a:ad:59: cd:7c:5a:6b:0e:0d:e7:78:22:aa:33:c7:bf:c3:d2:5f:70:b5: a3:b7:04:25:55:bb:ff:d8:76:28:f0:87:c9:a8:f3:53:59:3b: 92:b3:24:eb:34:83:d3:94:13:ce:45:64:4a:12:4b:c4:f6:d8: 51:67:38:14:5d:f7 -----BEGIN CERTIFICATE----- MIIERjCCAq6gAwIBAgIBATANBgkqhkiG9w0BAQsFADA0MRIwEAYDVQQKDAlERVYu TE9DQUwxHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0yNDEyMjky MzQxMDlaFw00NDEyMjkyMzQxMDlaMDQxEjAQBgNVBAoMCURFVi5MT0NBTDEeMBwG A1UEAwwVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MIIBojANBgkqhkiG9w0BAQEFAAOC AY8AMIIBigKCAYEAu0vFeBROF+SMaVN1raIgXnj6iGCtCQ05zSUdkOXmjP72BjXw wIR7ysw66FlfWBkLU+P/HX2eJQNN40Y6qJznr35HYV9AENh7vIHwRSqmgUjPHPBv 0ZVHEoKKPZpmFSPg1Q/FZYei0W18ER2CcVy2uY8zy9qH0TLOCfl8AZrfKXLPkMMU izxT6G8oBIpZiNCpzaBYqKmDneQMQ2fjAoDVghI36irNlQYRhA7+vNs+WLEqgkAO 6pRjjQ2oTV2GkpdUKDJuNdceZgJQ5uF7vU6g6SOkpGp/r1kTx6XzuoQarfC+0PBY 4SPrhMQtOYaxiK0Qobu6nMK4fX6wvcnop1LxMZwyMGb1oHXiU6sgIipAP0yvhi04 4VxAq8NSOpQg2uLOvsEAkH/POxpARrclJKx+s6j3bN6MSYWeTkOmIH0CNaGnj7M2 lE4ZpLDh7SWWETD0Iyh/bV7gbSkfDkPWIfhPAms4k+5FkwmIj5M9TGmfqfaqpZHm GA4MTnkhSwAfDW1BAgMBAAGjYzBhMB0GA1UdDgQWBBRqdN7FO53MrI+DtnyLo0r2 DYjerzAfBgNVHSMEGDAWgBRqdN7FO53MrI+DtnyLo0r2DYjerzAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQsFAAOCAYEAjpOtb6fO Nb0kgGzr+x2N3W8RcoHJChK0HAnDhLrtgnjBYLk9eTshRmgOngTjngsJ4rdchf7C ELUhBf+O11c339Gy1P5owGNqTnlwyZD5rGHrHMaheN6OSUgEOXyXN5MrYJ69OL3h JfYT4ZuKSwH6gjfV2EoekOpymf9v4ep5RexzakhHtA673qAg9fSMasC7FH5swdbv qWNA0s1hEV/ua84qKFdYeqwiw4pOE2va5zFHEcMyHEmNEnFNt0/At5Q0CQ5YinqN h+mxJ2PPK3ymdttbptfgPyCn06wdBaY04yczdnvyHMXGepXvMTPos/j/FAMSt7p5 kUzJ7bf8RJ1e1kVJEn2Hmctv1nd/pKYEiRvkaa2S0SybWL4WXvH8+gM4vi2L/hep HIqbKdIXM8Lp2j5l3J7uyiDHwy3DOka+mA73Gq1ZzXxaaw4N53giqjPHv8PSX3C1 o7cEJVW7/9h2KPCHyajzU1k7krMk6zSD05QTzkVkShJLxPbYUWc4FF33 -----END CERTIFICATE-----
I believe you can already set things up without any modification of FreeIPA.
You can set up IPA deployment with a custom OCSP URL using --pki-config-override=/path/to/override.ini for ipa-server-install/ipa-replica-install/ipa-ca-install. See man page for ipa-server-install, pki_default.cfg, /usr/share/ipa/ipaca_customize.ini and /usr/share/ipa/ipaca_default.ini
--pki-config-override=/path/to/override.ini
ipa-server-install
ipa-replica-install
ipa-ca-install
pki_default.cfg
/usr/share/ipa/ipaca_customize.ini
/usr/share/ipa/ipaca_default.ini
[DEFAULT] ipa_ocsp_uri=https://ipa-ca.dev.local/ca/ocsp
I haven't tried that myself. We have a test ipatests/test_integration/test_pki_config_override.py that demonstrates how to use it. The override file cannot override certain options (called immutable keys in the code), mostly keys from ipaca_default.ini. However, ipa_ocsp_uri is not part of those immutable keys so it can be set through the override file.
ipatests/test_integration/test_pki_config_override.py
ipaca_default.ini
ipa_ocsp_uri
This value will be propagated to pki_default_ocsp_uri (which cannot be changed directly as it is the key in ipaca_default.ini) and will be used by the PKI to provision values in the certificate templates.
pki_default_ocsp_uri
Apart from that, /ca/ocsp endpoint is already accessible over HTTPS.
/ca/ocsp
Switching to HTTPS endpoint by default has another set of issues in itself. There is a bootstrapping problem: IPA CA OCSP endpoint accessible only over HTTPS makes an initial verification not possible without not trusting the CA who issued that HTTPS end-point's certificate. It could be the same CA, it could be a third-party CA, we cannot know in advance and it pretty much depends on the OCSP client behavior. HTTP is typically used for OCSP responders due to OCSP content being already signed by the CA.
PKI has support for OCSP nonce-based authentication which prevents replay attacks but it depends on the client side to trigger that. If we change an OCSP template to force use of OID 1.3.6.1.5.5.7.48.1.2, one needs to make it a mandatory (critical:TRUE) property or otherwise clients will be able to downgrade their requests and will be susceptible to the replay attacks as well. But how many clients do force OCSP nonce use?
Let me know if this is enough.
@abbra
Perfect, that will work in most situations and for my immediate needs
IPA CA OCSP endpoint accessible only over HTTPS makes an initial verification not possible without not trusting the CA who issued that HTTPS end-point's certificate. HTTP is typically used for OCSP responders due to OCSP content being already signed by the CA.
IPA CA OCSP endpoint accessible only over HTTPS makes an initial verification not possible without not trusting the CA who issued that HTTPS end-point's certificate.
HTTP is typically used for OCSP responders due to OCSP content being already signed by the CA.
Totally see your point here and this is a weird case of chicken or egg. My thinking is by needing to validate such certificate from the CA that the CA should already trusted, but there are cases where it might not be.
But how many clients do force OCSP nonce use?
not enough...but that is a question for another day
I appreciate the indepth response! The concerns behind my original issue were mainly from the bootstrapping phase (initial setup of PKI) of FreeIPA and you have covered that, you hit the nail on the head, thank you
Metadata Update from @threadcrux: - Issue close_status updated to: worksforme - Issue status updated to: Closed (was: Open)
Thanks again, that comment helped a lot. I'm fairly new to FreeIPA, I've been using all of it's subsystems for a while (Kerberos, BIND, 389) but have become tired of managing it through my own half baked ipa like system.
Based on your example configuration I was able to track down how the conf gets validated and injected aswell