【问题标题】:Digitally Sign soap headers in php在php中对soap标头进行数字签名
【发布时间】:2016-07-09 14:12:56
【问题描述】:

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

【问题讨论】:

    标签: php soap soap-client ws-security soapheader


    【解决方案1】:

    WSF for PHP 已经有一段时间不支持了,让它与最新的 PHP 版本一起工作很痛苦(请详细说明您的开发环境)。 WSF for PHP 背后的主要 Soap 框架 Axis2/c 始终得到维护,但并不活跃。 (并且对 1.6.0 充满了 memleak)但是,有些人正在处理发布 1.7.0。

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

    不清楚您要签署什么。如果您提到实现用户名令牌,您可以尝试自己安装 WSF for PHP。您将需要根据您的肥皂合同分别设置 WSUsernameToken 和 WSPolicy 对象,以及凭据和策略。否则,如果您指的是对 Soap 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 下运行,您可以尝试使用此解决方案并提供一些额外的反馈。我对标头、SecurityToken、Policy、Fault、Client、Message 进行了反向移植。我会继续改进它,但仍然缺少一些功能。安装并不容易,需要编译所有东西

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

    【讨论】:

    • 隧道尽头的一盏灯......不幸的是,我的解决方案必须是纯原生 php。谢谢你的时间:D
    猜你喜欢
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2010-09-30
    • 2018-12-07
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多