簡體   English   中英

如何使用Java 8從Microsoft密鑰庫加載下一代證書?

[英]How to load Next Generation certificates from the Microsoft keystore using Java 8?

我正在嘗試直接從Microsoft商店加載證書,以避免必須從MS商店導出證書,然后將它們導入JKS商店。

我設法使用SunMSCAPI直接從MS商店使用傳統加密從典型的AD CS Web服務器模板創建證書。

但是,SunMSCAPI不支持我正在使用的現代CNG密碼,特別是RSA-2048非對稱加密,SHA-384散列和ECDSA-384數字簽名。

是否可以使用Java從MS商店加載下一代證書? 我在jdk1.8.0_45。 是否有可以處理CNG的現有JCE提供商替代SunMSCAPI? 我懷疑它必須使用JNI或JNA來訪問本機Windows CNG API。

我試過Pheox JCAPI但沒有成功。 它支持RSA和DSA,但不支持ECDSA。 我沒有嘗試過Bouncy Castle,但我的理解是它沒有提供這樣的能力。

還有其他現成的JCE提供商替代SunMSCAPI可以處理我可以嘗試的CNG嗎?

更新: JCAPI v2僅支持明年針對v3計划的RSA,ECDH支持。

更新:有人建議為Java 8安裝Java Cryptography Extension(JCE)Unlimited Strength Jurisdiction Policy Files也許可以解決這個問題,但是沒有,這沒有幫助,因為問題是SunMSCAPI僅支持RSA密碼,可以看出看源代碼

如前所述,SunMSCAPI尚未實現這一點。 實際上有一個增強請求打開,人們可以投票支持修復問題。

問題在這里: https//bugs.openjdk.java.net/browse/JDK-8026953

規范說明

由於某些國家/地區的導入法規,Oracle實施提供了默認的加密管轄區域策略文件,該文件限制了加密算法的強度。

如果需要更強大的算法(例如,具有256位密鑰的AES),則必須獲取JCE Unlimited Strength Jurisdiction Policy Files並將其安裝在JDK / JRE中。

用戶有責任根據當地法規驗證此操作是否允許。

下載JCE Unlimited Strength Jurisdiction Policy Files並將其放入jre安全文件夾中。

下一代api沒有在sunmscapi c ++代碼中實現 - 文件security.cpp - ,它與windows crypto api交互。 EC也沒有在sunmscapi的java代碼中實現。

你可以在這里查看openJDK的源代碼: http ://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/556b17038b5c/src/windows/native/sun/security/mscapi/security.cpp

當您從Java代碼調用keystore.load(null,null)時,它最終會以c ++代碼函數Java_sun_security_mscapi_KeyStore_loadKeysOrCertificateChains結束。 第383行CryptAcquireCertificatePrivateKey返回false,因為它沒有使用CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG標志。 即使你修復了那條線,它最終也會崩潰。 因為它使用舊的加密api函數。

讓它工作意味着使用新的下一代加密api自行重寫所有sunmscapi。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM