redireccionar - ¿Cómo puedo verificar si un servidor tiene ssl habilitado o no?
instalar certificado.cer en linux (6)
Debe especificar con qué protocolo está trabajando: hay versiones SSL de HTTP, IMAP, POP, etc.
Suponiendo que sea HTTPS lo que le interese, podría verificar si algo está escuchando en el puerto 443 del servidor e ir desde allí ...
¿Alguien de ustedes sabe si, y si es así, cómo puedo verificar, con el código de mi aplicación, si un servidor tiene ssl habilitado o no?
no estoy seguro de 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 que este encabezado es personalizado, pero creo que tiene 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 preguntas si simplemente está disponible?
yo
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..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í tienes ... Google lo hace, no.
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.
Esta es una prueba de unidad C # para realizar la detección sin tener que estar en el HTTPContext correcto:
[TestMethod]
public void DetectSslSupport()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.someinsecuresite.com");
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
//some sites like 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);
}
}
"Es más fácil pedir perdón que permiso"
Por ejemplo, para leer .com
través de SSL, no preguntes si .com
admite, simplemente hazlo. En Python:
>>> import urllib2
>>> urllib2.urlopen(''https://.com'')
Traceback (most recent call last):
...
urllib2.URLError: <urlopen error (10060, ''Operation timed out'')>
>>> html = urllib2.urlopen(''http://.com'').read()
>>> len(html)
146271
>>>
Muestra que .com
no es compatible con SSL (2008).
Actualización: .com
compatible con https ahora.