Atu*_*man 6 java security jce fips
我正在尝试在我的java应用程序上启用FIPS 180-3.FIPS 180-3只允许使用5个安全[哈希](http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf),MD5不是其中之一.因此,我试图以编程方式从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");
}
Run Code Online (Sandbox Code Playgroud)
但这是抛出以下异常.如果你评论"sun.remove(.."该程序工作正常.如果我删除MD2,而不是MD5,那么它也可以正常工作.
对我来说,看起来jre libs正在使用MD5进行签名,但我检查了jre/lib/ext/sunjce_provider.jar签名者及其使用sha1.
知道为什么我的代码失败了这个错误?
TestRemoveMD5.main中的javax.crypto.Cipher.getInstance(DashoA13*..)中的线程"main"java.lang.ExceptionInInitializerError中的异常(TestRemoveMD5.java:20)
引起:java.lang.SecurityException:无法在javax.crypto.SunJCE_b上为受信任的CA设置证书.(DashoA13*..)... 3更多
引起:java.lang.SecurityException:签名类已经被javax.crypto.SunJCE_b中的javax.crypto.SunJCE_b.d(DashoA13*..)篡改了javax.crypto.SunJCE_b $ 1 .run(DashoA13*..)at java.security.AccessController.doPrivileged(Native Method)... 4更多
这是一项安全功能,可防止不受信任的代码删除 Sun 提供程序。有一种方法可以做到这一点,这需要拥有适当的权限才能做到这一点。如果您访问此链接http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html并向下滚动到标题标题“安全类”,您可以阅读如何删除一个提供者将会发生什么。
编辑
文档摘录介绍了已安装的非扩展提供程序可能需要策略文件来执行某些操作,例如添加和删除提供程序。值得一试。
您将使用的每个提供商的供应商提供的文档应包含有关其需要哪些权限以及如何授予此类权限的信息。例如,如果提供商未安装扩展并且安装了安全管理器,则提供商可能需要以下权限
-
Security 类管理已安装的提供程序和安全范围的属性。它只包含静态方法并且从不实例化。添加或删除提供程序以及设置安全属性的方法只能由受信任的程序执行。目前,“可信程序”是
- 不在安全管理器下运行的本地应用程序,或者
- 有权执行指定方法的小程序或应用程序(见下文)。
确定代码被认为是可信的以执行尝试的操作(例如添加提供程序)需要为该特定操作授予小程序适当的权限。
-
此类文件中的每个“grant”语句都会向指定的代码源授予一组权限,指定允许哪些操作。
以下是策略配置文件示例:
Run Code Online (Sandbox Code Playgroud)grant codeBase "file:/home/sysadmin/", signedBy "sysadmin" { permission java.security.SecurityPermission "insertProvider.*"; permission java.security.SecurityPermission "removeProvider.*"; permission java.security.SecurityPermission "putProviderProperty.*"; };
归档时间: |
|
查看次数: |
1687 次 |
最近记录: |