Java 将证书从pem转换为jks
我必须将pem格式的证书转换为java密钥存储 在windows服务器上与tomcat一起使用此选项 我有这些文件:Java 将证书从pem转换为jks,java,ssl,certificate,pem,jks,Java,Ssl,Certificate,Pem,Jks,我必须将pem格式的证书转换为java密钥存储 在windows服务器上与tomcat一起使用此选项 我有这些文件: cert_request.csr -----BEGIN CERTIFICATE REQUEST----- ... -----END CERTIFICATE REQUEST----- cert_public_key.pem -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- cert_private_key.
- cert_request.csr
-----BEGIN CERTIFICATE REQUEST----- ... -----END CERTIFICATE REQUEST-----
- cert_public_key.pem
-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
- cert_private_key.pem
-----BEGIN ENCRYPTED PRIVATE KEY----- ... -----END ENCRYPTED PRIVATE KEY-----
- cert.txt
contains an 16 digit key
- .der文件,并使用keytool将其导入新的密钥库
- 与第12页相同
- 直接导入密钥库
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
进入
并尝试了上述三种方法
我要做什么才能拿到工作证书
编辑:
我将cert_public_key.pem和cert_private_key.pem组合到cert_comb.pem
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
第一个问题:您只有一个证书请求?不是真正的证书? 它需要签名,您可以自行签名,也可以让外部人员签名 如果您有实际的证书,您可以使用此解析私钥文件和证书文件:
// parse the private key
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); // might not be RSA
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(byteArray);
PrivateKey privateKey = keyFactory.generatePrivate(spec);
// parse cert
CertificateFactory factory = CertificateFactory.getInstance("X.509");
X509Certificate cert = factory.generateCertificate(certInputStream);
// add it to the keystore
store.setKeyEntry(alias, privateKey, password, new X509Certificate[] { cert });
更新
据我所知,命令行keytool不支持任何高级选项,如签署csr。即使标准java不支持这一点,您也需要像bouncy castle这样的外部库。这并不容易。例如:
JcaPKCS10CertificationRequest pkcs10 = new JcaPKCS10CertificationRequest(csrBytes);
X509v3CertificateBuilder builder = new JcaX509v3CertificateBuilder(
issuer,
generateSerialId(),
new Date(),
until,
subject,
pkcs10.getPublicKey()
);
X509CertificateHolder holder = builder.build(getContentSigner(privateKey, type));
X509Certificate cert = getCertificate(holder);
...
ContentSigner getContentSigner(PrivateKey privateKey) {
AsymmetricKeyParameter keyParameter = PrivateKeyFactory.createKey(privateKey.getEncoded());
AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA256WITHRSA"); // or what you want
AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);
return new BcRSAContentSignerBuilder(sigAlgId, digAlgId).build(keyParameter);
}
您不清楚合并了哪些文件,但它应该可以工作 使用openssl将证书和私钥组合到PKCS#12: 或在运行中,但(更新:)privatekey必须是第一个:
cat cert_private_key.pem cert_public_key.pem | openssl pkcs12 -export -out cert.p12
如果您的证书需要任何链证书——CA应该在您提交时告诉您这一点
CSR和他们发布了证书——现在也最容易包含它(他们)
然后(1)一些Java程序实际上可以直接使用pkcs12作为密钥库,
但是(2)如果您需要或更喜欢JKS,请使用keytool:
keytool -importkeystore -srckeystore cert.p12 -srcstoretype pkcs12 -destkeystore cert.jks
如果您关心生成的JKS中的别名,那么在转换后最容易修复它
另外:仅仅在加密的PEM中更改标签不会解除加密,更改也不会解除加密
从通用PKCS#8到RSA的标签实际上改变了要匹配的数据(它们是不同的,
虽然只有一点点)。如果您确实希望使用解密的私钥创建一个单独的PEM文件:
openssl pkey -in encryptedpk8 -out clearpk8.pem # 1.0.0 up
openssl pkcs8 -in encryptedpk8 -out clearpk8.pem # 1.0.0 up
openssl pkcs8 -topk8 -nocrypt -in encryptedpk8 -out clearpk8.pem # below 1.0.0
openssl rsa -in encryptedpk8 -out clearrsa.pem
我有4个文件,一个cert_request.csr、一个cert_public_key.pem、一个cert_private_key.pem和一个cert.txt。cert.txt只有16位数字,不确定其中包含什么,id?公钥在这里并不重要。csr(证书签名请求)必须由某人签名才能生成证书。证书和私钥一起进入密钥库。csr在签署后可以忽略。到目前为止还可以理解,但是如何?我正在搜索命令行表达式我应该如何运行此代码?请帮帮我。我有一个sslcertification.pem文件,其中包含一个证书和私钥,我想将其转换为java密钥库格式?Q中的数据清楚地表明“cert_public_key.pem”实际上是一个证书。尽管这里不适用,
keytool-gencert
可以从CSR创建证书(这不是通过签署CSR来完成的,尽管很多人和网站错误地宣称这一点)自2011年Java 7以来。我将cert_public_key.pem和cert_private_key.pem组合到cert_comb.pem,我编辑了上面的帖子,并且我必须使用windows,所以我没有用cat进行复制。我在文本编辑器(notepad++)中手动复制了它我尝试合并这两个.pem文件并执行命令“pkcs12-export-out C:/path/cert.p12-in C:/path/cert_comb.pem”,但出现错误:“无法写入‘随机状态’”是的,Windows上的openssl通常在完成请求的操作后会出现此错误,因此在几乎所有情况下,您都可以忽略它。如果您想修复此错误,请参阅@Arash:假设您指的是一个文件中的证书(认证不是标准术语)和PEM格式的私钥,这正是我回答的第一部分中已经介绍过的情况。(请注意,此Q上的OP使用“cert_public_key”作为证书名称。)(请注意,与2014年不同,今天所有受支持的Java版本都默认使用PKCS12密钥库。)jamielinux.com上的这本指南有很多关于如何生成密钥对、如何生成证书、如何生成CSR、如何使用证书签署CSR的答案;之后,您可以使用keytool合并它们,也可以使用具有GUI的Portecle。
keytool -importkeystore -srckeystore cert.p12 -srcstoretype pkcs12 -destkeystore cert.jks
openssl pkey -in encryptedpk8 -out clearpk8.pem # 1.0.0 up
openssl pkcs8 -in encryptedpk8 -out clearpk8.pem # 1.0.0 up
openssl pkcs8 -topk8 -nocrypt -in encryptedpk8 -out clearpk8.pem # below 1.0.0
openssl rsa -in encryptedpk8 -out clearrsa.pem