当前位置: 首页 > 知识库问答 >
问题:

签名和加密策略

吕永寿
2023-03-14

我需要实现一个jax-ws客户机。

以下是提供商文档对安全性的看法

目前,我们在http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf

本标准使用了W3C规范中的另外两个标准:
XMLENC(http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/)
和XMLDSIG(http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/)

对于签名,必须使用直接“引用”的“SecurityTokenReference”,指定X509的“URI”和“valueType”。对于加密,我们也建议使用它,但我们也支持按优先顺序引用keyIdentifier、X509IssuerSerial或keyName。

加密和签名的块必须是“主体”标签。

我们建议使用:“rsa-sha1”表示签名,“rsa-1_5”表示加密密钥,“tripledes cbc”表示加密体。

所以我想出了以下策略(从netbean生成)。但是......在我看来不太对劲。网络服务还不能访问,但是我不确定规范版本是否匹配。我读了很多关于这个主题的文章,但是我仍然有些困惑。这个策略看起来可以吗?

<wsp1:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoapPolicy">
    <wsp1:ExactlyOne>
        <wsp1:All>
            <sp:TransportBinding>
                <wsp1:Policy>
                    <sp:TransportToken>
                        <wsp1:Policy>
                            <sp:HttpsToken RequireClientCertificate="false"/>
                        </wsp1:Policy>
                    </sp:TransportToken>
                    <sp:Layout>
                        <wsp1:Policy>
                            <sp:Lax/>
                        </wsp1:Policy>
                    </sp:Layout>
                    <sp:AlgorithmSuite>
                        <wsp1:Policy>
                            <sp:TripleDesRsa15/>
                        </wsp1:Policy>
                    </sp:AlgorithmSuite>
                </wsp1:Policy>
            </sp:TransportBinding>
            <sp:Wss10/>
            <sp:EndorsingSupportingTokens>
                <wsp1:Policy>
                    <sp:X509Token sp:IncludeToken="html" target="_blank">http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                        <wsp1:Policy>
                            <sp:WssX509V3Token10/>
                        </wsp1:Policy>
                    </sp:X509Token>
                </wsp1:Policy>
            </sp:EndorsingSupportingTokens>

        </wsp1:All>
    </wsp1:ExactlyOne>
</wsp1:Policy>
<wsp:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoap_perform_Input_Policy">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp1:SignedEncryptedSupportingTokens>
                <wsp:Policy>
                    <sp1:X509Token sp1:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                        <wsp:Policy>
                            <sp1:WssX509V3Token10/>
                        </wsp:Policy>
                    </sp1:X509Token>
                </wsp:Policy>
            </sp1:SignedEncryptedSupportingTokens>
        </wsp:All>
    </wsp:ExactlyOne>

</wsp:Policy>

编辑:我还不能让它用wsit发送预期的消息。例如,使用Netbeans向导,如果不使用寻址,我无法获得加密的头。这有可能吗?

我用旧的轴1类和wss4j破解了一些东西,它可以工作,但它很丑,我宁愿使用更具未来性的东西。

共有2个答案

程枫
2023-03-14

也许你想试试CXF而不是WSIT?http://cxf.apache.org/docs/ws-security.html

邬浩涆
2023-03-14

你看起来很困惑。一般来说,你应该有一个单一的政策。在您的情况下,您可能会接受不安全的web服务调用,因为您有一个定义传输绑定(https)的策略,而另一个则没有。

此外,由于您有一个传输绑定,这意味着整个正文将由传输协议(https)加密。不需要显式指定正文加密。实际上,这个绑定将加密除http头之外的所有内容。

传输绑定确实是获得安全web服务的最简单方法。如果想要完全控制,就必须根据需要编写自己的对称或非对称绑定。Asymetric更复杂,因为它需要双方都有一个证书,而Asymetric只需要一个服务器证书(接受匿名客户端)。不对称和对称绑定需要小心。它们的设计非常灵活,允许您设计任何策略,即使容易受到某些攻击。

当不使用传输绑定时,您必须指定主体必须被加密。如规格中所述:

sp:EncryptedParts/sp:Body

或翻译成xml:

<sp:EncryptedParts>
  <sp:Body/>
</sp:EncryptedParts>

同样,如果你想在正文上签名:

<sp:SignedParts>
  <sp:Body/>
</sp:SignedParts>

还有更多选项可以指定签名/加密顺序,是否加密签名等。

顾名思义,sp:EndorsingSupportingToken等策略适用于支持令牌。我熟悉的类型是可以包含在web服务请求中的用户名令牌。

WS-SecurityPolicy规范是我读过的理解策略最有用的文档。您应该花时间彻底阅读这篇文档。它非常详细,包含有用的示例。阅读不同版本的文档是很好的,因为某些方面在最近的版本中会有更好的记录。注意我链接了v1.3。

设置web服务客户端和服务器,并编写简单的测试。尤其是如果你是网络服务新手。

SoapUI是一个可以帮助你快速制定政策的工具。它并不完全支持我需要的东西,但它帮助我学到了一些东西。它有一个很好的用户界面,使用起来并不困难。

获取一些示例或构建一些示例,然后在规范的帮助下解构它们。

我发现政策相当复杂。准备好吸收很多概念!

 类似资料:
  • web应用安全的黄金法则是,永远不要相信来自不可信来源的数据。有时通过不可信的媒介来传递数据会非常方便。密码签名后的值可以通过不受信任的途径传递,这样是安全的,因为任何篡改都会检测的到。 Django提供了用于签名的底层API,以及用于设置和读取被签名cookie的上层API,它们是web应用中最常使用的签名工具之一。 你可能会发现,签名对于以下事情非常有用: 生成用于“重置我的账户”的URL,并

  • 我使用PdfWriter setEncryption对PDF文档进行了加密/解密。一切正常,解密也正常。 当我为数字签名的PDF文档做同样的事情时,我的数字信息与消息一起损坏(SigDict/Contents非法数据) 是否可以在不影响数字签名信息的情况下加密PDF?

  • 我想验证某个有效负载的签名,给定一个公共ECDSA密钥,并且我事先知道签名是正确的。我想使用密码学python库,但问题是,我无法使验证工作并且总是得到异常,即使签名应该是正确的。 这是我当前使用的代码片段。公钥是基64编码和DER格式(所以没有等),签名也是基64编码的。该消息是一些字符串形式的 JSON 数据,没有空格。 这将导致以下错误。 我知道签名肯定有效的原因是因为我尝试了另一个名为ec

  • 我正在尝试使用加密来验证open-ssl签名,这是open-ssl部分: 现在在我的C代码中: 但是我总是收到验证失败的消息

  • 本文向大家介绍php接口数据加密、解密、验证签名,包括了php接口数据加密、解密、验证签名的使用技巧和注意事项,需要的朋友参考一下 代码很简单,这里就不多废话了,直接奉上代码 以上就是本文所述的全部内容了,希望本代码能给大家学习php加密解密能够带来些帮助。

  • 本文向大家介绍Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签,包括了Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签的使用技巧和注意事项,需要的朋友参考一下 Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签,具体代码如下所示: ps:Python3 RSA加密