Предположим, вы используете дуплексный канал, вы можете загрузить сертификат из файла следующим образом:
//Load certificate file with private key
var certificate = new X509Certificate2("c:\certificate.pfx", "password");
//Configure your server by to use certificate, for example:
var host = new ServiceHost(typeof(YourService),
new Uri("Your service's uri"));
host.Credentials.ServiceCertificate.Certificate = certificate;
//configure your server to accept client's certificate , accept all
//certificate in this case, or you can assign it to the public key file
host.Credentials.ClientCertificate.Authentication.CertificateValidationMode
= X509CertificateValidationMode.None;
В коде вашего клиента загрузите сертификат так же, как указано выше
//configure your client to use certificate
var channelFactory = new ChannelFactory<IYourService>();
channelFactory.Credentials.ClientCertificate.Certificate =
clientCertificate;
//configure your client to accept server's certificate,
//again, for simplicity, just accept any server's certificate
channelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode
= X509CertificateValidationMode.None;
Думаю, с этого момента ты должен быть в порядке. Просто помните, что если вы загружаете из файла, вам нужно загрузить файл .pfx, сгенерированный pvk2pfx.exe, он имеет как закрытый ключ, так и открытый ключ. В противном случае WCF запутается в том, где искать закрытый ключ.