2012-05-07 1 views
2

Я хочу использовать защищенный веб-сервис ssl на C#. Запрос выглядит следующим образом:Использование веб-службы с SSL (https) в C#

<soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:biw="http://tempuri.org/ws_returnTable" 
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
    > 
    <soapenv:Header> 
    <wsse:Security> 
     <wsse:UsernameToken> 
     <wsse:Username>sasdemo</wsse:Username> 
     <wsse:Password>sasch.111</wsse:Password> 
     </wsse:UsernameToken> 
    </wsse:Security> 
    </soapenv:Header> 
    <soapenv:Body> 
     <biw:meansclass /> 
    </soapenv:Body> 
</soapenv:Envelope> 

Декларация конечной точки в WSDL выглядит следующим образом:

<wsdl:service name="meansclass"> 
    <wsdl:port binding="tns:meansclassSoapBinding" name="meansclassPort"> 
    <soap:address location="https://sas.ssz.intra.stzh.ch:8443/SASBIWS/services/Shared%20Data/ws/meansclass" /> 
    </wsdl:port> 
</wsdl:service> 

app.config выглядит следующим образом:

<bindings> 
    <basicHttpBinding> 
     <binding name="meansclassSoapBinding" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
      useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
       maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <security mode="Transport"> 
       <transport clientCredentialType="None" proxyCredentialType="None" 
        realm="" /> 
       <message clientCredentialType="UserName" algorithmSuite="Default" /> 
      </security> 
     </binding> 
    </basicHttpBinding> 
</bindings> 
<client> 
    <endpoint address="https://localhost:8443/SASBIWS/services/Shared%20Data/ws/meansclass" 
     binding="basicHttpBinding" bindingConfiguration="meansclassSoapBinding" 
     contract="ServiceReference1.meansclassPortType" name="meansclassPort" /> 
</client> 

Я пытался получить доступ к веб с кодом C#:

var service = new meansclassPortTypeClient(); 

service.ClientCredentials.UserName.UserName = "username"; 
service.ClientCredentials.UserName.Password = "password"; 

var test = service.meansclass(); 

Но всегда есть исключение, вызванное средством класса(). На немецком языке он гласит:

Исключение типа «Аутентификация клиента» (...) Отсутствует контекст безопасности.

У меня много googled, но я не узнал, что я делаю неправильно. Как я могу сделать такой «контекст безопасности»? Или что не так?

+0

Я думаю, вам нужно установить

ответ

0

Без дополнительного контекста (вид WSDL) Я понимаю, но вы можете ввести в заблуждение безопасность SSL с защитой веб-службы, и служба жалуется на неожиданные учетные данные в заголовке SOAP.

Безопасность SSL применяется как часть процесса транспортировки запроса веб-службы и ответа. Требованием координировать взаимодействие SSL является доверие сертификата сервера клиентом, потянув сертификат в хранилище доверия, используемое C#.

То, что показано в запросе, - это учетная запись usss/password wss (уровень безопасности веб-службы).

Предложения:

  1. Если у вас есть контроль за выполнением услуг, убедитесь, что любые политики безопасности, удаляются из веб-службы. Если вы этого не сделаете, и вы не совсем уверены, что имя пользователя и пароль необходимы для потребления услуг, удалите имя пользователя и пароль из заголовка мыла.
  2. Опять же, если у вас есть контроль над реализацией службы, попробуйте удалить требование SSL и выполнить службу, чтобы определить, может ли служба быть вызвана через незащищенное (http) соединение.
  3. Добавить обратно только в SSL и проверить исключения ... помня, что публичный сертификат для сервера должен быть доверен контексту, в котором работает C#. Сертификат обычно можно получить, посетив адрес веб-службы (https) в браузере и используя механизм браузера для сохранения сертификата в соответствующем магазине доверия (http://balajiramesh.wordpress.com/2007/12/28/save-ssl-certificate-to-cer-file/)
+0

У меня также есть защита SSL и сообщений. – user1379434