applet - 在 Java 7 U40上,代碼簽名BouncyCastle加密提供程序庫使用

  显示原文与译文双语对照的内容
141 3

案例:我維護一個使用 BouncyCastle bcpkix-jdk15on-149.jar的Java小程序,英鎊的bcprov-jdk15on-149.jar 。

問題是在_u40版本 7啟用的瀏覽器上運行小程序時。
這種行為已經從版本2 ( 它總是提示一個模式窗口( 不能永久隱藏) 來改變,只是為了信任 bcprov 。

https://www.java.com/en/download/help/appsecuritydialogs.xml

據我所知,這是因為BC庫是使用"jce代碼簽名"頒發的BouncyCastle證書籤名的。 因此,lib可以執行並充當加密提供者。

但是,JRE無法構建信任證書鏈來信任簽名。 它顯示"提供程序:未知"

我知道我可以刪除該簽名並自己簽署( 我擁有一個Thawte代碼簽名證書):

  • 它與 bcpkix lib一起工作
  • 因為它不會被視為有效的加密提供者,所以它不能用英鎊的bcprov 。

我是對的我可以做什麼?
PS: 我搜索了很多,找到了 JCA root 證書( 將它放入JRE信任存儲庫),沒有成功。 是否有辦法抓取 root CA?

时间: 原作者:

143 0

經過大量的搜索和一些在BC郵件列表中的帖子。 我找到解決方案,所以我將它的放到這裡,其他人可能會遇到該問題:

這個解決方案基本上是用我自己的證書再次在BC庫上籤名。
為了被信任作為加密提供者,jar 需要JCA簽名,所以不要刪除它。
為了能夠在 JVM ( 被JRE信任) 中運行,jar 還需要( 另外) 一個代碼簽名。

最後一件事是簽名技術發生了一些不兼容性:

  • 使用SHA1摘要algorythm簽署 BC lib
  • jarsigner ( 在我的電腦上) 在默認情況下使用SHA256摘要algorythm進行簽名,這將導致驗證失敗。
  • 所以我不得不讓jarsigner用SHA1方法做。 ( 由於某些原因,簽名必須與該觀點一致)

下面是jarsigner命令要添加並使它的發生的magic參數: -digestalg

示例命令:


jarsigner -keystore./mykeystore.jks -storepass myPass -digestalg SHA1 bcprov-jdk15on-149.jar myAlias



。你已經完成了 !

以下帖子給了我提示: 什麼阻止Java通過多個簽名演算法驗證簽名 jars

原作者:
...