TLS в клиенте wcf - PullRequest
       29

TLS в клиенте wcf

1 голос
/ 23 ноября 2011

Проблема:
Я не могу подключиться к конечной точке веб-службы с поддержкой TLS, используя C # .net на windows7. Fiddler запрос и ответ:

запрос: -

ПОДКЛЮЧИТЬ myendpoint: 9443 HTTP / 1.1
Принимающая сторона: myendpoint: 9443
Прокси-соединение: Keep-Alive
"

и вот ответ: -

HTTP / 1.1 502 Ошибка подключения
Подключение: закрыть
Метка времени: 18: 54: 29,909

Не удалось установить соединение HTTPS.

* System.Net.Sockets.SocketException:
Невозможно установить соединение, так как целевой компьютер активно отказал в этом: 9443
в Fiddler.ServerChatter.CreateConnectedSocket (IPAddress [] arrDestIPs, Int32 iPort , Session _oSession) *
* at Fiddler.Session._handleHTTPSConnect () * "

Мой клиент - настольное / консольное приложение .net. Я не уверен, что правильно выполнил настройку / настройку TLS / сертификата на стороне клиента. Также у меня есть несколько вопросов без ответа.
Я сделал следующее:

У меня есть конечная точка "TLS включен" веб-службы Интернета. Для правильного общения мне были предоставлены 4 вещи:

1) ca.cert.pem: публичный сертификат от CA
2) myname.cert.pem: мой публичный сертификат
3) myname.key.pem: мой закрытый ключ
4) Пароль: «мой пароль»

Я также дал запрос сертификата (.csr) и параметры, использованные для генерации моего сертификата.

После прочтения материалов, связанных с TLS, я решил, что это то, что мне нужно сделать:

step1) Используйте Openssl, чтобы преобразовать ca.cert.pem в файл .cer и добавить / импортировать его в «Trusted Root Certificate Authorities» локального компьютера, чтобы теперь CA доверял.

step2) Объедините myname.cert.pem и myname.key.pem в .pkcs12, выполнив
" openssl pkcs12 -export -out keystore.pkcs12 -in myname.cert.pem -inkey myname.key.pem ". Это запрашивает пароль, где я использую «мой пароль».

step3) Добавьте keystore.pkcs12 в «Персональные» сертификаты (здесь запрашивается пароль, и я даю «mypassword»)

Отпечаток сертификата, добавленного на шаге 3: «fef4ab753a11a30a6c4342e63e00f237ef0818c1»

Теперь вот изменения app.config, которые я сделал:

<bindings>
  <wsHttpBinding>
    <binding name="My_HTTPS_Endpoint_Binding" closeTimeout="00:01:00"
     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
     bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text"
     textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
       maxBytesPerRead="4096" maxNameTableCharCount="2147483647" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00"
       enabled="false" />
      <security mode="Transport">
        <transport clientCredentialType="Certificate" proxyCredentialType="None"
         realm="" />
        <message clientCredentialType="Windows" negotiateServiceCredential="true"
         establishSecurityContext="true" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<client>
  <endpoint address="https://myendpoint:9443/myService"
   binding="wsHttpBinding" bindingConfiguration="My_HTTPS_Endpoint_Binding"
   contract="MyNs.myClass" name="My_HTTPS_Endpoint" behaviorConfiguration="clientBehaviour" />
</client>

<behaviors>
  <endpointBehaviors>
    <behavior name="clientBehaviour">
      <clientCredentials>
        <clientCertificate findValue="fef4ab753a11a30a6c4342e63e00f237ef0818c1"
   storeLocation="LocalMachine"
   storeName="My"
   x509FindType="FindByThumbprint" />

      </clientCredentials>
    </behavior>
  </endpointBehaviors>
</behaviors>

Так что, кажется, я пропустил какой-то важный шаг? У меня есть пробелы в знаниях:

1) Насколько я понимаю, комбинация открытого и закрытого ключей, которую я имею, полезна только для связи от сервера к клиенту. Как работает шифрование сообщений клиент-сервер? Где мой клиент получает открытый ключ от сервера, который должен использоваться для шифрования сообщений?

2) Требуется ли пароль где-нибудь указывать в конфиге? Просто угадай ..

1 Ответ

0 голосов
/ 30 ноября 2011

Выяснилось, что конфигурация порта назначения глючила, и теперь они это исправили. Порт был недоступен

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