2015-09-15 48 views
0

我正在嘗試使用SAML2實現SSO,並且我的應用程序是多租戶的,並充當SP。我目前正致力於生成SP元數據,但我有點卡在加密方面,似乎找不到任何例子,除了斯特凡Rasmusson已經在那裏(我甚至買了他的書),但沒有它似乎涵蓋了元數據的生成。我的問題是,對於包含在元數據中的公鑰,什麼是生成這些公鑰的最佳方式。我是否應該使用現有的用於簽署其餘消息的jks,即:authnrequests等,或者這些密鑰是否應該是單獨的,並且密鑰對於驗證簽名與加密數據是否應該是唯一的?我有點迷路了,一直沒能找到很多文件,所以任何幫助,將不勝感激。我曾看過這篇文章:http://blog.samlsecurity.com/2012/02/generating-metadata-with-opensaml.html,但似乎他正在動態生成密鑰,這在生產中並不真正起作用。先謝謝您的幫助!生成SP的OpenSaml元數據

回答

1

在製作中,你當然不會在飛行中生成密鑰。您必須向IDP註冊您的SP元數據,這樣纔不會輕鬆工作(除非IDP由您掌控)。

允許使用SP to have two private keys,一個用於簽名,另一個用於加密/解密,但這不是強制性的。我遇到的大多數生產案例都使用相同的密鑰。我希望這有幫助。

看起來好像你有Shibboleth SP設置已經解決了,所以這個答案的其餘部分可能看起來沒有必要。但爲了完整性,以下是獲得Shibboleth SP的步驟。

  • 獲取或構建私鑰存儲和證書。這可以是自簽名的,也可以是自簽名的。爲SP創建元數據文件並將其註冊到聯合身份驗證。 「簽名」和「加密」部分的條目將包含上一步中獲取的證書。
  • 指定SP將接受的各種SAML綁定的AssertionConsumerService URL。該IDP將響應發送回這些網址中的一個

樣品SP元數據的XML文檔想下面:

<md:EntityDescriptor entityID="https://mysp.example.com/shibboleth-sp" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> 
    <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> 
     <md:KeyDescriptor use="signing"> 
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
       <ds:KeyName>mysp.example.com</ds:KeyName> 
       <ds:X509Data> 
      <ds:X509Certificate xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
       REPLACE_ENTITY_ID_AND_ACS_URL_AND_PUT_YOUR_CERTIFICATE_HERE 
      </ds:X509Certificate> 
       </ds:X509Data> 
      </ds:KeyInfo> 
     </md:KeyDescriptor> 
     <md:KeyDescriptor use="encryption"> 
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
       <ds:KeyName>mysp.example.com</ds:KeyName> 
       <ds:X509Data> 
      <ds:X509Certificate xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
       REPLACE_ENTITY_ID_AND_ACS_URL_AND_PUT_YOUR_CERTIFICATE_HERE 
      </ds:X509Certificate> 
       </ds:X509Data> 
      </ds:KeyInfo> 
     </md:KeyDescriptor> 
     <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://mysp.example.com/shibboleth/Shibboleth.sso/SAML2/POST" index="1"/> 
     <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" Location="http://mysp.example.com/shibboleth/Shibboleth.sso/SAML2/Artifact" index="2"/> 
     <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:artifact-01" Location="http://mysp.example.com/shibboleth/Shibboleth.sso/SAML/Artifact" index="3"/> 
     <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:browser-post" Location="http://mysp.example.com/shibboleth/Shibboleth.sso/SAML/POST" index="4"/> 
    </md:SPSSODescriptor> 
</md:EntityDescriptor>