2013-02-20 4 views
1

Я создал автономный веб-сервис WCF HTTP. Теперь я хочу преобразовать его в HTTPS. Итак, я следил за следующими пунктами:Не удалось запустить веб-службу WCF https

Страница this для создания certificates и привязки его к определенному порту. Создаю сертификат с помощью mmc ->console root и выполнил те же действия, что и в приведенной выше ссылке.

Затем я выполнить следующую команду, чтобы связать порт с сертификатом:

netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} 

меняет certhash по моим сертификатам. Я также проверил Created certificate info и получил это.

enter image description here

Я также вставить код, написанный в моем проекте, чтобы запустить веб-сервис на переплетены порт:

try 
    { 
    m_running = true; 
    private static String m_baseAddress = "https://10.0.0.1:8083"; 
    WebHttpBinding _binding = new WebHttpBinding(); 
    _binding.Security.Mode = WebHttpSecurityMode.Transport; 
    _binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
    m_serviceHost = new WebServiceHost(typeof(TService), new Uri(m_serviceAddress)); 
m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName,"contoso.com"); 
    ServiceEndpoint ep = m_serviceHost.AddServiceEndpoint(typeof(TContract), _binding, ""); 
    m_serviceHost.Open(); 
    } 
    catch(Exception e){ } 

Всякий раз, когда я восстановить мой проект и запустить его. Он всегда начинается на секунду и останавливается. Я проверяю журнал, и ничего не было.

Но когда я удалил эту строку

m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName,"contoso.com"); 

и заменить https на http. Он работает нормально.

+0

Вы все еще используете FindBySubjectName с именем «contoso.com» в качестве имени темы. Это имя используется в вашем сертификате? –

+0

В вашем m_serviceHost.AddServiceEndpoint() вы добавляете новый WebHttpBinding() без настройки режима безопасности. Вероятно, вы должны использовать «привязку», которую вы создали ранее. Но все же я удивлен, что вы не видите никаких ошибок при запуске. Также, если вы продолжаете видеть проблемы, попробуйте добавить трассировку и посмотрите, есть ли у вас дополнительная информация. – Praburaj

+0

@MortenMertner Откуда я могу узнать свое имя сертификата? –

ответ

1

Это следующие шаги для создания веб-службы HTTPSWCF self hosted.

  • Во-первых, используйте Netsh, чтобы добавить пространство имен для резервирования для порта: netsh http add urlacl url=https://127.0.0.1+:8085/ user=EVERYONE

  • Введите следующую команду, чтобы создать сертификат клиента: makecert -sk RootCA -sky signature -pe -n CN=localhost -r -sr LocalMachine -ss Root MyCA.cer

  • Теперь создать сертификат сервера : makecert -sk server -sky exchange -pe -n CN=localhost -ir LocalMachine -is Root -ic MyCA.cer -sr LocalMachine -ss My MyAdHocTestCert.cer

Два новых certificate файлы теперь создаются в \Program Files\Microsoft SDKs\Windows\v7.0A\Bin с именем MyCA.cer и MyAdHocTestCert.cer

Открыть server certificate т.е. MyAdHocTestCert.cer и выберите thumbprintdetails из табл.

enter image description here

  • thumbprint Выбрать и удалить все пробелы из него.

  • Теперь связать порт с этим сертификатом с помощью следующей команды: netsh http add sslcert ipport=127.0.0.1:8085 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} clientcertnegotiation=enable

где

  • ipport : адрес хоста и порт: положить тот же адрес, вы выбираете в первом шаге

  • certhash : отпечаток

Теперь вы закончили с сертификатом и привязкой к порту. Для того, чтобы проверить все написать netsh http show sslcert в ЦМД, и вы получили что-то вроде этого:

This is just an exaple

Теперь написать следующий код для WSHTTPbinding:

WebHttpBinding _binding = new WebHttpBinding(); 
_binding.Security.Mode = WebHttpSecurityMode.Transport; 
_binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 
m_serviceHost = new WebServiceHost(typeof(Serviceclass), new Uri("https://127.0.0.1:8085/")); 
      m_serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "611fe7748c5883f8082351744604a8c917608290"); 
      ServiceEndpoint ep = m_serviceHost.AddServiceEndpoint(typeof(InstanceClass), _binding, "hello"); 
      m_serviceHost.Open(); 

Теперь создать свой потребитель, чтобы использовать этот самопринятый WS

+0

Это решение? – Sam

+0

Вся процедура создания самостоятельного веб-сервиса с SSL. ошибка, которую я сделал, заключалась в том, что я создавал сертификат с неправильной точки –

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