En primer lugar, creo que lo más importante que se perdió el OP es que la negociación SSL / TLS ocurre primero. Solo la conexión segura DESPUÉS se negocia y se valida, puede haber cualquier comunicación HTTP. HTTPS es un nombre incorrecto, es solo que su antiguo HTTP simple solo se envía a través de SSL / TLS completamente independiente.
Si el sitio real tiene un certificado SSL / TLS, eso detendría el
hacker de redireccionar digamos google.com a su propio servidor?
Los certificados se verifican y TLS se establece antes de que se realice cualquier HTTP. Con certificado incorrecto, la conexión nunca se establecerá en primer lugar. No hay espacio para redirecciones.
¿El servidor web no determina si se conecta a través de HTTP o HTTPS?
No, el cliente lo hace. Ya sea abriendo el socket y enviando la solicitud HTTP en texto sin formato, o abriendo el socket, realizando una negociación SSL / TLS completa y luego enviando la solicitud HTTP.
Y la búsqueda de DNS se realiza antes de que se conecten al servidor.
Sí, pero el cliente compara el certificado con el nombre DNS. Por lo tanto, puedo hacer que el DNS te engañe para que me acerques a mí en lugar de a Google, pero todavía necesitaré un certificado emitido para google.com
¿No podrían simplemente decirle al cliente que se conecte a través de HTTP en lugar de HTTPS?
No. Nunca tienen la oportunidad de hacer esto.