¿Se puede configurar el servidor HTTPS sin un certificado de servidor?

31

Me he dado cuenta de que se puede configurar una conexión HTTPS con el servidor configurado para usar un certificado y, cuando se requiere seguridad adicional, el servidor puede solicitar al cliente que proporcione un certificado de cliente, lo valide y establezca la conexión.

Parece que, si pedimos a todos los clientes que proporcionen sus certificados, que contienen claves públicas y firmas correspondientes, la conexión segura también debe poder establecerse. El servidor solo valida las firmas, luego encripta los datos que se envían usando la clave pública del cliente. Si el conocimiento de la identidad de los clientes es más importante que el del servidor, aquí no sirve de nada el certificado del servidor.

Entonces, ¿está soportado en el protocolo HTTPS, que el servidor no proporciona certificados pero solicita certificados de cliente y luego establece una conexión HTTPS?

    
pregunta Lucifer Orichalcum 08.07.2013 - 11:21
fuente

5 respuestas

43

HTTPS es HTTP dentro de SSL. SSL es un protocolo de túnel: funciona en un flujo bidireccional de datos existente, y proporciona una Secuencia bidireccional para datos. Las dos partes involucradas en SSL son el cliente y el servidor , que son dos roles dentro del protocolo SSL; no es necesario que estos roles se correspondan con las nociones de "cliente" y "servidor" del protocolo de transporte subyacente.

Por ejemplo, se puede imaginar una configuración, en la que el sistema cliente (C) inicia una conexión TCP con el servidor (S), y luego el servidor inicia un protocolo de enlace SSL, que actúa como el cliente SSL (es decir, enviando el mensaje ClientHello , en lugar de esperar un ClientHello entrante). Esto invierte los roles de ambas máquinas y también las garantías de seguridad: la máquina S tendrá una buena idea de la identidad del cliente C conectado, pero el cliente C no estará seguro de con qué servidor S está hablando (un atacante podría haber interceptado y redirigido la comunicación). Dependiendo del contexto, esto puede o no ser apropiado.

Sin embargo, esto se aparta de HTTPS , en el que el cliente TCP también es el cliente SSL, y ese cliente espera el servidor para mostrar un certificado, que el cliente validará con su CA conocida y confiable, y que contiene el nombre del servidor esperado (extraído de la URL, consulte section 3.1 ). En consecuencia, los clientes existentes (navegador web) no admiten la anulación de roles SSL. Si su situación requiere el uso de navegadores, entonces, por supuesto, debe usar solo la funcionalidad disponible en los navegadores.

SSL admite algunos conjuntos de cifrado sin certificado. Las suites de cifrado "DH_anon" se consideran débiles, ya que no implican ninguna autenticación (por lo tanto, Man-in- Los ataques del medio son posibles). Los conjuntos de cifrado PSK implican la autenticación mutua del cliente y el servidor con respecto a un secreto compartido. Cuando el secreto compartido es de baja entropía (por ejemplo, es una contraseña ), SRP cifrado Las suites son mejores.

Nuevamente, estas suites de cifrado no están (todavía) disponibles en los navegadores principales (aunque algunas personas están trabajando en ello ). Requieren un secreto compartido (clave o contraseña), una condición que puede o no ser fácil de lograr en su contexto específico.

Si el conocimiento de la identidad del servidor no es importante, puede darle al servidor un certificado autofirmado, junto con instrucciones para los clientes sobre cómo hacer que su navegador acepte el certificado del servidor sin encogerse demasiado fuerte (consulte esta pregunta como punto de partida). Esto se asignará a "SSL normal", que tiene dos ventajas:

  • Los navegadores existentes lo admiten.
  • Cuando el servidor presenta un certificado, aunque sea falso, se le permite solicitar, a cambio, un certificado de cliente , lo que proporciona el tipo de autenticación que está buscando. Y los navegadores web do admiten certificados de cliente para SSL.

Tenga en cuenta que el certificado autofirmado contiene la clave pública del servidor. Aunque esta clave pública no se validará, aún se utilizará para impulsar el intercambio de claves, por lo que debe usar un tipo y longitud de clave adecuados (por ejemplo, RSA 2048). Alternativamente, use uno de los conjuntos de cifrado "DHE", en cuyo caso la clave pública del servidor se usa solo para firmas, no para proteger realmente los datos, por lo que ( en su caso específico ), su tamaño y el secreto ya no es importante.

    
respondido por el Thomas Pornin 08.07.2013 - 13:25
fuente
13

No. De acuerdo con las especificaciones de HTTPS , se necesita un certificado, ya que es la forma en que un servidor se identifica ante el cliente. El certificado no necesita ser válido, es decir, el certificado no tiene que ser emitido y firmado por una CA en la que el navegador confíe de forma predeterminada.

HTTPS (HTTP sobre TLS) se creó con la idea de que necesitamos asegurarnos de que realmente estamos conectados al mismo servidor web al que intentamos conectarnos. De hecho, verá que muchos software de servidor web ni siquiera tienen el soporte para la autenticación HTTPS de dos vías.

Por supuesto, hay excepciones (conjuntos de cifrado anónimos, claves precompartidas, etc.) pero todas tienen sus propios problemas. Por ejemplo, Mozilla no admite conjuntos de cifrado anónimos en sus productos. Recientemente, Chrome también siguió la misma ruta . Las claves precompartidas tienen los problemas de implementación habituales, lo que realmente hace más conveniente el cifrado de clave pública.

La conclusión es: necesita un certificado de servidor para HTTPS.

    
respondido por el Adi 08.07.2013 - 11:47
fuente
5

No. En el momento en que comienza el intercambio TLS, debe proporcionar su propia clave pública.

Además, esto nunca funcionaría. Casi no hay Cualquier ataque MITM que sea solo "pasivo" , un atacante puede modificar los datos siempre que él / ella pueda olerlo.

Y el atacante puede simplemente pretender ser el cliente al interceptar la conexión antes de que se inicie TLS (en HTTPS de vainilla, esto no funciona ya que no se puede establecer la confianza del certificado de servidor web falso), y presentar su propio certificado como el cliente cert.

También, RSA requiere dos claves. Debe cifrar el texto con su clave privada y la clave pública del cliente. Una clave pública viene de la mano con un certificado, por lo que necesitará una.

    
respondido por el Manishearth 08.07.2013 - 12:15
fuente
4

Tienes que tener un certificado, pero puedes hacerlo tú mismo.

SSL (que es lo que proporciona HTTPS) requiere un certificado para una comunicación segura porque es la base del cifrado y lo que se utiliza para autenticar que el servidor es quien dice ser.

Si usted mismo hace un certificado, sus usuarios no tendrán ninguna razón para confiar en el certificado a menos que ya sepan que es preciso (ya que no tiene una verificación independiente de su identidad) pero proporcionará el cifrado. está bien y le confirmará a alguien que se conecte por segunda vez que se está conectando al mismo servidor que antes.

    
respondido por el AJ Henderson 08.07.2013 - 15:57
fuente
0

solo una breve enmienda: usted mezcla certificados de servidor , que son necesarios para proporcionar HTTP_ S _ - services, y certificados de clientes que se utilizan para autenticar un cliente.

Aunque se llama Certs, Client-Cert no tiene nada que ver con el cifrado; están a punto de autenticar al cliente contra un servicio. Client-Certs se generan utilizando algún tipo de PKI , donde una autoridad con ROOT-Cert ius ablke generará y Firmar cliente-Certs.

Apache puede realizar la autenticación a través de Client-Certs, así como VPN

    
respondido por el that guy from over there 09.07.2013 - 10:12
fuente

Lea otras preguntas en las etiquetas