¿Cómo puedo ver si un sitio admite HTTPS? [cerrado]

0

Tengo un proxy de forking C clásico en mi LAN; Ahora que sé "cómo hacer socket", me gustaría otorgarle algo de privacidad.

Por ejemplo, la extensión del navegador HTTPS Everywhere ( de su página de Wikipedia ),

  

Hace que los sitios web utilicen la conexión HTTPS más segura en lugar de HTTP, si la admiten.

Si usara OpenSSL en mi proxy, realizaría conexiones encriptadas: si mi proxy recibe una solicitud GET (solicitud HTTP simple para una conexión no segura), con OpenSSL protegería esa conexión agregando una capa de TLS a it.

Pero como se indica en mi cita anterior, HTTPS Everywhere hace que un sitio web use conexión HTTPS si el sitio lo admite .

Entonces, ¿cómo puedo verificar (con el código C) si un sitio web determinado es compatible con HTTPS?

... no me digas que solo necesita intentar una conexión con el puerto 443 del servidor remoto.

    
pregunta Andrea Mazzocchi 16.12.2016 - 09:18
fuente

2 respuestas

2

Todo lo que necesita hacer es conectarse al sitio remoto en el puerto 443.

Si tiene un sitio web que se ejecuta en el puerto predeterminado en un nombre de host dado, entonces usará el puerto 443 para HTTPS. Si el sitio web NO usa el puerto predeterminado, no hay manera de saber qué puerto se usará para HTTPS (si lo hay), excepto intentar un protocolo de enlace en cada puerto posible: eso es demasiado lento para el proxy y puede hacer que IDS lo bloquee. .

Es posible que también desee verificar la respuesta en " cómo funciona TLS "que describe el apretón de manos en detalle.

    
respondido por el Stephane 16.12.2016 - 09:29
fuente
0

HTTPS Everywhere de la EFF no tiene ninguna magia para determinar si un sitio admite HTTPS.

Lo que sí tiene es una gran lista de reglas de reescritura de URL. Cuando alimenta una URL HTTP en un extremo, lo que sale en el otro extremo es la misma URL HTTP con la que comenzó, o la URL HTTPS correspondiente. Tenga en cuenta que la URL HTTPS correspondiente puede ser diferente de la URL HTTP.

En consecuencia, si simplemente está intentando replicar la funcionalidad de HTTPS Everywhere, considere simplemente usar el conjunto de reglas HTTPS Everywhere directamente está bastante bien documentado cómo escribir estas reglas, así que interpretarlas en tu propio código debería ser relativamente fácil. (C podría no ser el lenguaje más fácil para trabajar con expresiones regulares, pero sospecho que libpcre y amigos pueden ser útiles).

Esto funciona mucho mejor que simplemente reemplazando http:// con https:// al principio porque:

  • No todos los sitios ofrecen el mismo contenido a través de HTTP y HTTPS
  • No todos los sitios están configurados correctamente para HTTPS con un certificado firmado por una CA

Si combina la lista HTTPS Everywhere con la Lista de precarga de HSTS , debería cubriendo un porcentaje significativo de sitios web populares con capacidad HTTPS con un mínimo de trabajo y un mínimo riesgo de problemas.

    
respondido por el a CVn 16.12.2016 - 13:44
fuente

Lea otras preguntas en las etiquetas