2017-05-11 26 views
0

我正在创建一个Android应用程序,应用程序应该向服务器发送POST请求。不幸的是,服务器正在使用自签名证书。所以我必须创建一个PKCS12密钥库,它将包含CA证书,并使我的应用程序使用该密钥库。Java keytool不会解析我的CA证书的扩展

要创建这样一个密钥,我目前使用下面的命令:

keytool -import -trustcacerts -alias my-alias -file cacert.pem 
-keystore mykeystorefile -storetype PKCS12 

不幸的是,密钥库不起作用。 (更多关于SSL握手失败。)

当我检查使用此命令的密钥库:

keytool -list -v -keystore mykeystorefile 

我在这个名单的最后注意到一个奇怪的线。

#8: ObjectId: 2.5.29.18 Criticality=false 
Unparseable IssuerAlternativeName extension due to 
java.io.IOException: No data available in passed DER encoded value. 

0000: 30 00            0. 



******************************************* 
******************************************* 

Keytool无法解析扩展名,该扩展名是CA证书的一部分。

我对LetsEncrypt的CA证书也一样,它工作得很好。

我很乐意为任何关于如何解决这个问题的指针。

谢谢。

编辑:我目前使用的keytool是java-8-openjdk的一部分。

编辑2:因此,检查CA证书后,发行人替代名称扩展没有任何价值。想知道是否有办法如何跳过这些扩展?

回答

1

无法跳过证书上的任何内容。

如果发卡行替代名称为空,那么生成该证书的任何人都会产生错误。如果它是自签名证书,则发行人备用名称和主题备用名称具有相同的值。如果它由任何CA签署,CA的主题备用名称将放入最终用户的“发行人备用名称”中。

您可能需要向他们询问正确的CA证书。