log.warn("Second request to issue certificate with serial number'"+sNo+"'. A certificate has already been issued.");
portlet.addWarningMessage(request, MessageFormat.format(portlet.getLocalizedString(request, "warnMsg06"), sNo));
return VIEW_CERT_MODE;
}
X509Name subject = null;
PublicKey publickey = null;
// Process the CSR text to get subject details
String pkcs10certreq = null, certreq = null;
String challenge = null;
String requestId = request.getParameter("requestId");
if(requestId != null && !requestId.equals("")) {
// Certificate request is being processed using a previously stored request in CertificateRequestStore
String certreqText = getCertificateRequestStore(request).getRequest(requestId);
if(certreqText.startsWith(CaUtils.CERT_REQ_HEADER)) {
// A PKCS 10 Certificate Request
pkcs10certreq = certreqText;
} else {
// Possibly a CSR received through web browser
certreq = certreqText;
}
} else {
// No request id is found. Get the PKCS10 request submitted through form input
pkcs10certreq = request.getParameter("pkcs10certreq");
}
if(pkcs10certreq != null && !"".equals(pkcs10certreq)) {
// Process PKCS 10 Certificate Request text to get Subject name and public-key
Map certReqMap = CaUtils.processPKCS10Request(pkcs10certreq);
subject = (X509Name) certReqMap.get(CaUtils.CERT_REQ_SUBJECT);
publickey = (PublicKey) certReqMap.get(CaUtils.CERT_REQ_PUBLICKEY_OBJ);
} else {
// This is a custom request containing SPKAC and X509Name attributes received through web browser
Properties csrProps = new Properties();
csrProps.load(new ByteArrayInputStream(certreq.getBytes()));
String spkac = csrProps.getProperty("SPKAC");
String cn = csrProps.getProperty("CN");
String ou = csrProps.getProperty("OU");
String o = csrProps.getProperty("O");
String l = csrProps.getProperty("L");
String st = csrProps.getProperty("ST");
String c = csrProps.getProperty("C");
subject = CaUtils.getX509Name(cn, ou, o, l, st, c);
Map certReqMap = CaUtils.processSPKAC(spkac);
publickey = (PublicKey) certReqMap.get(CaUtils.CERT_REQ_PUBLICKEY_OBJ);
challenge = (String) certReqMap.get(CaUtils.PKAC_CHALLENGE);
}
// Dates have already been validated in the previous screen
String validFrom = request.getParameter("validFrom");
String validTo = request.getParameter("validTo");
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Date validFromDate = df.parse(validFrom);
Date validToDate = df.parse(validTo);
String algorithm = request.getParameter("algorithm");
// Issue certificate
ca.issueCertificate(new X500Principal(subject.getEncoded()), publickey, sNo, validFromDate, validToDate, algorithm);
// Store the challenge phrase against the issued certificate serial number
if(challenge != null && !challenge.equals("")) {
getCertificateStore(request).setCertificateChallenge(sNo, challenge);
}