如何使用 WSS4J 在 KeyInfo 元素中生成 X509Data 和 KeyValue

How to Generate both X509Data and KeyValue within KeyInfo Element with WSS4J

我需要生成 SAML 断言的 KeyInfo 元素,该断言同时具有带有 X509 证书的 X509Data 元素和带有 public 密钥的 KeyValue 元素。它应该是这样的:

                        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                            <ds:X509Data>
                                <ds:X509Certificate>MIIGLTCquvS ... </ds:X509Certificate>
                            </ds:X509Data>
                            <ds:KeyValue>
                                <ds:RSAKeyValue>
                                    <ds:Modulus>vOksZtPkaxkdxN ..... </ds:Modulus>
                                    <ds:Exponent>AQAB</ds:Exponent>
                                </ds:RSAKeyValue>
                            </ds:KeyValue>
                        </ds:KeyInfo>

我将 Wss4jOutInterceptor 和 CXF 与 SAMLCallback 一起使用来生成断言。我可以让它生成 X509Data 或 KeyValue,但不能同时生成两者。这必须在 SubjectConfirmationData 以及断言的签名中。我已经看到一些答案,您可以使用 OpenSAML 并手动构建它,但我希望有一种使用 WSS4J 的更简单的方法。

提前致谢

您可以通过在 KeyInfoBean.setElement() 上设置 DOM 元素来添加自定义 KeyInfo 元素。目前还没有办法对 Signature KeyInfos 做同样的事情。我已在当前​​代码库中修复此问题:

https://issues.apache.org/jira/browse/WSS-619

这是包含测试的提交:

http://svn.apache.org/viewvc?view=revision&revision=1817084

尽管使用 CXF 的 WSS4JOutInterceptor 连接它可能需要一些努力。