2013-10-03 23 views
1

我得到下面的错误 -密钥工具错误:java.lang.IllegalArgumentException异常:公钥' s不是X.509,但X509

keytool error: java.lang.IllegalArgumentException: publicKey's is not X.509, but X509 

试图生成下面的命令密钥库时 -

keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -validity 366 -storepass test -keypass password -dname 'cn=${env.HOSTNAME},ou=foo,o=bar,l=testCity,s=testState,c=testCoutry' -keystore 

我在我的Ubuntu机箱上将JDK升级到1.7更新40后,发现此错误。

+0

您确定您使用的keytool是来自1.7 JDK而不是旧版本的keytool吗? – Nodebody

回答

0

在Windows上升级到1.7u45后,我的团队遇到了同样的错误消息。当http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7109096被回迁到JDK 7

代码变化的相关部分介绍了此错误消息在CertAndKeyGen.java:

+  // publicKey's format must be X.509 otherwise 
+  // the whole CertGen part of this class is broken. 
+  if (!"X.509".equalsIgnoreCase(publicKey.getFormat())) { 
+   throw new IllegalArgumentException("publicKey's is not X.509, but " 
+     + publicKey.getFormat()); 
+  } 

看来,无论是默认的公钥格式不正确,或等号检查应该更新以检查“X509”。

0

我们在更改默认安全提供程序时遇到了这些问题。 在\ lib \ security \ java.security中查看提供商列表

0

这是旧帖子,但只是为了防止其他人绊倒它。在我的情况下,问题是由JAVA_HOME系统变量引起的,它指向在系统路径中设置的不同目录/ JDK安装。除非您已经涉足java.security文件,否则请检查您的JAVA_HOME系统变量,并确认您的PATH系统变量未指向任何其他JDK安装。在我的情况是这样的。当我修复PATH变量时,问题就消失了。