在 php 中对 soap 标头进行数字签名


Digitally Sign soap headers in php

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

一段时间以来,不支持 PHP 的 WSF,让它与最新的 PHP 版本一起工作很痛苦(请详细说明您的开发环境)。Axis2/c 是 WSF for PHP 背后的主要 Soap 框架,始终保持维护,但不活跃。( 和 1.6.0 的内存 )但是,有些人正在处理发布 1.7.0。

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

目前尚不清楚您要签署什么。如果您指的是实现用户名令牌,您可以尝试自己安装 WSF for PHP。您需要根据 SOAP 协定设置 WSUsernameToken 和 WSPolicy 对象,分别使用凭据和策略。否则,如果您指的是签署 Soap 标头的某些部分(例如 WS-Adressing(回复等),请告知。

因此,如果您谈论的是用户名令牌,则有效的策略是:

<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 扩展。在这里,您将找到该项目。

如果您在 Ubuntu 和 PHP>= 5.6 下运行,您可以尝试使用此解决方案并提供一些额外的反馈。我向后移植了标头,安全令牌,策略,错误,客户端,消息。我将继续改进它,仍然缺少一些功能。安装并不容易,需要编译所有内容

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