我们有客户端服务器应用程序,它使用 WCF 进行通信。如何使用 app.config 将证书正确关联到 WCF 服务。现在我在服务器上的 app.config 中定义证书,如下所示;
<behaviors>
<serviceBehaviors>
<behavior>
<serviceCredentials>
<serviceCertificate findValue="5b92cf508b894aec82074514954185ecd78b654a" storeLocation="LocalMachine" storeName="Root" x509FindType="FindByThumbprint" />
</serviceCredentials>
</behavior>
</behaviors>
在客户端,我以编程方式分配证书,如下,
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certificates = store.Certificates.Find(
X509FindType.FindByThumbprint, "5b92cf508b894aec82074514954185ecd78b654a", true); //I am seeing the certificate correctly. Please see the screenshot below.
InstanceContext context = new InstanceContext(callback);
this.SystemService = new SystemServiceClient(context, tcpBinding, tcpAddress);
this.SystemService.ClientCredentials.ClientCertificate.Certificate = certificates[0];
调试时在客户端正确显示证书如下,
尝试使用线路
string[] lstIFs = this.ServerConnection.NetworkService.GetNetworkInterfaces();
与 WCF 服务建立连接时,我们收到如下错误:“System.ServiceModel.Security.SecurityNegotiationException 无法为具有权限的 SSL/TLS 安全通道建立信任关系”。请帮忙。
既然可以在客户端正确显示证书,我想可能是客户端认为这个证书不安全,不信任这个密钥。
以下是您可以采取的一些建议:
1.使用 makecert 创建根 CA 并从中创建证书
2.使用 Windows 证书服务器或其他信任该根证书的 PKI 解决方案
3.从CA购买SSL证书。