sirve - ¿Se verifica el nombre de dominio del servidor durante el protocolo de enlace SSL?
ssl wikipedia (3)
Durante el protocolo de enlace SSL, ¿se verifica el nombre de dominio del servidor durante el protocolo de enlace SSL, me refiero a que el nombre de dominio en el servidor está certificado y verificado en relación con el dominio en el que se está ejecutando el servidor?
Ejemplo: supongamos que el certificado del servidor tiene el dominio mydomain.com. Y si el servidor se está ejecutando en el dominio someotherdomain.com ... ¿Se hace esto durante el protocolo de enlace SSL y se cancela porque mydomain.com no es algún otrodominio.com?
No. La verificación del nombre de host es parte de HTTPS, no de SSL.
Sí. Durante el protocolo de enlace SSL, el cliente debe comparar el nombre de host al que se conecta con los nombres de dominio especificados en el certificado. De lo contrario, TLS se volvería inútil, ya que los ataques MITM serían triviales de lo contrario.
Tenga en cuenta que existe un software mal escrito que acepta cualquier certificado presentado y no valida adecuadamente el certificado. Recientemente hubo un informe sobre este tema en relación con el software Android. Al parecer, miles de títulos de software ofrecidos (principalmente software gratuito) no realizan una validación adecuada, lo que impone riesgos de seguridad para sus usuarios.
Depende...
El estándar SSL / TLS en sí mismo no especifica cómo y cuándo se verifica el certificado del servidor.
De la introducción :
[...] las decisiones sobre cómo iniciar el protocolo de enlace TLS y cómo interpretar los certificados de autenticación intercambiados quedan a criterio de los diseñadores e implementadores de los protocolos que se ejecutan sobre TLS.
Dicho esto, aunque no especifica cómo debe llevarse a cabo la autenticación, las implementaciones están destinadas a realizar esta comprobación durante el protocolo de enlace (o al menos, inmediatamente después):
- Ver el apéndice D.
- Algunos mensajes de error están claramente relacionados con el error de autenticación del certificado (
bad_certificate
,certificate_expired
, ...). - Parte del texto en la descripción general del handhsake : " [...] Si el servidor está autenticado, puede solicitar un certificado del cliente, si es apropiado para el conjunto de cifrado seleccionado " .
En la mayoría de los casos, la verificación del certificado en sí está guiada por RFC 3280 / RFC 5280 . Un número de pilas SSL / TLS al menos hará esto por defecto.
La verificación del nombre de host, que podría considerarse como uno de los pasos de autenticación del certificado, se ha implementado históricamente por separado. Esto se debe principalmente a que RFC 3280 / RFC 5280 no atendió este paso y lo dejó a cada protocolo de aplicación. Hay un intento de armonización relativamente reciente en RFC 6125 (puede encontrar las diferencias en los protocolos en el Apéndice B).
La verificación del nombre de host se realiza durante el protocolo de enlace SSL / TLS depende de la biblioteca que esté utilizando y de cómo lo haya configurado.
Por ejemplo, antes de Java 7, esto tenía que hacerse por separado de la API JSSE principal ( SSLSocket
/ SSLEngine
). (Esto se hizo en HttpsURLConnection
, por ejemplo, pero se encuentra en la parte superior de JSSE, no dentro.) Desde Java 7, es posible realizar esta comprobación durante el X509ExtendedTrustManager
y dentro de JSSE utilizando el X509ExtendedTrustManager
, pero esto debe configurarse utilizando SSLParameters.setEndpointIdentificationAlgorithm(...)
, que solo es compatible con HTTPS
y LDAPS
(dicho esto, incluso si su servicio no usa HTTP, usar HTTPS
para el algoritmo de identificación de punto final no sería una mala elección, sin duda mejor que nada )
Otras bibliotecas SSL / TLS o que envuelven otras bibliotecas en otros idiomas tienden a tener devoluciones de llamada para esto. Que los desarrolladores lo usen (y lo usen correctamente) depende, como se muestra en este documento . (También podría estar interesado en esta pregunta en Security.SE).