为SP生成OpenSaml MetaData

时间:2015-09-15 12:19:32

标签: java cryptography opensaml

我正在尝试使用SAML2实现SSO,我的应用程序是多租户并充当SP。我目前正致力于生成SP元数据,但我有点卡在加密方面,似乎没有找到任何例子,除了Stefan Rasmusson在那里推出的东西(我甚至买了他的书),但没有一个它似乎涵盖了元数据的生成。我的问题是,对于元数据中包含的公钥,生成这些公钥的最佳方法是什么。我应该使用我现有的用于签署其余消息的jks,即:authnrequests等,还是这些密钥应该是单独的,并且密钥是否应该唯一用于验证签名和加密数据?我有点迷茫,并没有找到太多的文件,所以任何帮助将不胜感激。我看过这篇文章:http://blog.samlsecurity.com/2012/02/generating-metadata-with-opensaml.html但似乎他正在动态生成密钥,这在生产中无法真正起作用。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在制作中,你肯定不会动态生成密钥。您必须使用IDP注册SP元数据,这样才能轻松实现(除非IDP在您的控制范围内)。

允许SP to have two private keys,一个用于签名,一个用于加密/解密,但这不是强制性的。我遇到的大多数生产案例都使用相同的密钥。我希望这会有所帮助。

看起来你已经解决了Shibboleth SP设置,所以这个答案的其余部分似乎没必要。但为了完整起见,以下是获得工作Shibboleth SP的步骤。

  • 获取或构建私钥存储和证书。这可以是自签名的,也可以来自CA
  • 为SP创建元数据文件并将其注册到联合。 “签名”和“加密”部分的条目将包含在上一步中获得的证书。
  • 为SP将接受的各种SAML绑定指定AssertionConsumerService URL。国内流离失所者将回复其中一个网址

示例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>