C#安全策略到WSO2 ESB策略的转换

C#安全策略到WSO2 ESB策略的转换,c#,wso2,C#,Wso2,我得到了一些关于访问安全后端服务的文档,该服务假定消费者正在编写C#客户端。此服务需要使用X.509证书的签名部件 虽然我理解这个概念,但我不确定如何将策略信息从C#转换为适合ESB的策略文档(我的ESB示例是) 谷歌让我提出了与过去基本相同的问题,但不幸的是,它指出的任何东西现在都会出现404个错误,所以我希望这里的人至少能帮助我理解如何从C#到WS-Policy C#的政策说明如下: http://docs.oasis-open.org/wss/2004/01/oasis-200401-w

我得到了一些关于访问安全后端服务的文档,该服务假定消费者正在编写C#客户端。此服务需要使用X.509证书的签名部件

虽然我理解这个概念,但我不确定如何将策略信息从C#转换为适合ESB的策略文档(我的ESB示例是)

谷歌让我提出了与过去基本相同的问题,但不幸的是,它指出的任何东西现在都会出现404个错误,所以我希望这里的人至少能帮助我理解如何从C#到WS-Policy

C#的政策说明如下:


http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3
CN=证书颁发机构
C=NZ,S=XX,L=XX,O=XX,
OU=XX,CN=XX,E=XX
Jt67O6jYvOIdA2ffdZx6nI2NQBc=
wsp:Body()wsp:Header(wsa:Action)wsp:Header(wsa:FaultTo)wsp:Header(wsa:From)
wsp:Header(wsa:MessageID)wsp:Header(wsa:RelatesTo)wsp:Header(wsa:ReplyTo)
wsp:Header(wsa:To)wse:Timestamp()
我已经将WSDL很好地加载到ESB中,并且我认为我已经找到了doco,它将涵盖如何使用证书(),所以我真正困惑的就是这一部分

为清楚起见,最终游戏是:

{非安全本地客户端}-->{ESB}-->{secured BE service}

文件中给出的其他可能相关的信息-另一个非政策性C#示例

using Microsoft.Web.Services2;
using Microsoft.Web.Services2.Security;
using Microsoft.Web.Services2.Security.Tokens;
using Microsoft.Web.Services2.Security.X509;

[... class definition ...]

///<summary>
/// Applies the certificate to the specified proxy .
///</summary>
///<param name="proxy">The web service proxy to apply the signature to.</param>
///<param name="certificate">The certificate to use to sign the message parts.</param>
private static void ApplyCertificate(WebServicesClientProtocol proxy, X509Certificate certificate)
{
    // get the current context
    SoapContext requestContext = proxy.RequestSoapContext;
    // create the token and signature
    X509SecurityToken signatureToken = new X509SecurityToken(certificate);
    requestContext.Security.Tokens.Add(signatureToken);
    MessageSignature signature = new MessageSignature(signatureToken);
    requestContext.Security.Elements.Add(signature);
    // set the TTL of the message, prevents replay attacks
    requestContext.Security.Timestamp.TtlInSeconds = 60;
}
使用Microsoft.Web.Services2;
使用Microsoft.Web.Services2.Security;
使用Microsoft.Web.Services2.Security.Tokens;
使用Microsoft.Web.Services2.Security.X509;
[…类定义…]
///
///将证书应用于指定的代理。
///
///要应用签名的web服务代理。
///用于对消息部分进行签名的证书。
私有静态无效ApplyCertificate(WebServicesClientProtocol代理,X509证书)
{
//获取当前上下文
SoapContext requestContext=proxy.RequestSoapContext;
//创建令牌和签名
X509SecurityToken signatureToken=新的X509SecurityToken(证书);
requestContext.Security.Tokens.Add(signatureToken);
MessageSignature signature=新MessageSignature(signatureToken);
requestContext.Security.Elements.Add(签名);
//设置消息的TTL,防止重播攻击
requestContext.Security.Timestamp.TtlInSeconds=60;
}
任何帮助或指点都将不胜感激

干杯,
Daniel

你不能访问谷歌的404文档缓存吗?我可以访问缓存版本,但我得到的版本似乎都回答不了太多,可能是缓存的内容和由于表单使用时间过长而通常丢失的内容的混合(它们缺少附件,总体上看起来像是未完成的对话)。我想我的主要问题是弄清楚如何解释当前要签名的消息部分,以尝试获得正确的形式。我相信我会做到的,但是任何可以减少试错过程中错误的指针都会很有帮助。你有一些密钥库吗?我的意思是你能创建你的*.cer文件吗?嗨,雷扎,我不太确定你的意思是什么?我将私钥和公钥以及远程端公共证书加载到密钥库中。我现在已经将所有内容都放到了ESB中,但我不知道我黑客攻击的策略文件是否暗示了正确的内容,或者它是否被正确提取。我现在正在研究我在那里看到的错误;似乎有一半的时间我得到了“请求中缺少wsse:Security header”,另一半时间我得到了一个NullPointerException,所以试图确定是什么导致了这两个错误,以及在哪里。。。
using Microsoft.Web.Services2;
using Microsoft.Web.Services2.Security;
using Microsoft.Web.Services2.Security.Tokens;
using Microsoft.Web.Services2.Security.X509;

[... class definition ...]

///<summary>
/// Applies the certificate to the specified proxy .
///</summary>
///<param name="proxy">The web service proxy to apply the signature to.</param>
///<param name="certificate">The certificate to use to sign the message parts.</param>
private static void ApplyCertificate(WebServicesClientProtocol proxy, X509Certificate certificate)
{
    // get the current context
    SoapContext requestContext = proxy.RequestSoapContext;
    // create the token and signature
    X509SecurityToken signatureToken = new X509SecurityToken(certificate);
    requestContext.Security.Tokens.Add(signatureToken);
    MessageSignature signature = new MessageSignature(signatureToken);
    requestContext.Security.Elements.Add(signature);
    // set the TTL of the message, prevents replay attacks
    requestContext.Security.Timestamp.TtlInSeconds = 60;
}