以编程方式创建证书时使用密码加密私钥

时间:2014-07-29 21:25:52

标签: java ssl encryption cryptography certificate

当我使用openssl命令创建证书时,它可以选择使用密码保护私钥。但是,当我以编程方式在Java中创建证书和公钥/私钥对时,Java API只能在梯形图上设置密码,而不是在私钥上设置密码(与openssl命令不同)。那么有没有办法用openssl命令中的密码加密私钥?

如果有帮助,请按照以下方式在Java中创建私钥和证书:

    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
    keyPairGenerator.initialize(KEY_SIZE, new SecureRandom());
    KeyPair keyPair = keyPairGenerator.generateKeyPair();

    X509CertInfo info = new X509CertInfo();
    CertificateValidity validityInterval = generateValidityInterval();
    BigInteger serialNumber = new BigInteger(SERIAL_NUMBER_SIZE, new SecureRandom());
    X500Name owner = new X500Name(DN);

    info.set(X509CertInfo.VALIDITY, validityInterval);
    info.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(serialNumber));
    info.set(X509CertInfo.SUBJECT, new CertificateSubjectName(owner));
    info.set(X509CertInfo.ISSUER, new CertificateIssuerName(owner));
    info.set(X509CertInfo.KEY, new CertificateX509Key(keyPair.getPublic()));
    info.set(X509CertInfo.VERSION, new CertificateVersion(CertificateVersion.V3));
    AlgorithmId certificateAlgorithm = new AlgorithmId(CERTIFICATE_ALGORITHM);
    info.set(X509CertInfo.ALGORITHM_ID, new CertificateAlgorithmId(certificateAlgorithm));

    X509CertImpl certificate = new X509CertImpl(info);
    certificate.sign(keyPair.getPrivate(), new AlgorithmId(SIGNATURE_ALGORITHM).getName());

    AlgorithmId x509Algorithm = (AlgorithmId) certificate.get(X509CertImpl.SIG_ALG);
    info.set(CertificateAlgorithmId.NAME + "." + CertificateAlgorithmId.ALGORITHM, x509Algorithm);
    certificate = new X509CertImpl(info);
    certificate.sign(keyPair.getPrivate(), new AlgorithmId(SIGNATURE_ALGORITHM).getName());

0 个答案:

没有答案