netstat говорит, что 443 открыт, но я не могу подключиться к нему через telnet .. почему? - PullRequest
4 голосов
/ 12 февраля 2009

Я создал самодостаточный сервер wcf, используя wsHttpBinding. Я использую Win 2003 server R2 SP2.

Если я настрою прослушивание на http://localhost:443/MyService, все будет нормально. Я могу подключиться к http://localhost:443/MyService с помощью Internet Explorer, и я получаю стандартное сообщение «Bad Request»

Теперь, если я пытаюсь перейти на HTTPS, я наблюдаю странное явление.

Вот что я сделал:

  1. Я изменил свой конфигурационный файл wcf с http://localhost на https://localhost и с Security=None на Security=Transport (как объяснено в многочисленных руководствах по wcf)
  2. Я зарегистрировал свой порт HTTP следующим образом:

    httpcfg delete ssl -i 0.0.0.0:443
    
    httpcfg set ssl -i 0.0.0.0:443 -h ea2e450ef9d4...
    

Обратите внимание, что сертификат, который я использовал, является "реальным сертификатом" (т. Е. Выданным доверенным центром сертификации, а именно Comodo). Сервер отвечает на эхо-запрос на NS, указанный в сертификате.

Теперь время ожидания истекает:

Microsoft Telnet> open localhost 443

Вот вывод из netstat (Pid '4' - это процесс 'System'):

netstat -nao

  Proto  Local Adress         Remote Adress          State           Pid
  TCP    0.0.0.0:443          0.0.0.0:0              Listening       4

А вот скриншот из TCPView , полученный при вводе команды открытия в telnet:

альтернативный текст http://img26.imageshack.us/img26/3376/tcpview2si6.jpg

Я немного озадачен. Для меня, если netstat говорит, что сервер прослушивает 443, соединение telnet с 443 не должно прерваться, и у меня должна быть хотя бы пустая подсказка, ожидающая, что я наберу зашифрованные данные:)

Пока я пытался:

  1. Повторите все шаги с нуля, точно следуя инструкции MSDN
  2. Используется порт 10443 вместо 443
  3. Отключить брандмауэр
  4. Использовать самозаверяющий сертификат

Я не знаю, что попробовать дальше ... есть идеи?

Ответы [ 4 ]

2 голосов
/ 12 февраля 2009

Клиент telnet не узнает, что отправил правильно сконструированный запрос для инициирования рукопожатия https, поэтому я полагаю, что защищенный ssl-сервер просто ожидает дополнительных данных.

Клиент telnet, конечно, не будет знать, что делать с ответом от защищенного ssl-сервера (он, конечно, не будет запрашивать у вас данные для отправки). Связь может произойти только после завершения рукопожатия https.

Вам нужно использовать клиент, который знает, как сделать рукопожатие. Двоичный файл openssl может сделать это из коробки.

1 голос
/ 12 февраля 2009

Как сказал FerrariB, telnet не выполняет переговоры, необходимые для открытия SSL-соединения. Telnet ничего не знает ни о сертификатах, ни о шифровании. Таким образом, вы гарантированно не сможете общаться с HTTPS-портом 443 через telnet. Вам нужно будет найти другой способ сделать то, что вы пытаетесь сделать.

Посмотрите, например, страницу Википедии на TLS , где прямо сказано:

Если какой-либо из вышеперечисленных шагов завершается неудачно, TLS-квитирование не удается, и соединение не создано.

Это именно то, что вы видите, пытаясь использовать telnet для связи с конечной точкой SSL.

1 голос
/ 12 февраля 2009

Telnet нельзя использовать для связи с зашифрованными сетями.

Оформить заказ microsfot note. В нем указано "ПРИМЕЧАНИЕ. В этом примере предполагается, что веб-сервер настроен на использование порта HTTP по умолчанию (TCP 80). Если веб-сервер прослушивает другой порт, замените этот номер порта в первой строке примера. Кроме того, этот пример не работает должным образом по соединению HTTPS / SSL (по умолчанию TCP 443), поскольку клиент telnet не может согласовать необходимые команды шифрования для установки сеанса SSL. Хотя первоначальное соединение возможно через HTTPS / SSL порт, данные не возвращаются при отправке запроса GET. "

Обновление: оформить эту другую заметку КАК: Определить, не работает ли соединение SSL на веб-сервере или на промежуточном устройстве

0 голосов
/ 07 ноября 2017
  1. в командной строке: netstat -nao |find "443" последние столбцы показывают число: фото № 1

  2. Теперь откройте диспетчер задач. Найдите номер результата в 1-м разделе столбца pid (если pid не был включен, выберите его на вкладке представления), в имени программы укажите программу, которая использует порт.

  3. отключить программу, использующую порт / в моем случае я остановил ее из служб

...