2015-09-10 2 views
0

У нас есть несколько программ, попавших в один сервис WCF. Когда клиент отправляет сообщение, он получает определение как сертификата клиента, так и сертификата службы. Выполнять подписи и шифрование. Насколько я знаю, служба может установить как при запуске. Но я затрудняюсь с тем, как служба будет проверять сертификаты на основе запроса.Можете ли вы определить, какой сертификат использует служба WCF?

Если программа A использует сертификат, а программа B использует другой сертификат. Есть ли способ сообщить WCF, как искать эти сертификаты, не используя хранилище сертификатов Windows? Я знаю, как загрузить X509Certificate2 из файла, но не может найти, что часть должна быть переопределена, чтобы сообщить ей использовать конкретный сертификат на основе того, что входит. Все, что я сделал до сих пор, ищет этот сертификат клиентов в магазин сертификатов. Бизнес-правила предпочли бы, чтобы мы разместили их где-то еще, что мы шифруем. Я хотел бы, чтобы запрос программы A использовал один файл и запрос программы B для использования другой, которую я могу указать.

+0

Когда вы говорите, сертификат клиента, вы имеете в виду сертификат, который клиент использует, чтобы доказать свою идентичность на службу? и когда вы говорите сертификат службы, вы имеете в виду сертификат, который использует служба WCF, чтобы подтвердить свою личность клиенту? –

+0

Характер сертификатов SSL должен решить эту проблему для вас. Если вы предоставляете разные сертификаты для своих программ и используете ли они разные при вызове своего сервиса, все будет работать. До тех пор, пока они выдаются одним и тем же доверенным корневым органом. –

+0

@YacoubMassad да, это то, что я имел в виду под этими терминами. – DoomVroom

ответ

0

Для аутентификации клиента вам действительно нужен сертификат + закрытый ключ, то есть не только сертификат.

Вам нужен файл .PFX, содержащий как сертификат, так и соответствующий ему секретный ключ. PFX защищен паролем.

Вот пример кода:

Client client = new Client(); 

var cert = new X509Certificate2(File.ReadAllBytes("c:\\certificate_with_key.pfx"), "pfx_password"); 

client.ClientCredentials.ClientCertificate.Certificate = cert; 
+0

Проблема была в том, что мы создавали сертификаты и устанавливали их в CertStore с помощью инструмента, а закрытый ключ не был экспортирован. В файле pfx отсутствовал закрытый ключ, когда мы пытались экспортировать их и использовать их в качестве ссылки на файл. – DoomVroom

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