2012-01-12 135 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