如何使用代码进行tcp绑定的WCF服务附加证书

时间:2014-04-03 08:51:21

标签: c# wcf ssl tcp

我得到了一个示例代码,其中显示了如何使用带有tcp绑定的WCF服务附加证书。

NetTcpBinding b = new NetTcpBinding(SecurityMode.TransportWithMessageCredential);
b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Uri netTcpAdddress = new Uri("net.tcp://baseAddress");
ServiceHost sh = new ServiceHost(typeof(Calculator), netTcpAdddress);
sh.Credentials.ServiceCertificate.SetCertificate(
    StoreLocation.LocalMachine, StoreName.My,
    X509FindType.FindByIssuerName, "Contoso.com");
sh.AddServiceEndpoint(typeof(ICalculator), b, "TcpCalculator");
sh.Open();

我正在尝试这条线的含义

sh.Credentials.ServiceCertificate.SetCertificate(
        StoreLocation.LocalMachine, StoreName.My,
        X509FindType.FindByIssuerName, "Contoso.com");

在哪里运行wcf服务可能会有很多证书存在于该PC中。如何提及我需要附加哪些证书?

StoreLocation.LocalMachine是什么意思?它是否意味着localhost?

StoreName.My是什么意思?

我的是什么?是否是任何文件夹名称,如果是,那么该文件夹的完整路径是什么。

什么是X509FindType.FindByIssuerName?

这意味着什么,因为单个用户可能创建或拥有许多证书。那么我如何指向特定的证书?

我可以创建许多证书,我可以使用“#34; Contoso.com"

这个词

我的问题是如何以编程方式指定或识别特定证书,因为用户可能会创建许多证书,因此如何通过代码区分两个证书。

感谢

1 个答案:

答案 0 :(得分:0)

这是有关SetCertificate方法的文档。看来我在SSL over TCP的上一个提示得到了帮助。

  

StoreLocation.LocalMachine是什么意思?这是什么意思   localhost?

不,它并不代表localhost。它指的是分配给本地计算机的X.509证书存储区(MMC snap-in中的计算机帐户)。

  

StoreName.My是什么意思?

它指的是个人证书的X.509证书商店。

  

我的是什么?如果是,那么它是任何文件夹名称,那么完整路径是什么   这个文件夹。

此特定实例中的

我的指的是本地计算机的个人证书存储。这是MMC中的结构视图。

enter image description here

  

什么是X509FindType.FindByIssuerName?

这意味着您在主机上设置的证书将是第一个与您提供的IssuerName值相匹配的证书"Contoso.com"SetCertificate会尝试在本地计算机个人商店中找到符合此条件的证书。

  

这意味着什么,因为单个用户可能创建或拥有许多用户   证书。那么我如何指向特定的证书?

正如您所建议的,如果运行主机的计算机具有来自同一颁发者的多个证书,则IssuerName可能不是唯一标识符。最好使用其他X509FindType枚举成员,例如FindBySerialNumber或更好FindByThumbprint

这就是我如何唯一地标识要在本地计算机的个人证书存储中的主机上设置的证书。

sh.Credentials.ServiceCertificate.SetCertificate(
        StoreLocation.LocalMachine, StoreName.My,
        X509FindType.FindByThumbprint, 
        /* Thumbprint - SHA1 hash value for the Cert */);