summaryrefslogtreecommitdiffstats
path: root/base/kra/src/com/netscape
diff options
context:
space:
mode:
authorFraser Tweedale <ftweedal@redhat.com>2017-06-08 14:25:23 +1000
committerAde Lee <alee@redhat.com>2017-06-09 14:27:33 -0400
commit53564487e46040a9115fba51c8403ecacb50187e (patch)
tree2d7ac8b2d57a6ea123770d1e59ab3a5dde6f6c8b /base/kra/src/com/netscape
parent9edd684fef78845acee95a766f34a9c57a1ab604 (diff)
downloadpki-53564487e46040a9115fba51c8403ecacb50187e.tar.gz
pki-53564487e46040a9115fba51c8403ecacb50187e.tar.xz
pki-53564487e46040a9115fba51c8403ecacb50187e.zip
KRA PKCS #12 export: add config to use 3DES PBE encryption
Restore the 3DES PKCS #12 key recovery code path, alongside the new AES variant, which is broken on Thales nethsm. Add the 'kra.legacyPKCS12' config for selecting which version to use, with the default value of 'true' (i.e., use 3DES). Part of: https://pagure.io/dogtagpki/issue/2728 Change-Id: Ic02fe8ba3a4c2c049913ff48d3f6dfdc830b4360
Diffstat (limited to 'base/kra/src/com/netscape')
-rw-r--r--base/kra/src/com/netscape/kra/RecoveryService.java43
1 files changed, 32 insertions, 11 deletions
diff --git a/base/kra/src/com/netscape/kra/RecoveryService.java b/base/kra/src/com/netscape/kra/RecoveryService.java
index eee800aa8..023eb8093 100644
--- a/base/kra/src/com/netscape/kra/RecoveryService.java
+++ b/base/kra/src/com/netscape/kra/RecoveryService.java
@@ -487,19 +487,40 @@ public class RecoveryService implements IService {
PasswordConverter passConverter = new
PasswordConverter();
- byte[] epkiBytes = ct.getCryptoStore().getEncryptedPrivateKeyInfo(
- /* NSS has a bug that causes any AES CBC encryption
- * to use AES-256, but AlgorithmID contains chosen
- * alg. To avoid mismatch, use AES_256_CBC. */
- passConverter, pass, EncryptionAlgorithm.AES_256_CBC, 0, priKey);
- CMS.debug("RecoverService: createPFX() getEncryptedPrivateKeyInfo() returned");
- if (epkiBytes == null) {
- CMS.debug("RecoverService: createPFX() epkiBytes null");
- throw new EBaseException("getEncryptedPrivateKeyInfo returned null");
+ boolean legacyP12 =
+ CMS.getConfigStore().getBoolean("kra.legacyPKCS12", true);
+
+ ASN1Value key;
+ if (legacyP12) {
+ Random ran = new SecureRandom();
+ byte[] salt = new byte[20];
+ ran.nextBytes(salt);
+
+ key = EncryptedPrivateKeyInfo.createPBE(
+ PBEAlgorithm.PBE_SHA1_DES3_CBC,
+ pass, salt, 1, passConverter, priKey, ct);
+ CMS.debug("RecoverService: createPFX() EncryptedPrivateKeyInfo.createPBE() returned");
+ if (key == null) {
+ CMS.debug("RecoverService: createPFX() key null");
+ throw new EBaseException("EncryptedPrivateKeyInfo.createPBE() failed");
+ } else {
+ CMS.debug("RecoverService: createPFX() key not null");
+ }
} else {
- CMS.debug("RecoverService: createPFX() epkiBytes not null");
+ byte[] epkiBytes = ct.getCryptoStore().getEncryptedPrivateKeyInfo(
+ /* NSS has a bug that causes any AES CBC encryption
+ * to use AES-256, but AlgorithmID contains chosen
+ * alg. To avoid mismatch, use AES_256_CBC. */
+ passConverter, pass, EncryptionAlgorithm.AES_256_CBC, 0, priKey);
+ CMS.debug("RecoverService: createPFX() getEncryptedPrivateKeyInfo() returned");
+ if (epkiBytes == null) {
+ CMS.debug("RecoverService: createPFX() epkiBytes null");
+ throw new EBaseException("getEncryptedPrivateKeyInfo returned null");
+ } else {
+ CMS.debug("RecoverService: createPFX() epkiBytes not null");
+ }
+ key = new ANY(epkiBytes);
}
- ASN1Value key = new ANY(epkiBytes);
SET keyAttrs = createBagAttrs(
x509cert.getSubjectDN().toString(),