2010-05-08 8 views
25

У меня есть веб-сервис WCF, работающий в IIS 7, с использованием самозаверяющего сертификата (это доказательство концепции, чтобы убедиться, что это маршрут, на который я хочу идти). Необходимо использовать SSL.Возможно ли заставить тестовый клиент WCF принять самозаверяющий сертификат?

Можно ли использовать тестовый клиент WCF для отладки этой службы без необходимости использования несамоходного сертификата?

Когда я пытаюсь я получаю эту ошибку:

Error: Cannot obtain Metadata from https:///Service1.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI: https:///Service1.svc Metadata contains a reference that cannot be resolved: 'https:///Service1.svc'. Could not establish trust relationship for the SSL/TLS secure channel with authority ''. The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. The remote certificate is invalid according to the validation procedure.HTTP GET Error URI: https:///Service1.svc There was an error downloading 'https:///Service1.svc'. The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. The remote certificate is invalid according to the validation procedure.

EDIT: Этот вопрос конкретно об использовании WCF Test Client к материалу проверки веб-службы уже закрепленную с помощью SSL с использованием самозаверяющего сертификата. Сервер уже настроен для приема любого предоставленного сертификата, это тестовый клиент WCF. Я не вижу способа сделать это.

ответ

-4

Вы можете предоставить собственный метод проверки сертификата.

Попробуйте это:

ServicePointManager.ServerCertificateValidationCallback += 
      new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck); 

Звонок назад:

bool EasyCertCheck(object sender, X509Certificate cert, 
     X509Chain chain, System.Net.Security.SslPolicyErrors error) 
{ 
    return true; 
} 
+0

Я не вижу способа добавить этот код к тестовому клиенту WCF (код, который я не контролирую). Я уже добавил этот вызов к своему собственному коду (на стороне сервера). –

+0

Конечно, это правильный подход, если вы пытаетесь заставить любого другого клиента C# WCF принять самозаверяющий сертификат безопасности. – stephen

3

вы должны быть в состоянии сделать это, если заменить клиента WCF Test с WCFStorm Lite Edition. Он бесплатный и довольно гибкий, чем тестовый клиент MS ... например, он позволит вам указать имя пользователя & пароль, если вы выполняете аутентификацию имени пользователя.

+4

Если вы похожи на меня и не любите загружать программное обеспечение, о котором вы никогда не слышали, ознакомьтесь с обзором журнала WFCStorm в Visual Studio. http://visualstudiomagazine.com/articles/2012/10/29/free-tool-wcfstorm.aspx –

3

Ответ от this question помог в моем случае. Обязательно используйте точный имя машины как сертификат ожидает. Например, machine/service.svc может не работать, а machine.domain/service.svc - работает.

+0

Шахта была другим способом (как в machine.domain не удалось, пока машина просто работала). Благодаря! – johnofcross

12

Вы можете создать не самозаверяющий сертификат в области разработки, а затем использовать этот сертификат в IIS для применения SSL. Шаги:

  1. Создать самостоятельно подписанный сертификат

    makecert -r -pe -n "CN=My Root Authority" -a sha1 -sky signature 
        -ss CA -sr CurrentUser 
        -cy authority 
        -sv CA.pvk CA.cer
  2. создать не самоподписанный сертификат SSL, который за подписью этого корневого сертификата, а затем создать PFX-файл из этого

    makecert -pe -n "CN=servername" -a sha1 -sky exchange 
        -eku 1.3.6.1.5.5.7.3.1 -ic CA.cer -iv CA.pvk 
        -sp "Microsoft RSA SChannel Cryptographic Provider" 
        -sy 12 -sv server.pvk server.cer 
    
    pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

Теперь вам просто нужно импортировать server.pfx в IIS и настроить веб-сайты ite binding для использования этого сертификата, а также установить CA.cer в Local Computer \ Trusted Root Certification Authorities магазине как на сервере, так и на клиенте, выполнив этот WCF-клиент, без проблем будет работать с сервисом через HTTPS.

+0

+1 для получения подробной информации – bugnuker

+3

Вы красота! еще один трюк - вы можете получить неверную ошибку пароля, которую вы можете решить, передав пароль в командной строке в последней строке: pvk2pfx -pvk server.pvk -pi "yourpw" -spc server.cer -pfx server.pfx -po «yourpw» –

+0

У меня ошибка о некорректном пароле при добавлении pfx на сервере, но я просто пропустил ввод пароля, и все, казалось, было в порядке. –

1

Чтобы ответить на ваш вопрос ... вот как вы заставите свой тестовый клиент WCF принять самозаверяющий сертификат ...

 using (ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client()) 
     { 
      System.Net.Security.RemoteCertificateValidationCallback callBack = (sender, certificate, chain, sslPolicyErrors) => true; 
      ServicePointManager.ServerCertificateValidationCallback += callBack; 

      Console.WriteLine(proxy.GetData(35)); 

      ServicePointManager.ServerCertificateValidationCallback -= callBack; 
     } 
+0

Я думаю, что он имел в виду _WCFTestClient.exe_. Как бы то ни было, ваш ответ помог мне с моим тестовым клиентом WCF ** Project **. –

0

Да, это возможно.

Просто загрузите сгенерированный WSDL из службы (https://localhost/Service1.svc?singleWsdl) и укажите путь к этому файлу при добавлении службы в тестовый клиент WCF.