Как я могу проверить, есть ли на сервере включение ssl или нет - PullRequest
12 голосов
/ 28 ноября 2008

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

Ответы [ 6 ]

9 голосов
/ 28 ноября 2008

"Прошить прощения легче, чем разрешение"

Например, чтобы читать 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.

5 голосов
/ 08 сентября 2010

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

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 нет.

2 голосов
/ 28 ноября 2008

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

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

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

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

I

1 голос
/ 12 июля 2016

Это модульный тест 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);
        }
    }
0 голосов
/ 12 марта 2013

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

0 голосов
/ 28 ноября 2008

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

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

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