2010-12-14 3 views
4

В настоящее время я работаю на сервере wcf и хочу загрузить мой сертификат из файла/ресурса вместо хранилища сертификатов, чтобы упростить развертывание. Есть идеи, как это сделать?selfhosting wcf server - загрузить сертификат из файла вместо хранилища сертификатов

Благодарим за помощь!

ответ

9

Предположим, что вы используете дуплексный канал, вы можете загрузить сертификат из файла в следующем:

//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 будет путать с тем, где искать секретный ключ.

+1

Nice. Возможно, стоит указать, что режим безопасности должен быть «Транспорт», а транспортный клиентCredentialType должен быть «Сертификатом». – Anders

0

Следующий вопрос SO содержит подробный пример кода, как это сделать, однако это может не сработать там, где сертификаты защищены паролем.

Programmatic WCF Message Security with Certificates

Смежные вопросы