BouncyCastle - 生成 MS Windows 理解的证书文件

BouncyCastle - Generate certificate file that MS Windows understands

我正在使用 Java 和 BouncyCastle 生成 CA 证书,CA 颁发多个用户证书,这些证书与它们的私钥一起存储在数据库中。如何生成可由 Windows 安装的证书文件,操作系统可在其中识别私钥和证书详细信息? 如果我将证书详细信息从 X509Certificate class 保存到 PEM 文件,证书详细信息会被识别但没有私钥。

有帮助吗?

谢谢。

通常你生成私钥和证书签名请求,将csr发送给CA,CA颁发证书。最后你可以生成一个 keystore 并将私钥和证书一起存储在上面。所以我不明白你的 CA 如何将私钥存储在数据库中,因为私钥不会发送到 CA。

忽略此信息(也许您有一个用于基础设施目的的自签名 CA,数据库存储私钥不安全等),问题是;要在 windows 上加载私钥和证书,您需要一个 keystore 文件(通常用于 windows 一个 pfxpkcs12),而不仅仅是一个证书。要按照您的要求使用 java 和 bouncycastle 来执行此操作,您可以使用以下示例代码(正如您所说,我想您拥有证书和私钥):

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class Sample {

    public static void main(String[] args) throws Exception {

        // generate your certificate
        CertificateFactory cf = CertificateFactory.getInstance("X509", new BouncyCastleProvider());
        Certificate yourCert = cf.generateCertificate(new FileInputStream("C:/your_certificate_path"));
        // here you can add also the issuer of your cert
        Certificate[] certChain = { yourCert };
        // depending on your private key format you've a different
        // ways to parse its
        Key privatekey = null;//...
        String alias = "yourKSEntry";
        // generate the keystore
        KeyStore ks = KeyStore.getInstance("PKCS12", new BouncyCastleProvider());
        // necessary to init a new keystore
        ks.load(null, null);
        String keyPass = null;// your key pass or null if the key file has no password
        // adds the key and cert to the keystore
        ks.setKeyEntry(alias, privatekey, null, certChain);
        // save to file in order that then you
        // can install on windows keystore
        ks.store(new FileOutputStream("C:/where_save_your_keystore.p12"), "your_keystore_pass".toCharArray());

    }
}

希望这对您有所帮助,