Кто-нибудь из вас знает, если и если да, то как я могу проверить с кодом приложения, если сервер включен или нет?
Как я могу проверить, включен ли сервер ssl или нет?
Ответ 1
"Легче просить прощения, чем разрешение"
Например, чтобы прочитать 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).
Обновление: stackoverflow.com
теперь поддерживает https.
Ответ 2
Вы не указываете язык программирования, но вы можете сделать это из командной строки.
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 этого не делает.
Ответ 3
не уверен на предпочитаемом вами языке, но здесь он находится в С#
public bool IsSecureConnection()
{
return HttpContext.Current.Request.IsSecureConnection ||
HttpContext.Current.Request.Headers["HTTP_X_SSL_REQUEST"].Equals("1");
}
Обратите внимание, что этот заголовок является обычным, но я думаю, что вы поняли эту идею. Я видел фолк просто запрос запроса для "https", и, кроме того, он выглядит грязным, вероятно, приемлемым, зависит от вашей модели безопасности.
Или вы спрашиваете, доступно ли это вообще?
I
Ответ 4
Вам нужно указать, с каким протоколом вы работаете: есть версии SSL для HTTP, IMAP, POP и т.д.
Предполагая, что вы заинтересованы в HTTPS, вы можете проверить, что-то слушает порт 443 на сервере и отходит оттуда...
Ответ 5
Если вы используете PHP или ASP-код на сервере, короткий ответ - вы этого не делаете. Вы можете попытаться сделать соединение сокета с IP-адресом, отличным от ssl, и посмотреть, получаете ли вы сертификат ssl и перечисляете его общее имя и субъектАльтернативные имена, но в целом простой ответ заключается в том, что вы этого не делаете. Частая (неправильная) конфигурация apache заключается в прослушивании на порту 443 без SSL-сертификата, поэтому возможность подключения не гарантирует, что там есть SSL. Невозможность подключения может означать, что ваше приложение не имеет сетевых привилегий. Поскольку настройка SSL - это боль, вы знаете, есть ли у вас SSL или нет, и это решение конфигурации. Это как интересно, сколько у вас детей - вы должны знать.
Ответ 6
Это С# unit test для выполнения обнаружения без необходимости в правильном 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);
}
}