2010-08-10 495 views
9

我正在尝试导入Gmail的smtp证书以供Jira使用,但在使用Javas keytool导入时出现此错误。keytool错误:java.lang.Exception:输入不是X.509证书

我使用openssl获取证书,----开始证书----和---- ----证书----(包含)之间的所有内容。我也尝试使用Windows证书管理器创建一个x.509证书,但仍然出现此错误。我已验证文件中没有多余的空格。

我在网上看到很多有这个问题的人,但没有一个解决方案似乎适用于我。任何帮助,将不胜感激。

由于

回答

16
openssl x509 -outform der -in foo.pem -out foo.der

然后使用DER编码输出证书。

+0

我真的很希望这会工作,但我突出部分继续得到同样的错误。这是我正在做的事情。 的OpenSSL的s_client.First -connect smtp.gmail.com:465 我复制到一个名为gmail.pem OpenSSL的X​​509 -outform DER文件-in gmail.pem退房手续gmail.der 的keytool -import -file pathTo /gmail.der -keystore pathTo/cacerts – dbbooh01 2010-08-10 14:27:52

+0

这实际上确实奏效,我在使用keytool时忘记了参数-trustcacerts。感谢您的帮助 – dbbooh01 2010-08-10 14:38:27

+0

@ dbbooh01这可能起作用的原因是因为'-trustcacerts'从分布式cacerts文件导入标准根CA.这将包括Gmail的信任链中的根CA. – 2013-02-22 21:53:14

5

答案是正确的,但一定要在复制/粘贴中包含-----BEGIN CERTIFICATE----------END CERTIFICATE-----。 那么该命令将工作:

openssl x509 -outform der -in gmail.pem -out gmail.der 

,然后你做:

sudo keytool -import -file gmail.der -keystore $JAVA_HOME/jre/lib/security/cacerts -trustcacerts 
+0

叶普,这也是我的问题的原因 – Andrejs 2012-09-12 14:31:44

2

不幸的是,OpenSSL的并没有为我工作。

unable to load certificate 2740:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:./crypto/as n1/tasn_dec.c:1294: 2740:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:./ crypto/asn1/tasn_dec.c:380:Type=X509_CINF 2740:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 e rror:./crypto/asn1/tasn_dec.c:749:Field=cert_info, Type=X509 2740:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:./crypto/pem/pem_oth .c:83:

使用了这个知识库并且成功了。

https://knowledge.verisign.ch/support/code-signing-support/index?page=content&id=SO18659&actp=search&viewlocale=en_US&searchid=1343045026667