安全SOAP请求(使用WSE 3.0?)C#

时间:2017-12-19 15:28:29

标签: c# encryption soap wse

我需要使用证书签名和加密SOAP请求以访问WS方法,但我总是得到相同的响应: “验证消息时遇到安全错误”。

我猜我的代码有问题,而不是任何其他问题。 这是:

cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(sCertificatePath, sCertificatePassword);

userToken = new Microsoft.Web.Services3.Security.Tokens.UsernameToken(sUser, sPass, Microsoft.Web.Services3.Security.Tokens.PasswordOption.SendHashed);
secureToken = new Microsoft.Web.Services3.Security.Tokens.X509SecurityToken(cert);          

encDataToken = new Microsoft.Web.Services3.Security.EncryptedData(secureToken);

mSignUsernameToken = new Microsoft.Web.Services3.Security.MessageSignature(userToken);
mSignSecurityToken = new Microsoft.Web.Services3.Security.MessageSignature(secureToken);

wsVehicleInfo = new wsBusiness.VehicleInfoWSImplService();

vehData = new wsBusiness.getVehicleInfoRequest();
vehData.vehicleRegistration = "XXXXYYY";
vehData.language = "es";

requestContext = wsVehicleInfo.RequestSoapContext;
requestContext.Security.Elements.Add(encDataToken);
requestContext.Security.Tokens.Add(secureToken);
requestContext.Security.Elements.Add(mSignSecurityToken);
requestContext.Security.Timestamp.TtlInSeconds = 300;
requestContext.Security.Tokens.Add(userToken);    

这是对的吗?其实我有一些问题:

  1. 我正在使用CA颁发的相同证书进行签名和加密。我不需要用服务器加密吗?我怎么能得到它?
  2. 请求中生成的XML元素的顺序是否重要?哪个应该是代码顺序?
  3. 用于加密肥皂体的文档中使用的算法是“aes128-gcm”,但我无法找到它而是使用“aes128-cbc”。可能会造成麻烦吗?
  4. 在这种情况下,是否建议使用WSE?我看了这个: “WSE使用带有收件人X.509证书公用副本的非对称算法来加密实际用于加密消息数据的对称密钥,而不是对消息进行非对称加密。”没有办法只使用服务器的WSE证书加密SOAP主体,而不是加密对称密钥?

0 个答案:

没有答案