2012-01-12 33 views
2

我正在尝试配置名为Hermes的产品进行数字签名。Keystore别名空错误

我有我自身配置如下文件MyCert.pfx:

<component id="keystore-manager-for-signature" name="Key Store Manager for Digital Signature"> 
    <class>hk.hku.cecid.piazza.commons.security.KeyStoreManager</class> 
    <parameter name="keystore-location" value="/opt/mycompany/certs/MyCert.pfx"/> 
    <parameter name="keystore-password" value="12345678"/> 
    <!-- parameter name="key-alias" value="joeblank"/--> 
    <!-- parameter name="key-password" value="12345678"/--> 
    <parameter name="keystore-type" value="PKCS12"/> 
    <parameter name="keystore-provider" value="org.bouncycastle.jce.provider.BouncyCastleProvider"/> 
</component> 

爱马仕抛出这样一个异常:

hk.hku.cecid.ebms.spa.task.MessageValidationException: Cannot sign the ebxml message 
    by hk.hku.cecid.ebms.pkg.SignatureException: [10204] Cannot sign message Exception: java.lang.NullPointerException Message: null 
    Try to retreive key alias[null] from keystore[/opt/mycompany/certs/MyCert.pfx] 
    by java.lang.NullPointerException 

我没有为别名pfx文件。当我在Tomcat的server.xml中使用它时,我不需要指定它。

也有人建议我应该用这样的命令将证书导入到JSK店:

keytool -importkeystore -deststorepass [password] -destkeystore [JKS keystore file] -deststoretype JKS -destalias [alias] -srckeystore [p12 keystore file] -srcstoretype PKCS12 -srcstorepass [password] -srcalias [alias] 

我不得不删除-srcalias部分,因为我没有这个,这需要我也删除了-stalias。所以在这种情况下,我没有在mycompany.jks中引用的已知别名。

无论哪种方式,我没有别名。我尝试使用keytool -import导入pfx文件,但引发“输入不是X.509证书”。

你们建议我应该尝试下一步?

回答

2

这听起来像你的应用程序没有使用默认alias时没有指定。应用程序/库(包括Apache Tomcat)在选择没有指定的第一个别名时很常见。不过,你的似乎需要一个。

您可以使用keytool -list -storetype PKCS12 -keystore找到它(如果需要,也可以使用-v以更清楚地查看别名)。该别名应该是该行的第一部分,它在2, Jan 12, 2012, PrivateKeyEntry(这里是“2”),就在指纹之前。

keystore -import确实只是用于证书。

keytool -importkeystore可用于将PKCS#12存储转换为JKS存储,但您不需要它,因为您可以指定PKCS12类型。

+0

是的!这解决了这个问题。别名是一些非常长的字母数字字符串。 – udeleng 2012-01-13 06:40:04