2008-11-28 2 views
11

Кто-нибудь из вас знает, если и если да, то как я могу проверить код приложения, если на сервере включен ssl или нет?Как я могу проверить, включен ли сервер ssl или нет?

+0

могли бы вы предоставить некоторую информацию. о среде, в которой вы это пишете? – 2008-11-28 12:42:54

+0

Вы не можете. У серверов нет ssl, веб-сайты. – Kuzgun 2013-12-03 15:27:18

ответ

8

"It's easier to ask forgiveness than permission"

Например, читать stackoverflow.com через SSL, не проси stackoverflow.com, поддерживает ли это, просто сделай это. В Python:

>>> import urllib2 
>>> urllib2.urlopen('https://stackoverflow.com') 
Traceback (most recent call last): 
... 
urllib2.URLError: <urlopen error (10060, 'Operation timed out')> 
>>> html = urllib2.urlopen('http://stackoverflow.com').read() 
>>> len(html) 
146271 
>>> 

Это показывает, что stackoverflow.com не поддерживает SSL (2008).


Update:stackoverflow.com теперь поддерживает протокол HTTPS.

2

не уверены на вашем языке предпочтений, но здесь она находится в C#

public bool IsSecureConnection() 
{ 
    return HttpContext.Current.Request.IsSecureConnection || 
      HttpContext.Current.Request.Headers["HTTP_X_SSL_REQUEST"].Equals("1"); 
} 

Пожалуйста, обратите внимание, что этот заголовок является обычаем, но я думаю, вы получите идею. Я видел фолк просто запрос запроса для «https» и, кроме того, выглядя грязным, это, вероятно, приемлемо, зависит от вашей модели безопасности.

Или вы спрашиваете, доступно ли это вообще?

I

+0

Thx dve, я думаю, что это на стороне сервера, я хочу знать на стороне клиента, как я могу узнать, принимает ли сервер SSL-соединения. (Если можно так или иначе). Я думаю, что могу сделать это с обработкой исключительных ситуаций, если я попытаюсь подключиться к серверу с помощью ssl enable, и я получу исключение, тогда сервер (возможно) не имеет ssl. Но могу ли я сделать это каким-то другим способом? – 2008-11-28 12:41:12

0

Вы должны указать, какой протокол вы работаете с - есть SSL версии HTTP, IMAP, POP и т.д.

Предполагая, что это HTTPS вы заинтересованы, вы можете проверьте, чтобы увидеть, если что-то прослушивает порт 443 на сервере и идти оттуда ...

5

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

bash-3.2$ echo ^D | telnet www.google.com https 
Trying 66.102.11.104... 
Connected to www.l.google.com. 
Escape character is '^]'. 
Connection closed by foreign host. 
bash-3.2$ echo ^D | telnet www.stackoverflow.com https 
Trying 69.59.196.211... 
telnet: connect to address 69.59.196.211: Connection refused 
telnet: Unable to connect to remote host 

Там вы идете ... Google, StackOverflow этого не делает.

0

Если вы используете PHP или ASP-код на сервере, короткий ответ - нет. Вы можете попытаться сделать соединение сокета с IP-адресом, отличным от ssl, и посмотреть, получаете ли вы сертификат ssl и перечисляете его общее имя и субъектАльтернативные имена, но в целом простой ответ заключается в том, что вы этого не делаете. Частая (неправильная) конфигурация apache заключается в прослушивании на порту 443 без SSL-сертификата, поэтому возможность подключения не гарантирует, что там есть SSL. Невозможность подключения может означать, что ваше приложение не имеет сетевых привилегий. Поскольку настройка SSL - это боль, вы знаете, есть ли у вас SSL или нет, и это решение конфигурации. Это как интересно, сколько у вас детей - вы должны знать.

0

Это тест # блок C, чтобы выполнить обнаружение без необходимости быть на правильном HttpContext:

[TestMethod] 
    public void DetectSslSupport() 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.someinsecuresite.com"); 
     try 
     { 
      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
      { 
       //some sites like stackoverflow will perform a service side redirect to the http site before the browser/request can throw an errror. 
       Assert.IsTrue(response.ResponseUri.Scheme == "https"); 
      } 
     } 
     catch (WebException)//"The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel."} 
     { 
      Assert.IsTrue(false); 
     } 
    } 
Смежные вопросы