通過 AD Enterprise CA 的 Java 部署規則集
我的目標是在我的組織中建立一個 Java 部署規則集,但是當我們有一個通過 Active Directory 執行的有效 CA 時,我不想向第三方證書頒發機構支付程式碼簽名證書。我遵循了我認為正確的程序來完成這項工作,但是當我最終執行任何 Java 小程序時,我收到以下錯誤:
無法驗證自簽名部署規則集 jar
我遵循的步驟是:
- 導出我們的根 CA 證書
- 將根證書導入到 JRE 安裝路徑中的 cacerts
- 將根證書導入個人密鑰庫
- 使用 keytool 為帶有個人密鑰庫的新證書生成 CSR
- 使用 certreq 向企業 CA 送出 CSR,帶有“程式碼簽名”模板
- 將該證書導入個人密鑰庫
- 創建了一個非常基本的部署規則集並將其編譯到一個 jar 中
- 使用步驟 6 中個人密鑰庫中的證書對 jar 進行簽名
- 將簽名的 jar 複製到 \Windows\Sun\Java\Deployment\
上述步驟全部完成,沒有錯誤 - 與無效證書鍊等無關。我可以在 Java 控制面板中看到根 CA 證書,當我點擊控制面板中的部署規則集連結並查看其證書時,我會看到第 6 步中的證書及其父 CA,兩者都有未來的到期日期和據我所知的正確資訊。但是我在執行任何小程序時仍然收到驗證錯誤
那麼 - 是否根本不可能做到這一點,我們必須支付證書費用?還是我(希望)做錯了什麼?如果有人有任何見解,將不勝感激,謝謝!
找到修復。
我們遇到了完全相同的問題。我嘗試了上面提到的所有方法,但沒有任何效果。Chrome 似乎沒有正確提取 Windows 證書管理器,或者至少無法驗證我們企業 CA 的簽名。我嘗試將我們的根 CA 證書和我們的從屬 CA 證書添加到所有系統密鑰庫,但均未成功。
問題是 Chrome 只查看使用者密鑰庫,而不是出於某種奇怪的原因查看系統密鑰庫。在我將 RootCA 證書添加到 USER SIGNER CA 之後,它就起作用了。
不起作用:
%JAVA_HOME%\lib\security\cacerts
作品:
%USERPROFILE%\AppData\LocalLow\Sun\Java\Deployment\security\trusted.cacerts
Google 或 JAVA 應該會解決這個問題。
現在是時候為我們的使用者編寫注入腳本了。
我的問題是新的 Java 更新沒有刪除舊的 DeploymentRuleSet.jar,它只被一些以前的版本使用,在我的例子中,它位於:
C:\Windows\Sun\Java\Deployment\DeploymentRuleSet.jar
此文件夾中的文件不依賴於 Java 安裝文件夾的位置,即使 Oracle 從 Java 中刪除了 Sun 名稱(因此,在較新版本的 Java 中更改了一些文件位置),上面給出的文件仍保留在系統中,並且似乎新版本的 Java 繼續使用它。
在 Oracle 刪除 Java 小程序的中等安全設置後,與 Java 相關的所有內容都停止工作,只是報告“無法驗證規則集 jar”,並且網際網路上沒有提供任何解決方案。
我通過掃描系統資料庫中的 Java 字元串找到了這個文件夾,以從 mu 系統中清除與 Java 相關的所有內容並進行全新安裝,結果證明是問題所在。為什麼最新版本的 Java 繼續使用這個文件?
由於我從系統中刪除了這個 jar 文件(在我的 3 台電腦上,在 32 位和 64 位的 Windows 7 上都是同樣的問題),Java 可以正常工作,但我在 Internet 上的任何地方都沒有找到這個解決方案。