您的
.key和
.crt文件可能是PEM格式。要进行检查,请使用文本编辑器将其打开,然后检查内容是否看起来像
------BEGINCERTIFICATE------(或“开始RSA私钥” …)。通常,这是OpenSSL使用的默认格式,除非您已明确指定DER。
可能不是必需的(请参阅下文),但是如果您的证书为DER格式(二进制格式),则可以使用以下方法将其转换为PEM格式:
openssl x509 -inform DER -in cert.crt -outform PEM -out cert.pem
(
openssl rsa如果需要,请检查帮助中是否有与私钥相似的操作。)
然后,您有两个选择:
- 建立PKCS#12档案
openssl pkcs12 -export -in myhost.crt -inkey myhost.key -out myhost.p12
然后,您可以直接从Java中将其用作“
PKCS12”类型的密钥库。大多数Java应用程序都应允许您指定除文件位置以外的密钥库类型。对于默认的系统属性,此操作是通过完成的
javax.net.ssl.keyStoreType(但是您正在使用的应用程序可能没有使用此功能)。否则,如果您想显式加载它,请使用以下方法:
KeyStore ks = KeyStore.getInstance("PKCS12"); FileInputStream fis = new FileInputStream("/path/to/myhost.p12"); ks.load(fis, "password".toCharArray()); // There are other ways to read the password. fis.close();(然后,您应该能够遍历
aliases()的
KeyStore和使用
getCertificate(然后再使用
getPublicKey()公钥)和
getKey()。
- 使用BouncyCastle的
PEMReader
。FileReader fr = ... // Create a FileReader for myhost.crt
PEMReader pemReader = new PEMReader(fr);
X509Certificate cert = (X509Certificate)pemReader.readObject();
PublicKey pk = cert.getPublicKey();
// Close reader…
对于私钥,您需要实现一个
PasswordFinder(请参阅PEMReader
doc的链接)以构造
PEMReader私钥是否受密码保护。(您需要将的结果强制
readObject()转换为
Key或
PrivateKey。)



