BouncyCastle加密提供程式庫用於Java 7u40上的applet
情況:我正在維護使用BouncyCastle庫bcpkix-jdk15on-149.jar和bcprov-jdk15on-149.jar的Java applet.
該行為已經從版本7_u25發生了變化,它總是提示一個模態視窗,如“使用自簽名證書的應用程式的安全提示”(不能永久隱藏),只是為了信任bcprov.
ofollow,noindex" target="_blank">https://www.java.com/en/download/help/appsecuritydialogs.xml
據我所知,這是因為BC圖書館由“JCE程式碼簽署CA”簽發的BouncyCastle證書籤署.
因此,lib可以執行並充當密碼提供者.
但是:JRE無法構建證書鏈來信任簽名.它顯示“提供者:未知”
我知道我可以刪除該簽名並自己簽名(我擁有一個Thawte程式碼簽名證書):
>它適用於bcpkix lib
>它不適用於bcprov,因為它不會被視為有效的加密提供程式(它不會被JRE信任).
我對嗎?
我能做什麼?
PS:我已經很多地找到JCA根證書(將其放入JRE信任庫),沒有成功…有沒有辦法抓取根CA?
經過大量的搜尋和一些郵件在BC郵件列表….我找到了解決方案,所以我把它放在這裡為其他可能面臨這個問題的人:
解決方案基本上是用我自己的證書第二次簽署BC圖書館.
JAR需要JCA簽名才能作為加密提供者被信任,因此不要將其刪除.
JAR還需要(另外)一個程式碼簽名,以便能夠在JVM中執行(由JRE信任).
最後一件事,簽名技術發生了一些不相容:
> BC lib使用SHA1 digest algorythm進行簽名
> jarsigner(在我的電腦上)預設使用SHA256 digest algorythm進行簽名,這導致驗證失敗.
所以我不得不要求jarsigner做這個SHA1的方法. (由於某種原因,兩個簽名必須從這個角度來看是一致的)
這是jarsigner命令的魔術引數,新增並使其發生:
消泡SHA1
示例命令:
jarsigner -keystore ./mykeystore.jks -storepass myPass -digestalg SHA1 bcprov-jdk15on-149.jar myAlias
…你完成了!
以下帖子給了我提示:What prevents Java from verifying signed jars with multiple signature algorithms
http://stackoverflow.com/questions/19029575/bouncycastle-cryptography-provider-library-used-with-applet-on-java-7u40