Предположим, что вы используете дуплексный канал, вы можете загрузить сертификат из файла в следующем:
//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 будет путать с тем, где искать секретный ключ.
Nice. Возможно, стоит указать, что режим безопасности должен быть «Транспорт», а транспортный клиентCredentialType должен быть «Сертификатом». – Anders