C# - 使用具有证书身份验证和 BinarySecurityToken 数字签名的 SOAP Web 服务

问题描述 投票:0回答:2

这是我第一次处理 SOAP Web 服务,所以我不太知道如何解决下一个问题。我尝试将证书链接到 SOAP 客户端,但是当我调用 Web 服务时,会抛出 500 代码的错误。

我用 Wireshark 嗅探了这些包,以了解发送到 Web 服务的 XML,并且我得到了一个正确形成的肥皂信封,但没有标头,因此没有签名,这就是服务器拒绝我的请求的原因。

我还使用带有证书的传出 WS-Security 配置测试了 SoapUI 中的 Web 服务,并且它运行良好,所以这显然是我的代码的问题。

这是我现在的代码:

VTCPortClient cliente = new VTCPortClient("VTCPortImplPort");

//Information sent to the service
qconsultavtc qConsultaVTC = new qconsultavtc();
HEADERTYPE header = new HEADERTYPE();
CBODYTYPE body = new CBODYTYPE();
qConsultaVTC.header = header;
qConsultaVTC.body = body;
DateTime fecha = DateTime.Now;
qConsultaVTC.header.fecha = fecha;
qConsultaVTC.header.version = "1.0";
qConsultaVTC.header.versionsender = "1.0";
EVTCCONSULTA vtcconsulta = new EVTCCONSULTA();
qConsultaVTC.body.vtcconsulta = vtcconsulta;
qConsultaVTC.body.vtcconsulta.idservicio = 1;

//Setting the certificate for the client
cliente.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySerialNumber, "4ede26f5675d15545a02d13d75aaa84e");   


cliente.ChannelFactory.Open();
//Calling the web service through its method ConsultaDeServicio
rconsultavtc respuesta = cliente.ConsultaDeServicio(qConsultaVTC);
cliente.ChannelFactory.Close();

我想知道为什么我的证书没有正确链接,以及如何在我的代码中正确设置当我使用 SoapUI 测试服务时有效的配置。

感谢您的帮助!

c# wcf soap
2个回答
0
投票

如何生成客户端代理类?错误详情是什么?一般来说,当我们使用证书对客户端进行认证时,我们应该在服务器和客户端之间建立信任关系。
https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/transport-security-with-certificate-authentication
当我们使用消息安全模式时,我们需要设置默认的服务证书,如下所示。

    //message security, we need to sepcify both the default certificate and the client certificate.

    ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient();
 client.ClientCredentials.ServiceCertificate.SetDefaultCertificate(StoreLocation.LocalMachine, StoreName.Root, X509FindType.FindByThumbprint, "cbc81f77ed01a9784a12483030ccd497f01be71c");
    client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "9b8db0dfe615458ace0ae9e89fcb983c5d16f633");
        var result = client.SayHello();
        Console.WriteLine(result);

默认的服务证书是服务器端的证书,它可以在客户端使用其公钥对 SOAP 消息进行加密。 此外,我们最好使用本地计算机证书存储位置,以防出现某些权限问题。
请仔细检查证书的序列号。看起来好像多了一个号码。我们一般使用证书的指纹来设置证书。
如果问题仍然存在,请随时告诉我。


0
投票

como lo pudiste 解析器 disculpa?

© www.soinside.com 2019 - 2024. All rights reserved.