【问题标题】:Wcf request with mutual certificate missing wsse:Security缺少相互证书的 Wcf 请求 wsse:Security
【发布时间】:2020-02-10 00:02:21
【问题描述】:

我正在尝试使用 wcf 通过相互证书进行 SOAP 调用,但也不断出错

'请求被中止:无法创建 SSL/TLS 安全通道。' 或

'远程服务器返回错误:(500) Internal Server Error Missing wsse:Security header in request'

在 SOAP UI 中完成的类似请求有效,但 C# 不想通过。我还查看了发送的具体内容,发现肥皂信封确实缺少标题中的 wsse:Security。我怎样才能让它发挥作用?

WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

EndpointAddress ea = new EndpointAddress("https://[securedEndpoint]/Calculator");

CalculatorClient cc = new CalculatorClient(myBinding, ea);

cc.ClientCredentials.ClientCertificate.SetCertificate(
    StoreLocation.CurrentUser,
    StoreName.Root,
    X509FindType.FindBySerialNumber,
    "37802b632e74e355");

cc.ClientCredentials.ServiceCertificate.SetDefaultCertificate(
    StoreLocation.CurrentUser,
    StoreName.Root,
    X509FindType.FindBySerialNumber,
    "29f3e22fc1ae45be");

// Begin using the client.
try
{
    cc.Open();
    Console.WriteLine(cc.Add(200, 1111));
    Console.ReadLine();

    // Close the client.
    cc.Close();
}

【问题讨论】:

    标签: c# wcf ssl soapui mutual-authentication


    【解决方案1】:

    如您所知,当我们使用证书来保护通信时,我们应该将证书绑定到特定端口。另外,如果我们用证书对客户端进行认证,我们必须在服务器证书和客户端证书之间建立证书信任关系。除了Message安全模式,我们一般在客户端提供一个客户端证书就够了。
    我建议你检查客户端和服务器端之间的信任关系状态。此外,为了保证证书可用,我们最好使用本地计算机证书存储和证书指纹设置证书。考虑到证书私钥访问的问题,建议大家将Everyone账号加入证书私钥管理组。
    最后请确保证书具有客户端认证和服务器认证的预期用途。
    如果有什么可以帮助的,请随时告诉我。

    【讨论】:

    • 这一定与 C# 和我的证书有关。我试图将粘贴肥皂信封从 SOAPUI 复制到 Postman。我用这个 SOAP 消息运行 Postman。邮递员让我挑选证书,我从商店挑选了一张。它确实成功了。问题是为什么我不能在 c# 中实现同样的目标。
    • 您选择的证书是您在代码中提供的客户端证书吗?请删除服务证书,传输安全不需要配置服务证书,这个只在服务器端配置。另外,你确定证书是服务器端信任的吗?
    • 是的。我删除了服务证书,结果是一样的。我 100% 确定证书受到服务器端的信任,就像我使用 Postman 或 SoapUI 做同样的事情时一切正常。
    • 请尝试在本地机器中指定证书,并将Everyone帐户添加到证书私钥的管理组中。
    • 我使用以下方式向前移动了一点:stackoverflow.com/questions/9571058/… 现在我得到了 wsse Security 标头,但现在我得到了不同的错误:System.ServiceModel.Security.MessageSecurityException:'传入的消息是用令牌签名的这与用于加密正文的不同。这是没有预料到的。'
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多