如何验证X.509证书格式?

时间:2013-04-05 14:37:15

标签: android security ssl-certificate bouncycastle

我有一个SSL证书(从服务器的根开始的证书链),这似乎是好的。我可以在Windows和Windows上打开证书也可以使用Windows向导导入它。

但是当我尝试通过以下命令将其转换为密钥库时(使用BouncyCastle):

keytool -importcert -v -trustcacerts -file "test.crt" -alias ca -keystore "test.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-ext-jdk15on-1.46.jar" -storetype BKS -storepass testtest

我收到以下错误:

keytool error: java.lang.Exception: Input not an X.509 certificate
java.lang.Exception: Input not an X.509 certificate
        at sun.security.tools.KeyTool.addTrustedCert(Unknown Source)
        at sun.security.tools.KeyTool.doCommands(Unknown Source)
        at sun.security.tools.KeyTool.run(Unknown Source)
        at sun.security.tools.KeyTool.main(Unknown Source)

我正在开发一个Android应用程序,我需要通过https调用基于REST的API。

是否有基于网络的工具(或其他)通过我可以验证证书?

1 个答案:

答案 0 :(得分:5)

看来你的test.crt不是X.509格式。通常,如果它是PEM编码的X.509证书,它将从以下行开始:

-----BEGIN CERTIFICATE-----
MII...

-----BEGIN TRUSTED CERTIFICATE-----
MII...

DER-endcoded X.509证书对您来说似乎是随机二进制数据,但您可以使用openssl命令行解码此类DER编码文件:

openssl asn1parse -inform d -in test.crt -i

输出中的起始OID将告诉您它是否是X.509证书或其他类似PKCS#7包。