在 php 中对 soap headers 进行数字签名

Digitally Sign soap headers in php

我正在使用本机 php SoapClient 创建一个客户端来使用 Web 服务。我需要签署 soap 请求 headers 以向服务器发出请求。有没有人这样做过?我找不到最新信息。有一个名为 WSF 的 php 扩展,但它很旧(已经 6 年没有更新了。)。如果您以前做过此操作,请告诉我。提前谢谢你。

用于 PHP 的 WSF 暂时不受支持,很难让它与最新的 PHP 版本一起工作(请详细说明您的开发环境)。 Axis2/c PHP 的 WSF 背后的主要 Soap 框架始终得到维护,但并不活跃。 (并且充满了 1.6.0 的内存泄漏)但是,有些人正在处理发布 1.7.0.

当我们谈论签名时,我们指的是实施 WS-Security 策略。在后台这是一个名为 Rampart/c 的 Axis2/c 模块。 Rampart/c 是 ATTIC(参见 http://attic.apache.org/),意思是已弃用,但仍然可以与最新的 Axis2/c(svn trunk)

不清楚你要签署什么。如果您指的是实现用户名令牌,您可以尝试自己为 PHP 安装 WSF。您将需要根据您的 soap 合同设置 WSUsernameToken 和 WSPolicy objects,分别使用凭据和策略。否则,如果您指的是签署您的肥皂的某些部分 Headers(例如 WS-Adressing(replyTo 等),请指教。

因此,如果您谈论的是 UsernameToken,则可行的政策是:

<wsp:Policy wsu:Id="RmPolicy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy" xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" xmlns:sanc="http://ws.apache.org/sandesha2/c/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:ExactlyOne>
    <wsp:All>
<sp:TransportBinding>
            <wsp:Policy>
            </wsp:Policy>
        </sp:TransportBinding>
        <sp:SignedSupportingTokens>
            <wsp:Policy>
                <sp:UsernameToken
                    sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                    <wsp:Policy>
                        <sp:WssUsernameToken10 />
                    </wsp:Policy>
                </sp:UsernameToken>
            </wsp:Policy>
        </sp:SignedSupportingTokens
    </wsrm:RMAssertion>
    </wsp:All>
</wsp:ExactlyOne>

我决定使用 PHPCPP 为 Axis2/c(仅客户端)重写一个 Php 扩展。 Here you will find the project.

如果您 运行 低于 Ubuntu 并且 PHP >= 5.6,您可以尝试使用此解决方案并提供一些额外的反馈。我向后移植了 header、SecurityToken、Policy、Fault、Client、Message.. 我会继续改进它,但仍有一些缺失的功能。安装不容易,需要全部编译

现在关于在原生中完成这项工作 PHP.. 不知道。