Администратор веб-службы дал мне WSDL,
два сертификата и закрытый ключ
Если вы используете только услугу, закрытый ключ не требуется. Я могу догадаться, что вы хотите двустороннюю аутентификацию с https. Если это так, то вот как это работает:
На сервере администратор должен установить сертификат с закрытым ключом, чтобы включить SSL (ключ используется во время рукопожатия SSL). Его открытый ключ используется вашим клиентом для проверки действительности сертификата и для аутентификации службы, поэтому на стороне клиента вам как-то нужно его проверить. Если оба компьютера находятся в домене Windows, это легко (его можно настроить на использование центра сертификации домена). Если нет, вам необходимо установить все сертификаты, которые использовались для подписи исходного сертификата сервера, на клиентском компьютере (в хранилище доверенных корневых центров сертификации).
Вторая часть - аутентификация клиента на сервере. Вы устанавливаете сертификат клиента (он содержит открытый ключ) в Личное хранилище и настраиваете прокси WCF для его использования:
<behaviors>
<endpointBehaviors>
<behavior name="certSecureBehavior">
<clientCredentials>
<clientCertificate findValue="client-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="My"/>
<serviceCertificate>
<defaultCertificate findValue="server-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="TrustedPeople"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
Настройте конечную точку для использования этого поведения. Несколько заметок:
- client-CN - это имя, для которого создается сертификат клиента (не так важно)
- server-CN - это имя, для которого генерируется сертификат сервера (обычно это DNS-имя сервера)
Это очень сложная тема и всегда требует много времени для исследований.
Проверьте эту статью http://blogs.msdn.com/b/imayak/archive/2008/09/12/wcf-2-way-ssl-security-using-certificates.aspx
Надеюсь, что это поможет.