我需要通过C#访问WS方法,其中一个要求是使用服务器的证书公钥加密SOAP消息。他们派我去测试证书,但几个月前它已经过期了。
我的问题是:
如何在不询问服务器证书的情况下获取服务器证书?我已经尝试挂钩 ServicePointManager.ServerCertificateValidationCallback 但该方法返回“在验证消息时遇到了安全错误”而没有访问回调函数。代码:
//Hook
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(CertificateValidationCallBack);
//Method
getVehicleInfoResponse = wsVehicleInfo.getVehicleInfoOperation(vehicle);
证书续订中的公钥会发生变化,还是可以继续使用旧证书?如果是这样,从过期的证书中提取和加密公钥的方法是什么?通过使用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);
加密算法必须 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";
}
}
感谢任何帮助,无需强制回答所有问题。 感谢。