2016-11-22 77 views
0

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

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添加。

可有人

+0

该主题提到了加密,但代码是关于签名...相当不同。你真的需要知道什么? –

+0

首先感谢回复......实际上,我们希望saml响应能够以256位解密/解密,并且还可以用SHA-256进行数字签名。但它似乎最新的openam jar也不支持SHA-256。 我认为这里有两个不同的东西。第一个是SAML响应的加密/解密,第二个是数字签名的saml响应。 如果你意识到这一点,那么你也可以解释一下(我在这方面的知识有限)。 – user1753210

回答

0

那么首先,SHA-256不是一个加密算法。

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

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

如果你想看看数字签名实现,那么有两种类别的兴趣:

  • FMSigProvider:用适当的XML签名此类交易,所有的数字签名将一部分根据xmldsig规范的XML文档。
  • QuerySignatureUtil:该类主要处理查询字符串签名,它具有与常规XML签名不同的一组规则。在这种情况下,签名不会是签名的XML文档的一部分,而是签名将被放在查询字符串中。描述HTTP-Redirect绑定的SAML binding spec更详细地讨论了这一点。

如果你想在数字签名中控制DigestMethod值,那么你需要在OPENAM-7778来一看,这是在13.5.0实施。

如果您想要使用256位加密算法加密SAML消息,那么您将需要安装JCE jurisdiction files,之后,您应该能够将http://www.w3.org/2001/04/xmlenc#aes256-cbc配置为XML加密算法。

+0

感谢Peter的帮助。我正在研究有关这方面的细节,现在我已经有了与SAML的数字签名和加密相关的公平想法。 但我无法看到该算法可在QuerySignatureUtil.java中配置。你能否指出我可以配置的代码部分? – user1753210

+0

也可以请你也帮我理解签名验证完成的地方。什么是FMSigProvider.class和QuerySignatureUtil.class的用法 签名方法和摘要方法之间的区别也是如此。我理解SignatureMethod算法意味着要签名的内容首先被散列(消解) 在此先感谢您的帮助。 – user1753210

+0

我已更新我的回复以包含更多详细信息。恐怕我不知道DigestMethod和SignatureMethod确定的摘要之间有什么区别。如果你知道,请让我知道。 :) –