OPENAM 是否支持 SHA-256 加密

Does OPENAM support SHA-256 encryption

根据我在互联网上所做的知识和研究,目前 OPENAM 似乎不支持 SHA-256 加密。我在我的项目中使用 SAML 身份验证,目前使用不支持 SHA 256 加密的旧 openfed jar。我也浏览了最新的 jar,发现 openam 不支持它。 供参考 .. 以下是 QuerySignatureUtil.java 的片段:

final String querySigAlg;
    final String alg = privateKey.getAlgorithm();
    switch (alg) {
        case "RSA":
            //Defaulting to RSA-SHA1 for the sake of interoperability
            querySigAlg = SystemPropertiesManager.get(SAML2Constants.QUERY_SIGNATURE_ALGORITHM_RSA,
                    XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1);
            break;
        case "DSA":
            //Defaulting to SHA1WithDSA as JDK7 does not support SHA256WithDSA
            querySigAlg = SystemPropertiesManager.get(SAML2Constants.QUERY_SIGNATURE_ALGORITHM_DSA,
                    XMLSignature.ALGO_ID_SIGNATURE_DSA);
            break;
        case "EC":
            querySigAlg = SystemPropertiesManager.get(SAML2Constants.QUERY_SIGNATURE_ALGORITHM_EC,
                    XMLSignature.ALGO_ID_SIGNATURE_ECDSA_SHA512);
            break;
        default:
            SAML2Utils.debug.error(classMethod + "Private Key algorithm not supported: " + alg);
            throw new SAML2Exception(SAML2Utils.bundle.getString("algorithmNotSupported"));
    }

我在网上找到了票https://bugster.forgerock.org/jira/browse/OPENAM-8627

但似乎只针对 .NET fedlet 完成了。

有人可以

首先,SHA-256 不是一种加密算法。

数字签名可以使用SHA256作为摘要算法,是的。正如您在 QuerySignatureUtil 的源代码中看到的那样,实际算法现在是可配置的并且可以占用很多 different values。配置检索是通过代码段中的 SystemPropertiesManager 调用完成的,配置可以来自两个地方:

  • 对于 fedlet:属性应在 FederationConfig.properties 中定义。
  • 对于 OpenAM 服务器,可以在全局设置中的通用联合配置下找到设置。

如果您想查看数字签名实现,那么有两个 class 感兴趣:

  • FMSigProvider:这个 class 处理正确的 XML 签名,所有数字签名都将成为 XML 文档的一部分,根据 xmldsig 规范。
  • QuerySignatureUtil:此class 主要处理查询字符串签名,其规则集不同于常规XML 签名。在这种情况下,签名将不会成为已签名 XML 文档的一部分,而是将签名放在查询字符串中。描述 HTTP 重定向绑定的 SAML binding spec 对此进行了更详细的讨论。

如果你想控制数字签名中的 DigestMethod 值,那么你需要看一下 OPENAM-7778,它在 13.5.0 中实现。

如果您想使用 256 位加密算法对 SAML 消息进行加密,则需要安装 JCE jurisdiction files, after that, you should be able to configure http://www.w3.org/2001/04/xmlenc#aes256-cbc 作为 XML 加密算法。