Как использовать сервис SOAP через HTTPS в C #? - PullRequest
5 голосов
/ 27 января 2011

Администратор веб-службы дал мне WSDL, два сертификата и закрытый ключ:

service.wsdl
ssl.cer
auth_cert.pem
auth_private_key.pem

В Visual Studio 2010 Я добавил веб-ссылку (справка по службе не работает) из WSDL. Затем я попытался использовать его как мыльный клиент http:

MySoapClient client = new MySoapClient();
client.Operation();

и я получаю эту трассировку стека:

Unhandled Exception: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
   at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)

Что мне делать с сертификатами и закрытым ключом?
Я не могу найти ни одного учебника в Интернете, ни книг, посвященных этому вопросу. Любой намек?

Обновление

Доступ к конечной точке с помощью Firefox :

Узел SSL не может подтвердить ваш сертификат. (Код ошибки: ssl_error_bad_cert_alert) * * тысяча двадцать одна

Ответы [ 2 ]

6 голосов
/ 27 января 2011

Администратор веб-службы дал мне WSDL, два сертификата и закрытый ключ

Если вы используете только услугу, закрытый ключ не требуется. Я могу догадаться, что вы хотите двустороннюю аутентификацию с https. Если это так, то вот как это работает:

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

Вторая часть - аутентификация клиента на сервере. Вы устанавливаете сертификат клиента (он содержит открытый ключ) в Личное хранилище и настраиваете прокси WCF для его использования:

<behaviors>
    <endpointBehaviors>
        <behavior name="certSecureBehavior">
            <clientCredentials>
                <clientCertificate findValue="client-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="My"/>
                <serviceCertificate>
                    <defaultCertificate findValue="server-CN" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="TrustedPeople"/>
                </serviceCertificate>
            </clientCredentials>
        </behavior>
    </endpointBehaviors>
</behaviors>

Настройте конечную точку для использования этого поведения. Несколько заметок:

  • client-CN - это имя, для которого создается сертификат клиента (не так важно)
  • server-CN - это имя, для которого генерируется сертификат сервера (обычно это DNS-имя сервера)

Это очень сложная тема и всегда требует много времени для исследований. Проверьте эту статью http://blogs.msdn.com/b/imayak/archive/2008/09/12/wcf-2-way-ssl-security-using-certificates.aspx Надеюсь, что это поможет.

0 голосов
/ 27 января 2011

Администратор, похоже, дал вам файлы, используемые для настройки SSL на сервере. Вы должны быть в состоянии запустить service.wsdl через WSDL.exe для генерации прокси C #, что VS делает, когда вы добавляете веб-ссылку. Я не думаю, что это ваша проблема, хотя. Вы видите проблему на уровне сети, поскольку исключение - исключение System.Net.WebException.

Другие файлы выглядят так, как будто они использовали администратор для добавления SSL на сервер. Разделяя закрытый ключ, он мог поставить под угрозу безопасность, если какие-либо службы с поддержкой SSL используют этот ключ. Вам нужно искать любые конечные точки службы в WSDL и пытаться получить доступ к тем в вашем браузере по SSL (https://). Если вы не можете, тогда есть проблема конфигурации сервера. Исправьте конфигурацию SSL на сервере, и ваш WSDL должен работать, по крайней мере, у вас будет новая проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...