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 加密算法。
根据我在互联网上所做的知识和研究,目前 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 加密算法。