正在从 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 中删除单个服务。