keystore 不能直接转化为 pem ,要先转成 pfx 再转 pem。
1.keystore 转 pfx
这里用java代码转的,转之前要先创建好接收用的 .pfx文件(新建记事本就可以,把后缀改为.pfx)
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.util.Enumeration;
public class test011 {
public static final String PKCS12 = "PKCS12";
public static final String JKS = "JKS";
public static final String PFX_KEYSTORE_FILE = "C:\\new_server.pfx";
public static final String KEYSTORE_PASSWORD = "123456";
public static final String JKS_KEYSTORE_FILE = "C:\\server.keystore";
/**
* 将keystore转为pfx
*/
public static void coverToPfx() {
try {
KeyStore inputKeyStore = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream(JKS_KEYSTORE_FILE);
char[] nPassword = null;
if ((KEYSTORE_PASSWORD == null)
|| KEYSTORE_PASSWORD.trim().equals("")) {
nPassword = null;
} else {
nPassword = KEYSTORE_PASSWORD.toCharArray();
}
inputKeyStore.load(fis, nPassword);
fis.close();
KeyStore outputKeyStore = KeyStore.getInstance("PKCS12");
outputKeyStore.load(null, KEYSTORE_PASSWORD.toCharArray());
Enumeration enums = inputKeyStore.aliases();
while (enums.hasMoreElements()) { // we are readin just one
// certificate.
String keyAlias = (String) enums.nextElement();
System.out.println("alias=[" + keyAlias + "]");
if (inputKeyStore.isKeyEntry(keyAlias)) {
Key key = inputKeyStore.getKey(keyAlias, nPassword);
Certificate[] certChain = inputKeyStore
.getCertificateChain(keyAlias);
outputKeyStore.setKeyEntry(keyAlias, key,
KEYSTORE_PASSWORD.toCharArray(), certChain);
}
}
FileOutputStream out = new FileOutputStream(PFX_KEYSTORE_FILE);
outputKeyStore.store(out, nPassword);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
coverToPfx();
}
}
2.openssl 软件 安装/下载
有了 pfx 后就可以转 pem文件了,转之前要下载 openssl 软件,openssl 用来执行步骤3中的命令用的。
下载地址:百度网盘链接 提取码:9a9b。
安装好 openssl 要配置下环境变量,配到/bin目录下就行。
3.从pfx中导出所需要的 pem证书 和 pem私钥
转换证书
cmd窗口中:
openssl pkcs12 -in C:\server.pfx -nokeys -out C:\server.pem
in 后面是步骤1中导出的 pfx 文件路径,out 后面是要导出的 pem 文件路径 ,pem文件要提前创建好(新建记事本就可以,把后缀改为.pem)
输入命令回车后会要求输入证书的密码,解压的证书里面有,输进去回车即可生成。注意这里输入密码的时候控制台是不会显示的,感觉就好像输入没反应一样。
转换密匙
cmd窗口中:
openssl pkcs12 -in C:\server.pfx -nocerts -out C:\key.pem -nodes
in 后面是步骤1中导出的 pfx 文件路径,out 后面是要导出的 pem 文件路径 ,pem文件要提前创建好(新建记事本就可以,把后缀改为.pem)
同上一步
转换完之后,放证书的目录会生成对应的pem文件,可以使用记事本打开
4.截取 所需的 证书/私钥
右键已记事本分别打开步骤3中导出的 pem 文件,拷贝出所需的内容
证书截取格式:
开头-----BEGIN CERTIFICATE-----和结尾 -----END CERTIFICATE-----
每行64字符,最后一行不超过64字符
私钥截取格式:
开头-----BEGIN RSA PRIVATE KEY-----和结尾 -----END RSA PRIVATE KEY-----
每行64字符,最后一行不超过64字符