From c1c4cfd8a6815a88123956a45fa10e3446dae01e Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" Date: Wed, 5 Aug 2015 19:10:19 +0200 Subject: [PATCH] Fixed missing cert request hostname and address. The CA services have been modified to inject request hostname and address into the certificate request object such that they will be stored in the database. This fixes the problem with requests submitted either via the UI or the CLI. An unused method in CertRequestResource has been removed. Some debug messages have been cleaned as well. https://fedorahosted.org/pki/ticket/1535 --- .../server/ca/rest/CertRequestService.java | 15 +++++-------- .../certsrv/cert/CertEnrollmentRequest.java | 8 +++++++ .../netscape/certsrv/cert/CertRequestResource.java | 10 --------- .../servlet/cert/CertEnrollmentRequestFactory.java | 14 ++++++++---- .../netscape/cms/servlet/cert/CertProcessor.java | 25 +++++++++++----------- .../cms/servlet/cert/EnrollmentProcessor.java | 12 +++++------ .../cms/servlet/processors/CAProcessor.java | 9 ++++---- 7 files changed, 46 insertions(+), 47 deletions(-) diff --git a/base/ca/src/org/dogtagpki/server/ca/rest/CertRequestService.java b/base/ca/src/org/dogtagpki/server/ca/rest/CertRequestService.java index a11cb470b21240127b405a694c92fc665dd9ed69..95f1f4c20086ddb45846f65b1db157bff238708a 100644 --- a/base/ca/src/org/dogtagpki/server/ca/rest/CertRequestService.java +++ b/base/ca/src/org/dogtagpki/server/ca/rest/CertRequestService.java @@ -27,7 +27,6 @@ import javax.servlet.http.HttpServletRequest; import javax.ws.rs.PathParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @@ -113,13 +112,6 @@ public class CertRequestService extends PKIService implements CertRequestResourc return createOKResponse(info); } - // Enrollment - used to test integration with a browser - @Override - public Response enrollCert(MultivaluedMap form) { - CertEnrollmentRequest data = new CertEnrollmentRequest(form); - return enrollCert(data); - } - @Override public Response enrollCert(CertEnrollmentRequest data) { @@ -128,6 +120,9 @@ public class CertRequestService extends PKIService implements CertRequestResourc throw new BadRequestException("Unable to create enrollment reequest: Invalid input data"); } + data.setRemoteHost(servletRequest.getRemoteHost()); + data.setRemoteAddr(servletRequest.getRemoteAddr()); + CertRequestDAO dao = new CertRequestDAO(); CertRequestInfos infos; @@ -143,10 +138,10 @@ public class CertRequestService extends PKIService implements CertRequestResourc CMS.debug("enrollCert: bad request data: " + e); throw new BadRequestException(e.toString()); } catch (EBaseException e) { - throw new PKIException(e.toString()); + throw new PKIException(e); } catch (Exception e) { CMS.debug(e); - throw new PKIException(e.toString()); + throw new PKIException(e); } // this will return an error code of 200, instead of 201 diff --git a/base/common/src/com/netscape/certsrv/cert/CertEnrollmentRequest.java b/base/common/src/com/netscape/certsrv/cert/CertEnrollmentRequest.java index 72aad330fecc63290c9e6d82e576971df499028e..d55b5b4e1007516fef8fa6f9820c44d522f4bde4 100644 --- a/base/common/src/com/netscape/certsrv/cert/CertEnrollmentRequest.java +++ b/base/common/src/com/netscape/certsrv/cert/CertEnrollmentRequest.java @@ -275,6 +275,14 @@ public class CertEnrollmentRequest { return sw.toString(); } + public String toString() { + try { + return toXML(); + } catch (JAXBException e) { + throw new RuntimeException(e); + } + } + @Override public int hashCode() { final int prime = 31; diff --git a/base/common/src/com/netscape/certsrv/cert/CertRequestResource.java b/base/common/src/com/netscape/certsrv/cert/CertRequestResource.java index b9ae1f1fe0592bbcc4a7b64baa2ef4fecbe52749..7f08b4af392e3e56419abdad7cb66bd191688222 100644 --- a/base/common/src/com/netscape/certsrv/cert/CertRequestResource.java +++ b/base/common/src/com/netscape/certsrv/cert/CertRequestResource.java @@ -17,14 +17,11 @@ // --- END COPYRIGHT BLOCK --- package com.netscape.certsrv.cert; -import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import org.jboss.resteasy.annotations.ClientResponseType; @@ -37,13 +34,6 @@ import com.netscape.certsrv.request.RequestId; @Path("") public interface CertRequestResource { - // Enrollment - used to test integration with a browser - @POST - @Path("certrequests") - @ClientResponseType(entityType=CertRequestInfos.class) - @Consumes({ MediaType.APPLICATION_FORM_URLENCODED }) - public Response enrollCert(MultivaluedMap form); - @POST @Path("certrequests") @ClientResponseType(entityType=CertRequestInfos.class) diff --git a/base/server/cms/src/com/netscape/cms/servlet/cert/CertEnrollmentRequestFactory.java b/base/server/cms/src/com/netscape/cms/servlet/cert/CertEnrollmentRequestFactory.java index 7a26e8e21482bc066184305d56eb953e25903696..d74a285f391ecf4fdbafe219d02f20e86ccf1848 100644 --- a/base/server/cms/src/com/netscape/cms/servlet/cert/CertEnrollmentRequestFactory.java +++ b/base/server/cms/src/com/netscape/cms/servlet/cert/CertEnrollmentRequestFactory.java @@ -20,6 +20,8 @@ package com.netscape.cms.servlet.cert; import java.util.Enumeration; import java.util.Locale; +import javax.servlet.http.HttpServletRequest; + import com.netscape.certsrv.base.IArgBlock; import com.netscape.certsrv.cert.CertEnrollmentRequest; import com.netscape.certsrv.profile.EProfileException; @@ -35,18 +37,22 @@ public class CertEnrollmentRequestFactory { throws EProfileException { IArgBlock params = cmsReq.getHttpParams(); - CertEnrollmentRequest ret = new CertEnrollmentRequest(); - ret.setProfileId(profile.getId()); + CertEnrollmentRequest request = new CertEnrollmentRequest(); + request.setProfileId(profile.getId()); // populate profile inputs Enumeration inputIds = profile.getProfileInputIds(); while (inputIds.hasMoreElements()) { IProfileInput input = profile.getProfileInput(inputIds.nextElement()); ProfileInput addInput = ProfileInputFactory.create(input, params, locale); - ret.addInput(addInput); + request.addInput(addInput); } - return ret; + HttpServletRequest httpRequest = cmsReq.getHttpReq(); + request.setRemoteHost(httpRequest.getRemoteHost()); + request.setRemoteAddr(httpRequest.getRemoteAddr()); + + return request; } } 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 index 4cd54a25719bcd82728ef803f225bac481211584..f1a147eb475a8a1378cac829dcaee765ab2c3e70 100644 --- a/base/server/cms/src/com/netscape/cms/servlet/cert/CertProcessor.java +++ b/base/server/cms/src/com/netscape/cms/servlet/cert/CertProcessor.java @@ -172,13 +172,14 @@ public class CertProcessor extends CAProcessor { auditRequesterID = auditRequesterID(req); // print request debug + CMS.debug("CertProcessor: Request:"); if (req != null) { Enumeration reqKeys = req.getExtDataKeys(); while (reqKeys.hasMoreElements()) { String reqKey = reqKeys.nextElement(); String reqVal = req.getExtDataInString(reqKey); if (reqVal != null) { - CMS.debug("CertRequestSubmitter: key=$request." + reqKey + "$ value=" + reqVal); + CMS.debug("CertProcessor: - " + reqKey + ": " + reqVal); } } } @@ -213,7 +214,7 @@ public class CertProcessor extends CAProcessor { notify.notify(req); } - CMS.debug("CertRequestSubmitter: submit " + e.toString()); + CMS.debug("CertProcessor: submit " + e); errorCode = "2"; errorReason = CMS.getUserMessage(locale, "CMS_PROFILE_DEFERRED", e.toString()); @@ -223,7 +224,7 @@ public class CertProcessor extends CAProcessor { } catch (ERejectException e) { // return error to the user req.setRequestStatus(RequestStatus.REJECTED); - CMS.debug("CertRequestSubmitter: submit " + e.toString()); + CMS.debug("CertProcessor: submit " + e); errorCode = "3"; errorReason = CMS.getUserMessage(locale, "CMS_PROFILE_REJECTED", e.toString()); @@ -239,8 +240,8 @@ public class CertProcessor extends CAProcessor { audit(auditMessage); } catch (Throwable e) { // return error to the user - e.printStackTrace(); - CMS.debug("CertRequestSubmitter: submit " + e.toString()); + CMS.debug(e); + CMS.debug("CertProcessor: submit " + e); errorCode = "1"; errorReason = CMS.getUserMessage(locale, "CMS_INTERNAL_ERROR"); auditMessage = CMS.getLogMessage( @@ -261,8 +262,8 @@ public class CertProcessor extends CAProcessor { profile.getRequestQueue().updateRequest(req); } } catch (EBaseException e) { - e.printStackTrace(); - CMS.debug("CertRequestSubmitter: updateRequest " + e.toString()); + CMS.debug(e); + CMS.debug("CertProcessor: updateRequest " + e); } } return errorCode; @@ -312,7 +313,7 @@ public class CertProcessor extends CAProcessor { } if (fromRA) { - CMS.debug("CertRequestSubmitter: request from RA: " + uid); + CMS.debug("CertProcessor: request from RA: " + uid); req.setExtData(ARG_REQUEST_OWNER, uid); } @@ -326,18 +327,18 @@ public class CertProcessor extends CAProcessor { if (setId == null) { // no profile set found - CMS.debug("CertRequestSubmitter: no profile policy set found"); + CMS.debug("CertProcessor: no profile policy set found"); throw new EBaseException(CMS.getUserMessage(locale, "CMS_PROFILE_NO_POLICY_SET_FOUND")); } - CMS.debug("CertRequestSubmitter profileSetid=" + setId); + CMS.debug("CertProcessor: profileSetid=" + setId); req.setExtData(ARG_PROFILE_SET_ID, setId); req.setExtData(ARG_PROFILE_REMOTE_HOST, data.getRemoteHost()); req.setExtData(ARG_PROFILE_REMOTE_ADDR, data.getRemoteAddr()); - CMS.debug("CertRequestSubmitter: request " + req.getRequestId().toString()); + CMS.debug("CertProcessor: request " + req.getRequestId()); - CMS.debug("CertRequestSubmitter: populating request inputs"); + CMS.debug("CertProcessor: populating request inputs"); // give authenticator a chance to populate the request if (authenticator != null) { authenticator.populate(authToken, req); diff --git a/base/server/cms/src/com/netscape/cms/servlet/cert/EnrollmentProcessor.java b/base/server/cms/src/com/netscape/cms/servlet/cert/EnrollmentProcessor.java index 8d9d05cb7676f012eed8ef199f4e65f34d5e6ebe..960f997cd4badd18bdd25393e9175fc935d52edb 100644 --- a/base/server/cms/src/com/netscape/cms/servlet/cert/EnrollmentProcessor.java +++ b/base/server/cms/src/com/netscape/cms/servlet/cert/EnrollmentProcessor.java @@ -127,13 +127,13 @@ public class EnrollmentProcessor extends CertProcessor { printParameterValues(params); } - CMS.debug("EnrollmentSubmitter: isRenewal false"); + CMS.debug("EnrollmentProcessor: isRenewal false"); startTiming("enrollment"); // if we did not configure profileId in xml file, // then accept the user-provided one String profileId = (this.profileID == null) ? data.getProfileId() : this.profileID; - CMS.debug("EnrollmentSubmitter: profileId " + profileId); + CMS.debug("EnrollmentProcessor: profileId " + profileId); IProfile profile = ps.getProfile(profileId); if (profile == null) { @@ -141,17 +141,17 @@ public class EnrollmentProcessor extends CertProcessor { throw new BadRequestDataException(CMS.getUserMessage(locale, "CMS_PROFILE_NOT_FOUND", CMSTemplate.escapeJavaScriptStringHTML(profileId))); } if (!ps.isProfileEnable(profileId)) { - CMS.debug("EnrollmentSubmitter: Profile " + profileId + " not enabled"); + CMS.debug("EnrollmentProcessor: Profile " + profileId + " not enabled"); throw new BadRequestDataException("Profile " + profileId + " not enabled"); } IProfileContext ctx = profile.createContext(); - CMS.debug("EnrollmentSubmitter: set Inputs into profile Context"); + CMS.debug("EnrollmentProcessor: set Inputs into profile Context"); setInputsIntoContext(data, profile, ctx); IProfileAuthenticator authenticator = profile.getAuthenticator(); if (authenticator != null) { - CMS.debug("EnrollmentSubmitter: authenticator " + authenticator.getName() + " found"); + CMS.debug("EnrollmentProcessor: authenticator " + authenticator.getName() + " found"); setCredentialsIntoContext(request, authenticator, ctx); } @@ -160,7 +160,7 @@ public class EnrollmentProcessor extends CertProcessor { SessionContext context = SessionContext.getContext(); context.put("profileContext", ctx); context.put("sslClientCertProvider", new SSLClientCertProvider(request)); - CMS.debug("EnrollmentSubmitter: set sslClientCertProvider"); + CMS.debug("EnrollmentProcessor: set sslClientCertProvider"); // before creating the request, authenticate the request IAuthToken authToken = authenticate(request, null, authenticator, context, false); diff --git a/base/server/cms/src/com/netscape/cms/servlet/processors/CAProcessor.java b/base/server/cms/src/com/netscape/cms/servlet/processors/CAProcessor.java index 28b1b5130901297ad6eac199f32f5de588bee94d..b9af84bc9b5b878f895707c266b1df1fa5b1e26f 100644 --- a/base/server/cms/src/com/netscape/cms/servlet/processors/CAProcessor.java +++ b/base/server/cms/src/com/netscape/cms/servlet/processors/CAProcessor.java @@ -257,7 +257,8 @@ public class CAProcessor extends Processor { } protected void printParameterValues(HashMap data) { - CMS.debug("Start of CertProcessor Input Parameters"); + + CMS.debug("CAProcessor: Input Parameters:"); for (Entry entry : data.entrySet()) { String paramName = entry.getKey(); @@ -280,13 +281,11 @@ public class CAProcessor extends Processor { paramName.equalsIgnoreCase("pwd") || paramName.equalsIgnoreCase("pwdagain") || paramName.equalsIgnoreCase("uPasswd")) { - CMS.debug("CertProcessor Input Parameter " + paramName + "='(sensitive)'"); + CMS.debug("CAProcessor: - " + paramName + ": (sensitive)"); } else { - CMS.debug("CertProcessor Input Parameter " + paramName + "='" + entry.getValue() + "'"); + CMS.debug("CAProcessor: - " + paramName + ": " + entry.getValue()); } } - - CMS.debug("End of CertProcessor Input Parameters"); } /** -- 2.4.3