wcf - 在 WCF 服务 net tcp 中使用客户端证书
问题描述
我有一个作为 net tcp 运行的 WCF 应用程序,并在服务器中安装了服务器证书 (xxx.domain.com)。
启用具有证书安全性的传输。IIS 网站已配置,并且与上述证书一起正常工作,它也没有安装在本地机器中,因为它找到了正确的根 ca 和中间证书。
如果可以,我可以在不安装证书的情况下调用 wcf 服务吗?我应该使用哪一个 Root CA 或中间证书。请参阅下面的证书链
根 CA
中间
xxx.domain.com
这是客户端中使用的代码
channel.Credentials.ClientCertificate.SetCertificate(
StoreLocation.LocalMachine,
StoreName.CertificateAuthority,
X509FindType.FindByThumbprint,
"tried intermediate and root CA its not working ");
解决方案
当通过创建的 WCF 服务Nettcpbinding
使用证书对客户端进行身份验证时,我们需要在服务凭据中指定服务证书。
sh.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "5ba5022f527e32ac02548fc5afc558de1d314cb6");
然后该服务将正常工作。随后,客户端在调用服务时应提供客户端证书,因为该Clientcredentialtype
属性位于Certificate
服务器端。
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
客户端。
ServiceReference1.ServiceClient client = new ServiceClient();
client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "f0969c5725b2f142b7f150515ec2bd12bc45250b");
var result = client.Test();
Console.WriteLine(result);
在此过程中,请注意我们要在Root CA中相互安装证书,这样才能建立客户端和服务器端的证书信任关系。
回头看你的问题,原因可能是客户端和服务器端之间无法建立证书信任关系。我们要确保客户端已经在根 CA 中安装了服务证书,并且服务器已经在根 CA 中安装了客户端证书。
如果有什么我可以帮忙的,请随时告诉我。
推荐阅读
- powerbi - Power BI:按相关参数乘以分组
- c# - WHERE 子句中的条件语句
- android - 如何将大型 JSON 数据从服务器存储到 SQLTE Android?
- python - 为什么这段代码不让我使用矩形绘制,而只是移动矩形?
- c# - 来自客户端应用程序的 Elsa 工作流程
- python - OpenCV - 如何获得多边形曲线的切线
- python - CURL 有效,但不能翻译成 Python
- c++ - 将 opencv 中的“videocapture”数据插入到 Tensorflow-lite
- performance - 我如何在普罗米修斯中查阅这些查询?
- ethereum - 如何使用 waffle 和 ethers.js 测试应付/外部方法