Проверка пользовательского сертификата в службе WCF
Я хочу проверить сертификаты клиентов в моей службе WCF.
Моя цель - разрешить только клиентам с сертификатами с конкретными отпечатками, чтобы иметь возможность общаться с моей службой.
Моя служба WCF размещена в IIS, я использую basicHttpBinding и режим безопасности = "транспорт" с типом удостоверения "Сертификат". IIS требует клиентских сертификатов для связи с сервисом.
Заранее благодарим за помощь.
UPDATE:
Моя конфигурация:
<basicHttpBinding>
<binding
name="testBinding"
maxReceivedMessageSize="2147483647">
<readerQuotas
maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
Поведение:
<serviceBehaviors>
<behavior name="SomeServiceBehavior">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="Custom" customCertificateValidatorType="SomeService.CustomCertificateValidator,SomeService" />
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
Конфигурация службы:
<service
behaviorConfiguration="SomeServiceBehavior"
name="SomeService">
<endpoint
address=""
binding="basicHttpBinding"
bindingConfiguration="testBinding"
contract="ISomeService">
</endpoint>
</service>
И для целей тестирования я реализовал валидатор следующим образом:
public class CustomCertificateValidator : X509CertificateValidator
{
public override void Validate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate)
{
throw new SecurityTokenValidationException("TEST Certificate was not issued by a trusted issuer TEST");
}
}
И это не сработает. Я могу подключиться к моей службе с любым действительным сертификатом.
Ответы
Ответ 1
Вы можете создать класс, полученный из X509CertificateValidator, и использовать его для пользовательской проверки входящего сертификата. Выбросьте исключение SecurityTokenValidationException, если вы по какой-то причине откажитесь от проверки.
Установите для параметра certificateValidationMode значение "Пользовательский" и укажите свой валидатор в разделе поведения службы clientCertificate файла конфигурации.
Как создать службу, использующую настраиваемый сертификат Validator
Ответ 2
Я НЕ думаю, что в любом случае у вас есть "Custom Certificate Validation" с "Transport Security". Он работает только с "Безопасность сообщений".
Ответ 3
ДА, вы можете использовать basicHttpBinding с безопасностью, установленной для транспорта, и вам нужно подключиться к созданию ServiceHost в IIS - см. Пользовательский хост-узел,
Вы должны иметь возможность проверять значения отпечатка пальца, сертификаты или любые другие данные, если вы создаете собственный раздел конфигурации для определения списка критериев проверки.
Пример кода для реализации всего вышеизложенного доступен в загрузке кода из этой статьи в CodeProject.