WS的传出SOAP消息加密

时间:2018-01-11 10:51:45

标签: c# soap ssl-certificate wse

我需要通过C#访问WS方法,其中一个要求是使用服务器的证书公钥加密SOAP消息。他们派我去测试证书,但几个月前它已经过期了。

我的问题是:

  1. 如何在不询问服务器证书的情况下获取服务器证书?我已经尝试挂钩 ServicePointManager.ServerCertificateValidationCallback 但该方法返回“在验证消息时遇到了安全错误”而没有访问回调函数。代码:

    //Hook
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(CertificateValidationCallBack);
    
    //Method
    getVehicleInfoResponse = wsVehicleInfo.getVehicleInfoOperation(vehicle);
    
  2. 证书续订中的公钥会发生变化,还是可以继续使用旧证书?如果是这样,从过期的证书中提取和加密公钥的方法是什么?通过使用WSE 3.0来尝试这一点,但是当我创建 encDataToken 时,我得到“ WSE511:现在使用安全令牌SecurityToken-X是无效的,因为令牌已过期或过期。”。代码:

    secureToken = new Microsoft.Web.Services3.Security.Tokens.X509SecurityToken(certExpired);
    encDataToken = new Microsoft.Web.Services3.Security.EncryptedData(secureToken); //Fails here
    requestContext.Security.Elements.Add(encDataToken);
    
  3. 加密算法必须 aes128-gcm ,但我无法找到并使用它。相反,我使用 aes128-cbc 进行加密。有影响吗?选择该算法的方法是哪种?代码:

    [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
    public class X509TokenManager : Microsoft.Web.Services3.Security.Tokens.X509SecurityTokenManager {
        public X509TokenManager()
            : base() {
    
            base.DefaultSessionKeyAlgorithm = "AES128";
        }
    }
    
  4. 感谢任何帮助,无需强制回答所有问题。 感谢。

0 个答案:

没有答案