证书文件格式
证书文件存在多种格式:
1. .p12 .pfx 二进制格式,同时包含证书和私钥,一般有密码保护。
2. .pem 文本格式,保存证书或者私钥
3. .crt 二进制格式或者文本格式,只保存证书
4. .jks 二进制格式,同时包含证书和私钥,一般有密码保护;
jks是java的专属格式,它可以存储多张证书。
5. .der .cer 二进制格式,只保存证书,不保存密钥
1, p12格式文件转换为pem
openssl pkcs12 -clcerts -out cert_name.pem -in cert_name.p12
2,jks格式转换为crt
我们可以使用 keytool -list -v -keystore cert_name.jks
查看jks文件中所有的证书
1). 导出jks文件中指定的证书文件
keytool -export -alias cert_name -file cert_name.crt -keystore keystore.jks
2).
① jks文件转换为PKCS12文件 keytool -importkeystore -srckeystore cert_name.jks
-destkeystore cert_name.p12 -srcstoretype jks -deststoretype pkcs12
② 查看p12证书文件中所有证书信息
keytool -list -v -keystore cert_name.p12 -storepass store_pass -storetype store_type
③ 从PKCS12文件中导出指定的证书文件
keytool -keystore cert_name.p12 -storetype pkcs12 -exportcert -alias alias
-file cert_name.crt
3,将证书导入JKS文件
keytool -import -v -trustcacerts -storepass password -alias alias -file cert_name.crt -keystore truststore.jks
Java代码从JKS文件中导出所有证书
private static void exportCertificateFromJKSFile() {
try {
// 加载keystore库
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream(new File(PATH + File.separator + "cert.jks")),
"password".toCharArray());
// 获取所有证书名
Enumeration<String> aliases = keyStore.aliases();
while(aliases.hasMoreElements()) {
String alias = aliases.nextElement();
Certificate certificate = keyStore.getCertificate(alias);
// 获取证书内容并进行Base64编码
String content = new String(Base64.getEncoder()
.encode(certificate.getEncoded()));
// 持久化证书
store(content, alias);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void store(String content, String alias) {
try {
File exportedFile = new File(PATH + File.separator + alias + ".pem");
FileWriter fileWriter = new FileWriter(exportedFile);
// 证书内容必须以-----BEGIN CERTIFICATE-----\n开头
fileWriter.write("-----BEGIN CERTIFICATE-----\n");
fileWriter.write(content);
fileWriter.write("\n");
// 证书内容必须以-----BEGIN CERTIFICATE-----结尾
fileWriter.write("-----END CERTIFICATE-----");
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。