SAML2 - 使用中间证书升级 SP

SAML2 - Upgrade SP with intermediate certificate

我正在尝试升级 Shibboleth 服务提供商 (sp) 上面向浏览器的证书。现有设置在 shibboleth2.xml 和 sp-metadata.xml 中都有一个证书。实施的片段如下:

shibboleth2.xml:

<CredentialResolver type="Chaining">
   <CredentialResolver type="File" key="sp-key.pem" certificate="sp-cert.pem"/>
</CredentialResolver>

sp-metadata.xml:

<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:KeyName>sp.com</ds:KeyName>
        <ds:X509Data>
            <ds:X509SubjectName>CN=sp.com,C=US</ds:X509SubjectName>
        <ds:X509Certificate>ABCxyz
                    az1234
        </ds:X509Certificate>
    </ds:X509Data>
</ds:KeyInfo>

shibboleth2.xml中提到的sp-cert.pem文件是这样的:

-----BEGIN CERTIFICATE-----
ABCxyz
az1234
-----END CERTIFICATE-----

现在我已经生成了一个新证书,其中包括 sp.com 的域证书 (sp-cert-dom.pem) 和中间证书 (sp-cert-int.pem),内容如下:

sp-cert-dom.pem

-----BEGIN CERTIFICATE-----
abcdef
123456
-----END CERTIFICATE-----

sp-cert-int.pem

-----BEGIN CERTIFICATE-----
UVWXYZ
xa9900
-----END CERTIFICATE-----

我已将两个证书组合成一个文件 (sp-cert1.pem),如下所示:

-----BEGIN CERTIFICATE-----
abcdef
123456
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
UVWXYZ
xa9900
-----END CERTIFICATE-----

然后我更新了 shibboleth2.xml(在将更改通知所有利益相关者之后)以指向新证书:

<CredentialResolver type="Chaining">
   <CredentialResolver type="File" key="sp-key1.pem" certificate="sp-cert1.pem"/>
</CredentialResolver>

但是我一直在想办法用新证书更新 sp-metadata.xml。现在我有以下问题:

1.我真的必须同时提供域和中间证书的详细信息,还是域证书就足够了?

2.如果答案是"both",我的sp-metadata.xml在下面的选项中应该是怎样的?

(a) 同一个 ds:KeyInfo 元素的多个 ds:X509Certificate 元素。

<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:KeyName>sp.com</ds:KeyName>
        <ds:X509Data>
            <ds:X509SubjectName>CN=sp.com,C=US</ds:X509SubjectName>
        <ds:X509Certificate>abcdef
                    123456
        </ds:X509Certificate>
        <ds:X509Certificate>UVWXYZ
                    xa9900
        </ds:X509Certificate>
    </ds:X509Data>
</ds:KeyInfo>

(b) 多个 ds:KeyInfo 元素。

<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:KeyName>sp.com</ds:KeyName>
        <ds:X509Data>
            <ds:X509SubjectName>CN=sp.com,C=US</ds:X509SubjectName>
        <ds:X509Certificate>abcdef
                    123456
        </ds:X509Certificate>
    </ds:X509Data>
</ds:KeyInfo>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:KeyName>Symantec Class 3 Secure Server CA - G4</ds:KeyName>
        <ds:X509Data>
            <ds:X509SubjectName>CN=sp.com,C=US</ds:X509SubjectName>
        <ds:X509Certificate>UVWXYZ
                    xa9900
        </ds:X509Certificate>
    </ds:X509Data>
</ds:KeyInfo>

提前致谢。

PS:我确实查看了 Validating a signature without intermediate certificate,但我的问题没有得到明确的答案。

SP 不关心面向浏览器的证书。面向浏览器的证书(和密钥)通过 Apache httpd[1] 或 IIS [2] 进行管理。 Shibboleth SP 软件使用的密钥和证书通常是自签名的,因为它实际上仅用作存储 public 密钥的载体,因此它通常是 10-20 年的证书。

[1] https://httpd.apache.org/docs/2.4/ssl/
[2] https://technet.microsoft.com/en-us/library/cc732230(v=ws.10).aspx