summaryrefslogtreecommitdiffstats
path: root/base/ca/src
diff options
context:
space:
mode:
authorFraser Tweedale <ftweedal@redhat.com>2015-09-01 09:57:42 -0400
committerFraser Tweedale <ftweedal@redhat.com>2015-09-26 14:11:51 +1000
commit058f1cf1e657ba441f1fcd590fa4cec8ca96e5b0 (patch)
tree18109e536cf188bf387f8f97af7c98bd39168c33 /base/ca/src
parent5cdad30b99d8c115f6b50c63bb2ecceefdd33937 (diff)
Lightweight CAs: REST cert request param to specify authority
Add the optional "ca" query parameter for REST cert request submission. Also update the ca-cert-request-submit CLI command with an option to provide an AuthorityID. Part of: https://fedorahosted.org/pki/ticket/1213
Diffstat (limited to 'base/ca/src')
-rw-r--r--base/ca/src/org/dogtagpki/server/ca/rest/CertRequestService.java41
1 files changed, 38 insertions, 3 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 1da1ce171..7cb4ff71e 100644
--- a/base/ca/src/org/dogtagpki/server/ca/rest/CertRequestService.java
+++ b/base/ca/src/org/dogtagpki/server/ca/rest/CertRequestService.java
@@ -18,6 +18,7 @@
package org.dogtagpki.server.ca.rest;
+import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Enumeration;
@@ -41,8 +42,11 @@ import com.netscape.certsrv.base.BadRequestException;
import com.netscape.certsrv.base.ConflictingOperationException;
import com.netscape.certsrv.base.EBaseException;
import com.netscape.certsrv.base.PKIException;
+import com.netscape.certsrv.base.ResourceNotFoundException;
import com.netscape.certsrv.base.UnauthorizedException;
+import com.netscape.certsrv.ca.AuthorityID;
import com.netscape.certsrv.ca.CADisabledException;
+import com.netscape.certsrv.ca.ICertificateAuthority;
import com.netscape.certsrv.cert.CertEnrollmentRequest;
import com.netscape.certsrv.cert.CertRequestInfo;
import com.netscape.certsrv.cert.CertRequestInfos;
@@ -63,6 +67,7 @@ import com.netscape.certsrv.request.RequestNotFoundException;
import com.netscape.cms.servlet.base.PKIService;
import com.netscape.cms.servlet.cert.CertRequestDAO;
import com.netscape.cmsutil.ldap.LDAPUtil;
+import netscape.security.x509.X500Name;
/**
* @author alee
@@ -115,13 +120,43 @@ public class CertRequestService extends PKIService implements CertRequestResourc
}
@Override
- public Response enrollCert(CertEnrollmentRequest data) {
-
+ public Response enrollCert(CertEnrollmentRequest data, String aidString, String adnString) {
if (data == null) {
CMS.debug("enrollCert: data is null");
throw new BadRequestException("Unable to create enrollment reequest: Invalid input data");
}
+ if (aidString != null && adnString != null)
+ throw new BadRequestException("Cannot provide both issuer-id and issuer-dn");
+
+ AuthorityID aid = null;
+ ICertificateAuthority ca = (ICertificateAuthority)
+ CMS.getSubsystem(CMS.SUBSYSTEM_CA);
+ if (aidString != null) {
+ try {
+ aid = new AuthorityID(aidString);
+ } catch (IllegalArgumentException e) {
+ throw new BadRequestException("invalid AuthorityID: " + aidString);
+ }
+ ca = ca.getCA(aid);
+ if (ca == null)
+ throw new ResourceNotFoundException("CA not found: " + aidString);
+ }
+ if (adnString != null) {
+ X500Name adn = null;
+ try {
+ adn = new X500Name(adnString);
+ } catch (IOException e) {
+ throw new BadRequestException("invalid DN: " + adnString);
+ }
+ ca = ca.getCA(adn);
+ if (ca == null)
+ throw new ResourceNotFoundException("CA not found: " + adnString);
+ aid = ca.getAuthorityID();
+ }
+ if (!ca.getAuthorityEnabled())
+ throw new ConflictingOperationException("CA not enabled: " + aid.toString());
+
data.setRemoteHost(servletRequest.getRemoteHost());
data.setRemoteAddr(servletRequest.getRemoteAddr());
@@ -129,7 +164,7 @@ public class CertRequestService extends PKIService implements CertRequestResourc
CertRequestInfos infos;
try {
- infos = dao.submitRequest(data, servletRequest, uriInfo, getLocale(headers));
+ infos = dao.submitRequest(aid, data, servletRequest, uriInfo, getLocale(headers));
} catch (EAuthException e) {
CMS.debug("enrollCert: authentication failed: " + e);
throw new UnauthorizedException(e.toString());