Java アプリケーションで FIPS 180-3 を有効にしようとしています。FIPS 180-3 では、5 つの安全な [ハッシュ] (http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf) の使用のみが許可されていますが、MD5 はその 1 つではありません。したがって、Sun プロバイダーから MD5 アルゴリズムをプログラムで削除しようとしています。これがサンプルコードです。
public static void main(String[] args) throws Exception {
Security.removeProvider("SUN");
Sun sun = new Sun();
sun.remove("MessageDigest.MD5"); //Comment and it will work !!!
Security.addProvider(sun);
Cipher ciph = Cipher.getInstance("AES");
}
しかし、これは次の例外をスローしています。「sun.remove(..」とコメントすると、プログラムは正常に動作します。MD5 の代わりに MD2 を削除すると、正常に動作します。
私には、jre ライブラリが署名に MD5 を使用しているように見えますが、jre/lib/ext/sunjce_provider.jar 署名者とその使用 sha1 を確認しました。
私のコードがこのエラーで失敗する理由は何ですか?
TestRemoveMD5.main(TestRemoveMD5.java:20) での javax.crypto.Cipher.getInstance(DashoA13*..) でのスレッド「メイン」java.lang.ExceptionInInitializerError での例外
原因: java.lang.SecurityException: Cannot set up certs for trusted CAs at javax.crypto.SunJCE_b.(DashoA13*..) ... 3 詳細
原因: java.lang.SecurityException: javax.crypto.SunJCE_b.d(DashoA13*..) で javax.crypto.SunJCE_b.c(DashoA13*..) で javax.crypto.SunJCE_b$1 で署名クラスが改ざんされました.run(DashoA13*..) at java.security.AccessController.doPrivileged(Native Method) ... 4 詳細