正在从 Java 个安全提供程序中删除特定算法
Removing specific algorithms from Java security providers
我有一个 tomcat 7.x servlet 容器,它从其 webapps
目录部署多个 war 文件。我想确保部署在我的 tomcat 中的这些应用程序中有 none 使用 MD5
算法。我可以从 java 通过:
Provider[] providers = Security.getProviders();
for(Provider p : providers) {
p.remove("MessageDigest.MD5");
}
但是,这需要部署在我的 tomcat 中的所有 Web 应用程序都执行相同的操作。对于这个 tomcat 实例,我是否只能在全局范围内执行一次?
一种可能是将其添加到 servlet init 方法中,将 servlet 配置为在从全局部署描述符启动时加载。
我尝试这样做,但在我的 tomcat 实例中,无论我在哪里执行此操作,以下行都不会引发异常:
MessageDigest hash = MessageDigest.getInstance("MD5");
hash.digest("ABCDEFGH".getBytes());
我原以为它会抛出 NoSuchAlgorithmException
因为我删除了 MessageDigest.MD5
。可能是什么原因?
根据 Providers
javadoc:
The service type Provider is reserved for use by the security
framework. Services of this type cannot be added, removed, or modified
by applications.
因此您可以删除 Provider
,但不能从 Provider
中删除单个服务。
我有一个 tomcat 7.x servlet 容器,它从其 webapps
目录部署多个 war 文件。我想确保部署在我的 tomcat 中的这些应用程序中有 none 使用 MD5
算法。我可以从 java 通过:
Provider[] providers = Security.getProviders();
for(Provider p : providers) {
p.remove("MessageDigest.MD5");
}
但是,这需要部署在我的 tomcat 中的所有 Web 应用程序都执行相同的操作。对于这个 tomcat 实例,我是否只能在全局范围内执行一次?
一种可能是将其添加到 servlet init 方法中,将 servlet 配置为在从全局部署描述符启动时加载。
我尝试这样做,但在我的 tomcat 实例中,无论我在哪里执行此操作,以下行都不会引发异常:
MessageDigest hash = MessageDigest.getInstance("MD5");
hash.digest("ABCDEFGH".getBytes());
我原以为它会抛出 NoSuchAlgorithmException
因为我删除了 MessageDigest.MD5
。可能是什么原因?
根据 Providers
javadoc:
The service type Provider is reserved for use by the security framework. Services of this type cannot be added, removed, or modified by applications.
因此您可以删除 Provider
,但不能从 Provider
中删除单个服务。