2008-11-28 23 views

Respuesta

8

"It's easier to ask forgiveness than permission"

Por ejemplo, para leer stackoverflow.com a través de SSL, no preguntarse si stackoverflow.com lo soporta, simplemente hazlo. En 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 
>>> 

Muestra que stackoverflow.com no es compatible con SSL (2008).


Actualización:stackoverflow.com soporta https ahora.

2

no está seguro en su idioma de preferencia pero aquí está en C#

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

Tenga en cuenta esta cabecera es costumbre, pero creo que se entiende la idea. He visto gente simplemente consultar la solicitud de "https" y, además de ensuciarla, es razonablemente aceptable, depende de su modelo de seguridad.

¿O está preguntando si simplemente está disponible?

I

+0

Thx dove, creo que está en el lado del servidor, quiero saber en el lado del cliente cómo puedo saber si un servidor acepta conexiones SSL. (Si puedo de alguna manera). Creo que puedo hacerlo con un manejo de excepción, si trato de conectarme al servidor con ssl enable y obtengo una excepción, entonces el servidor (probablemente) no tiene ssl habilitado. ¿Pero puedo hacerlo de otra manera? –

0

Es necesario especificar qué protocolo se está trabajando con - hay versiones SSL de HTTP, IMAP, POP, etc.

asumiendo que es HTTPS que le interesa, usted podría comprobar para ver si hay algo escuchando en el puerto 443 en el servidor e ir de allí ...

+0

Sí, pensé en eso también, pero creo que el puerto del servicio depende de la configuración del servidor, ¿verdad? Por cierto, estoy trabajando con https y smtp, lo siento. Y mi idioma de preferencia es C#, pero acepto cualquier idioma como respuesta, si tengo uno: P. Gracias a los dos;) –

+0

Sí, el puerto depende de la configuración, pero si solo está intentando sitios aleatorios usando HTTPS, eso va a estar en el puerto 443. Si – genehack

5

No especifica un lenguaje de programación, pero puede hacerlo desde la línea de comandos.

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 

Ahí va ... Google lo hace, StackOverflow no lo hace.

0

Si está ejecutando código PHP o ASP en un servidor, la respuesta corta es que no. Puede intentar hacer una conexión de socket a la dirección IP no ssl, y ver si obtiene un certificado ssl, y enumerar su nombre común y SubjectAlternativeNames, pero en general, la respuesta simple es que no. Una configuración frecuente (incorrecta) de apache es escuchar en el puerto 443 sin un certificado SSL, por lo que poder hacer la conexión no es garantía de que haya SSL allí. Si no puede establecer la conexión, es posible que su aplicación no tenga privilegios de red. Debido a que la configuración de SSL es un problema, usted sabe si tiene SSL o no, y esa es una decisión de configuración. Es como preguntarse cuántos hijos tienes, debes saber.

0

Ésta es una prueba # unidad C para llevar a cabo la detección sin tener que estar en el HttpContext derecha:

[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); 
     } 
    } 
Cuestiones relacionadas