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 一个 pfx
或 pkcs12
),而不仅仅是一个证书。要按照您的要求使用 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());
}
}
希望这对您有所帮助,
我正在使用 Java 和 BouncyCastle 生成 CA 证书,CA 颁发多个用户证书,这些证书与它们的私钥一起存储在数据库中。如何生成可由 Windows 安装的证书文件,操作系统可在其中识别私钥和证书详细信息? 如果我将证书详细信息从 X509Certificate class 保存到 PEM 文件,证书详细信息会被识别但没有私钥。
有帮助吗?
谢谢。
通常你生成私钥和证书签名请求,将csr发送给CA,CA颁发证书。最后你可以生成一个 keystore
并将私钥和证书一起存储在上面。所以我不明白你的 CA 如何将私钥存储在数据库中,因为私钥不会发送到 CA。
忽略此信息(也许您有一个用于基础设施目的的自签名 CA,数据库存储私钥不安全等),问题是;要在 windows 上加载私钥和证书,您需要一个 keystore
文件(通常用于 windows 一个 pfx
或 pkcs12
),而不仅仅是一个证书。要按照您的要求使用 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());
}
}
希望这对您有所帮助,