2016-11-22 79 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確定的摘要之間有什麼區別。如果你知道,請讓我知道。 :) –