首页 > 解决方案 > 在 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 ");

标签: wcfcertificate

解决方案


当通过创建的 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 中安装了客户端证书。
如果有什么我可以帮忙的,请随时告诉我。


推荐阅读