2014-01-22 2 views
0

Я хочу защитить мою службу WCF с помощью клиентских сертификатов, то есть только сертификаты клиентов из определенного корневого ЦС должны быть разрешены для вызова моей службы.WCF с транспортной безопасностью с помощью сертификатов

Для целей тестирования я создал первый сертификат клиента без центра сертификации. Я зарегистрировал сертификат клиента в хранилище сертификатов сервера (под текущим пользователем -> доверенные люди).

В VS2013 я включил SSL в проекте службы WCF, чтобы иметь конечную точку HTTPS. Я адаптировал следующий файл web.config службы следующим образом:

<serviceCredentials> 
    <clientCertificate> 
    <authentication certificateValidationMode="PeerTrust"/> 
    </clientCertificate> 
    ... 
</serviceCredentials> 

<wsHttpBinding> 
    <binding name="wsHttpEndpointBinding"> 
    <security mode="Transport"> 
    <transport clientCredentialType="Certificate"/> 
    </security> 
    </binding> 
</wsHttpBinding> 

Кроме того, я приспособил файл App.config моего клиентского приложения следующим образом:

<clientCredentials> 
    <clientCertificate findValue="Client" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="TrustedPeople" /> 
    <serviceCertificate> 
    <authentication certificateValidationMode="PeerTrust"/> 
    </serviceCertificate> 
</clientCredentials> 

<wsHttpBinding> 
    <binding name="WSHttpBinding_IService1"> 
    <security mode="Transport"> 
     <transport clientCredentialType="Certificate"/> 
    </security> 
    </binding> 
</wsHttpBinding> 

Однако это не работает, появляется следующее сообщение об ошибке:

Произошла ошибка при отправке HTTP-запроса https://localhost:44300/Service1.svc. Это может быть связано с тем, что сертификат сервера не настроен должным образом с HTTP.SYS в случае HTTPS. Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.

Если я переключусь на безопасность сообщений (а не на транспортную безопасность) и переключитесь на протокол HTTP, все, кажется, работает нормально. Так что, наверное, я пропустил какой-то шаг HTTPS? Как сделать работу по обеспечению безопасности на транспорте?

ответ

0

Ваш сертификат не настроен properly.Follow ниже шаги

Скопируйте Отпечаток сертификата и выполните следующую команду из командной строки в режиме повышенной

netsh http add sslcert [Ipaddress:port] certhash=[thumbprint of certifcate] 
appid={unique id for application.you can use GUID for this] 


[Ipaddress:port] Ipaddress and port 
[thumbprint of certifcate]: thumbprint of certificate without spaces 
appid :unique id you can use guid 

Как создать GUID из командной строки

Открыть визуальную визуальную командную команду и выполнить команду ниже

c:> uuidgen

+0

Благодарим вас за информацию, если я использую этот инструмент. Я получаю простую ошибку «Параметр неправильный». Thumprint без пробелов, я использовал новый GUID (включая тире) как appId. –

+0

guid должен быть в фигурных скобках –

+0

У меня есть «netsh http add sslcert ipport = localhost: 44300 certhas = appid = {22d80ae9-b4f7-4c41-b201-a34e2790b41e}' –

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