如何把PEM格式证书转换成JKS格式

如何把PEM格式证书转换成JKS格式。

通常一个完整的证书链包含三个文件:

  1. cert.pem:用户证书文件
  2. cert.key:用户私钥文件
  3. ca.pem:CA根证书文件

当然,我们假设cert.pem是经过ca.pem签名的。

把PEM格式转换成JKS格式通常会生成两个JKS文件。

  1. 把CA证书文件转换成truststore.jks文件
$ keytool -import -noprompt -file ca.pem -keystore truststore.jks -storepass 
Certificate was added to keystore

然后我们可以keystore.jks里面有多少个entry:

$  keytool --list -keystore truststore.jks -storepass 
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

mykey, Dec 13, 2018, trustedCertEntry, 
Certificate fingerprint (SHA1): D2:D1:A9:A7:B7:24:F0:E5:0C:48:9B:2F:2E:1C:76:89:98:43:11:2E

上面我们看到truststore.jks里面只有一个入口:mykey;这个是缺省的名字,当我我们在添加的时候可以指定alias,例如:

$ keytool -import -alias myname -noprompt -file ca.pem -keystore truststore.jks -storepass 
Certificate was added to keystore

我们指定了entry的一个alias别名;在看一遍:

$  keytool --list -keystore truststore.jks -storepass                                          
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 2 entries

myname, Dec 13, 2018, trustedCertEntry, 
Certificate fingerprint (SHA1): D2:D1:A9:A7:B7:24:F0:E5:0C:48:9B:2F:2E:1C:76:89:98:43:11:2E
mykey, Dec 13, 2018, trustedCertEntry, 
Certificate fingerprint (SHA1): D2:D1:A9:A7:B7:24:F0:E5:0C:48:9B:2F:2E:1C:76:89:98:43:11:2E

这时truststore.jks里面有两个entry,其中一个使用了别名myname;而且我们看到两个entry的SHA1是一样的,因为本身就是同一份证书,只是采用了一个不同的别名而已。

  1. 把用户证书文件转换成keystore.jks文件

这个需要分两步完成:

  1. 把用户证书转换成P12格式
$ openssl pkcs12 -export -in cert.pem -inkey cert.key -out keystore.p12 -passout pass:
  1. 把p12格式文件加入到JKS格式
$ keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -destkeystore keystore.jks \
   -srcstorepass  -deststorepass 
  1. 查看结果
$ keytool --list -keystore keystore.jks -storepass 
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

1, Dec 13, 2018, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 7D:38:3C:9E:B6:DC:4B:D1:A9:EC:D9:5C:C8:DF:01:E1:D2:C4:01:00

此时看到的别名是"1",不知道为什么。

另外,如果需要使用别名alias,类似的:

$ openssl pkcs12 -export -name myalias -in cert.pem -inkey cert.key -out keystore.p12 -passout pass:

$ keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -destkeystore keystore.jks \
   -srcstorepass  -deststorepass 

$ keytool --list -keystore keystore.jks -storepass 
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 2 entries

1, Dec 13, 2018, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 7D:38:3C:9E:B6:DC:4B:D1:A9:EC:D9:5C:C8:DF:01:E1:D2:C4:01:00
mynewalias, Dec 13, 2018, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 7D:38:3C:9E:B6:DC:4B:D1:A9:EC:D9:5C:C8:DF:01:E1:D2:C4:01:00

注意别名alias是在第一步生成P12文件的时候通过-name参数执行,第二步没有别名相关参数。

另外,如果需要在keystore里面包含CA证书,则需要:

$ openssl pkcs12 -export -name myalias2 -in cert.pem -inkey cert.key -chain -CAfile ca.pem -out keystore.p12 -passout pass:

即在创建P12文件的时候指定CAfile参数,后面步骤就一样。

你可能感兴趣的:(如何把PEM格式证书转换成JKS格式)