【问题标题】:Use client certificate in WCF service net tcp在 WCF 服务 net tcp 中使用客户端证书
【发布时间】:2020-08-05 13:34:26
【问题描述】:

我有一个 WCF 应用程序作为 net tcp 运行,并在服务器中安装了服务器证书 (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 certificate


    【解决方案1】:

    Nettcpbinding创建的WCF服务使用证书对客户端进行身份验证时,我们需要在服务凭证中指定服务证书。

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

    【讨论】:

    • 所以我们需要在客户端机器上安装证书。我有一个使用相同证书的网站,它在客户端机器中加载 https 而不安装证书。我们可以在 nettcp 中使用相同的概念吗
    • 我没有完全理解你的意思。你的意思是我们是否能够在不安装服务证书的情况下调用客户端机器上的服务?只要证书被客户端机器信任,就不需要完成这个动作。大部分权威第三方机构颁发的证书都是客户端机器信任的,比如Go Daddy、GlobalSign。因此,浏览器在访问由这些组织颁发的证书保护的网站时具有安全锁定标记。
    • 或者,服务器端将clientcredentialtype 更改为无,这也可以在不安装服务证书的情况下工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多