summaryrefslogtreecommitdiffstats
path: root/base/util/src/com/netscape/cmsutil
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2017-06-29 08:15:26 +0200
committerEndi S. Dewata <edewata@redhat.com>2017-07-05 23:41:20 +0200
commitc39cc840b5c2f322cee88ab94e53d20a8e3bfad0 (patch)
treee56c6a8ba788aeba04c918f5ac9613851133babb /base/util/src/com/netscape/cmsutil
parent7524be0fb18304d2562059a82607da0fdd9a2f1d (diff)
downloadpki-c39cc840b5c2f322cee88ab94e53d20a8e3bfad0.tar.gz
pki-c39cc840b5c2f322cee88ab94e53d20a8e3bfad0.tar.xz
pki-c39cc840b5c2f322cee88ab94e53d20a8e3bfad0.zip
Refactored CertUtil.importExternalCert().
The code for importing external cert into NSS database has been moved into CertUtil.importExternalCert(). https://pagure.io/dogtagpki/issue/2280 Change-Id: Icb347943fc432ad97105229c14768822b070d99f
Diffstat (limited to 'base/util/src/com/netscape/cmsutil')
-rw-r--r--base/util/src/com/netscape/cmsutil/crypto/CryptoUtil.java70
1 files changed, 39 insertions, 31 deletions
diff --git a/base/util/src/com/netscape/cmsutil/crypto/CryptoUtil.java b/base/util/src/com/netscape/cmsutil/crypto/CryptoUtil.java
index 707a12388..6da8d950d 100644
--- a/base/util/src/com/netscape/cmsutil/crypto/CryptoUtil.java
+++ b/base/util/src/com/netscape/cmsutil/crypto/CryptoUtil.java
@@ -121,6 +121,7 @@ import netscape.security.pkcs.PKCS10Attribute;
import netscape.security.pkcs.PKCS10Attributes;
import netscape.security.pkcs.PKCS7;
import netscape.security.pkcs.PKCS9Attribute;
+import netscape.security.pkcs.ParsingException;
import netscape.security.util.BigInt;
import netscape.security.util.DerInputStream;
import netscape.security.util.DerOutputStream;
@@ -1217,51 +1218,42 @@ public class CryptoUtil {
return val.toString();
}
- public static void importCertificateChain(String certchain)
+ public static void importCertificateChain(byte[] bytes)
throws IOException,
CryptoManager.NotInitializedException,
TokenException,
CertificateEncodingException,
CertificateException {
- byte[] blah = base64Decode(certchain);
+
CryptoManager manager = CryptoManager.getInstance();
- PKCS7 pkcs7 = null;
+
+ X509Certificate cert = null;
+
try {
// try PKCS7 first
- pkcs7 = new PKCS7(blah);
- } catch (Exception e) {
- }
- X509Certificate cert = null;
- if (pkcs7 == null) {
- cert = manager.importCACertPackage(blah);
- } else {
- java.security.cert.X509Certificate certsInP7[] =
- pkcs7.getCertificates();
- if (certsInP7 == null) {
- cert = manager.importCACertPackage(blah);
- } else {
- for (int i = 0; i < certsInP7.length; i++) {
- // import P7 one by one
- cert = manager.importCACertPackage(certsInP7[i].getEncoded());
+ PKCS7 pkcs7 = new PKCS7(bytes);
+
+ java.security.cert.X509Certificate[] certs = pkcs7.getCertificates();
+
+ if (certs != null) {
+ // import PKCS7 certs one by one
+ for (int i = 0; i < certs.length; i++) {
+ cert = manager.importCACertPackage(certs[i].getEncoded());
}
}
+
+ } catch (ParsingException e) {
+ // not PKCS7
}
- X509Certificate[] certchains =
- CryptoManager.getInstance().buildCertificateChain(cert);
- if (certchains != null) {
- cert = certchains[certchains.length - 1];
+ if (cert == null) {
+ cert = manager.importCACertPackage(bytes);
}
- // set trust flags to CT,C,C
- InternalCertificate icert = (InternalCertificate) cert;
- icert.setSSLTrust(InternalCertificate.TRUSTED_CA
- | InternalCertificate.TRUSTED_CLIENT_CA
- | InternalCertificate.VALID_CA);
- icert.setEmailTrust(InternalCertificate.TRUSTED_CA
- | InternalCertificate.VALID_CA);
- icert.setObjectSigningTrust(InternalCertificate.TRUSTED_CA
- | InternalCertificate.VALID_CA);
+ X509Certificate[] certs = manager.buildCertificateChain(cert);
+ X509Certificate rootCert = certs[certs.length - 1];
+
+ trustRootCert(rootCert);
}
public static SEQUENCE parseCRMFMsgs(byte cert_request[])
@@ -1820,6 +1812,22 @@ public class CryptoUtil {
cert.setEmailTrust(flag);
}
+ public static void trustRootCert(X509Certificate rootCert) {
+
+ // set trust flags to CT,C,C
+ InternalCertificate cert = (InternalCertificate) rootCert;
+
+ cert.setSSLTrust(InternalCertificate.TRUSTED_CA
+ | InternalCertificate.TRUSTED_CLIENT_CA
+ | InternalCertificate.VALID_CA);
+
+ cert.setEmailTrust(InternalCertificate.TRUSTED_CA
+ | InternalCertificate.VALID_CA);
+
+ cert.setObjectSigningTrust(InternalCertificate.TRUSTED_CA
+ | InternalCertificate.VALID_CA);
+ }
+
/**
* To certificate server point of view, SSL trust is
* what we referring.