|
|
b9388a |
From f5549f8c760035bc15d88109dfd947e91c5bf1e9 Mon Sep 17 00:00:00 2001
|
|
|
b9388a |
From: Christina Fu <cfu@redhat.com>
|
|
|
b9388a |
Date: Mon, 7 Jun 2021 11:23:03 -0700
|
|
|
b9388a |
Subject: [PATCH] Bug1905374 restrict EE profile list and enrollment submission
|
|
|
b9388a |
per LDAP group without immediate issuance
|
|
|
b9388a |
|
|
|
b9388a |
It's always been the case by design that if authentication (auth.instance_id=X) is specified in a profile, then as long as a request passes both authentication and authorization (authz.Y) then the issuance would be granted.
|
|
|
b9388a |
In this patch, an option per profile is added to override such design and would require explicit agent approval even when both auth and authz passed.
|
|
|
b9388a |
|
|
|
b9388a |
This new option is auth.explicitApprovalRequired and the value is true
|
|
|
b9388a |
or false,with false being the default if not set.
|
|
|
b9388a |
|
|
|
b9388a |
An example configuration in a directory-based authentication profile
|
|
|
b9388a |
would have something like the following:
|
|
|
b9388a |
|
|
|
b9388a |
auth.instance_id=UserDirEnrollment
|
|
|
b9388a |
auth.explicitApprovalRequired=true
|
|
|
b9388a |
authz.acl=group=requestors
|
|
|
b9388a |
|
|
|
b9388a |
addressed https://bugzilla.redhat.com/show_bug.cgi?id=1905374
|
|
|
b9388a |
|
|
|
b9388a |
(cherry picked from commit 8e78a2b912e7c3bd015e4da1f1630d0f35145104)
|
|
|
b9388a |
---
|
|
|
b9388a |
.../src/com/netscape/certsrv/profile/IProfile.java | 2 ++
|
|
|
b9388a |
.../netscape/cms/profile/common/EnrollProfile.java | 21 +++++++++++++++++++--
|
|
|
b9388a |
.../netscape/cms/servlet/cert/CertProcessor.java | 6 +++++-
|
|
|
b9388a |
3 files changed, 26 insertions(+), 3 deletions(-)
|
|
|
b9388a |
|
|
|
b9388a |
diff --git a/base/common/src/com/netscape/certsrv/profile/IProfile.java b/base/common/src/com/netscape/certsrv/profile/IProfile.java
|
|
|
b9388a |
index b4605cf..e076232 100644
|
|
|
b9388a |
--- a/base/common/src/com/netscape/certsrv/profile/IProfile.java
|
|
|
b9388a |
+++ b/base/common/src/com/netscape/certsrv/profile/IProfile.java
|
|
|
b9388a |
@@ -424,6 +424,8 @@ public interface IProfile {
|
|
|
b9388a |
*/
|
|
|
b9388a |
public void submit(IAuthToken token, IRequest request)
|
|
|
b9388a |
throws EDeferException, EProfileException;
|
|
|
b9388a |
+ public void submit(IAuthToken token, IRequest request, boolean explicitApprovalRequired)
|
|
|
b9388a |
+ throws EDeferException, EProfileException;
|
|
|
b9388a |
|
|
|
b9388a |
public void setRenewal(boolean renewal);
|
|
|
b9388a |
|
|
|
b9388a |
diff --git a/base/server/cms/src/com/netscape/cms/profile/common/EnrollProfile.java b/base/server/cms/src/com/netscape/cms/profile/common/EnrollProfile.java
|
|
|
b9388a |
index b7fdb9e..afcfa0d 100644
|
|
|
b9388a |
--- a/base/server/cms/src/com/netscape/cms/profile/common/EnrollProfile.java
|
|
|
b9388a |
+++ b/base/server/cms/src/com/netscape/cms/profile/common/EnrollProfile.java
|
|
|
b9388a |
@@ -518,6 +518,10 @@ public abstract class EnrollProfile extends BasicProfile
|
|
|
b9388a |
*/
|
|
|
b9388a |
public void submit(IAuthToken token, IRequest request)
|
|
|
b9388a |
throws EDeferException, EProfileException {
|
|
|
b9388a |
+ submit(token, request, false);
|
|
|
b9388a |
+ }
|
|
|
b9388a |
+ public void submit(IAuthToken token, IRequest request, boolean explicitApprovalRequired)
|
|
|
b9388a |
+ throws EDeferException, EProfileException {
|
|
|
b9388a |
// Request Submission Logic:
|
|
|
b9388a |
//
|
|
|
b9388a |
// if (Authentication Failed) {
|
|
|
b9388a |
@@ -549,8 +553,21 @@ public abstract class EnrollProfile extends BasicProfile
|
|
|
b9388a |
CMS.debug(e);
|
|
|
b9388a |
}
|
|
|
b9388a |
|
|
|
b9388a |
- if (token == null){
|
|
|
b9388a |
- CMS.debug(method + " auth token is null; agent manual approval required;");
|
|
|
b9388a |
+ /*
|
|
|
b9388a |
+ * this is where we decide whether to let agent do manual approval
|
|
|
b9388a |
+ * or not
|
|
|
b9388a |
+ * If auth.instance_id is not set, then request automatically goes
|
|
|
b9388a |
+ * into queue for agent approval.
|
|
|
b9388a |
+ * If auth.explicitApprovalRequired is true, then the request goes into
|
|
|
b9388a |
+ * queue for agent approval even though auth and authz succeed.
|
|
|
b9388a |
+ */
|
|
|
b9388a |
+ if ((token == null) || (explicitApprovalRequired == true)){
|
|
|
b9388a |
+
|
|
|
b9388a |
+ if (token == null)
|
|
|
b9388a |
+ CMS.debug(method + " auth token is null; agent manual approval required;");
|
|
|
b9388a |
+ else
|
|
|
b9388a |
+ CMS.debug(method + "explicitApprovalRequired is true; agent manual approval required");
|
|
|
b9388a |
+
|
|
|
b9388a |
CMS.debug(method + " validating request");
|
|
|
b9388a |
validate(request);
|
|
|
b9388a |
try {
|
|
|
b9388a |
diff --git a/base/server/cms/src/com/netscape/cms/servlet/cert/CertProcessor.java b/base/server/cms/src/com/netscape/cms/servlet/cert/CertProcessor.java
|
|
|
b9388a |
index 6252e6e..b9eda7c 100644
|
|
|
b9388a |
--- a/base/server/cms/src/com/netscape/cms/servlet/cert/CertProcessor.java
|
|
|
b9388a |
+++ b/base/server/cms/src/com/netscape/cms/servlet/cert/CertProcessor.java
|
|
|
b9388a |
@@ -31,6 +31,7 @@ import com.netscape.certsrv.authentication.ExternalAuthToken;
|
|
|
b9388a |
import com.netscape.certsrv.authentication.IAuthToken;
|
|
|
b9388a |
import com.netscape.certsrv.base.EBaseException;
|
|
|
b9388a |
import com.netscape.certsrv.base.EPropertyNotFound;
|
|
|
b9388a |
+import com.netscape.certsrv.base.IConfigStore;
|
|
|
b9388a |
import com.netscape.certsrv.cert.CertEnrollmentRequest;
|
|
|
b9388a |
import com.netscape.certsrv.logging.ILogger;
|
|
|
b9388a |
import com.netscape.certsrv.logging.event.CertRequestProcessedEvent;
|
|
|
b9388a |
@@ -224,6 +225,9 @@ public class CertProcessor extends CAProcessor {
|
|
|
b9388a |
|
|
|
b9388a |
for (IRequest req : reqs) {
|
|
|
b9388a |
try {
|
|
|
b9388a |
+ IConfigStore profileConf = profile.getConfigStore().getSubStore("auth");
|
|
|
b9388a |
+ boolean explicitApprovalRequired = profileConf.getBoolean("explicitApprovalRequired", false);
|
|
|
b9388a |
+
|
|
|
b9388a |
// reset the "auditRequesterID"
|
|
|
b9388a |
auditRequesterID = auditRequesterID(req);
|
|
|
b9388a |
|
|
|
b9388a |
@@ -242,7 +246,7 @@ public class CertProcessor extends CAProcessor {
|
|
|
b9388a |
*/
|
|
|
b9388a |
|
|
|
b9388a |
CMS.debug("CertProcessor.submitRequest: calling profile submit");
|
|
|
b9388a |
- profile.submit(authToken, req);
|
|
|
b9388a |
+ profile.submit(authToken, req, explicitApprovalRequired);
|
|
|
b9388a |
req.setRequestStatus(RequestStatus.COMPLETE);
|
|
|
b9388a |
|
|
|
b9388a |
X509CertImpl x509cert = req.getExtDataInCert(IEnrollProfile.REQUEST_ISSUED_CERT);
|
|
|
b9388a |
--
|
|
|
b9388a |
1.8.3.1
|
|
|
b9388a |
|