Один из способов создания службы WCF на IIS7 с вашими требованиями безопасности заключается в следующем.
Чтобы разместить службу WCF, вам может потребоваться выполнить следующую команду на вашем веб-сервере:
"%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -r –y
В IIS вы настраиваете свой сайт с привязкой https (только), а в настройках SSL вы устанавливаете для него требование SSL и клиентские сертификаты.
Это само по себе разрешит доступ к вашей службе (и wsdl) только с действующим сертификатом клиента и с эмитентом, которому доверяет веб-сервер.
Чтобы ограничить доступ к определенным сертификатам, вы можете настроить файл конфигурации WCF с привязкой конфигурации как:
<basicHttpBinding>
<binding name="MyBasicHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
И поведение Configuration с настраиваемым валидатором сертификата как:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="Custom"
customCertificateValidatorType="<project-namespace>.ClientCertificateValidator, <project-namespace>"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
И наконец, реализуйте пользовательский валидатор в новом классе в вашем проекте как:
public class ClientCertificateValidator : X509CertificateValidator
{
public override void Validate(X509Certificate2 certificate)
{
if (certificate.Thumbprint != <allowed-thumbprint>)
throw new Exception();
}
}