¿Está bien si un servidor no verifica un certificado?

3

Actualmente estoy aprendiendo MUCHO sobre Azure, Azure Active Directory y Azure Key Vault (AKV).

Para comenzar, consulte este artículo :

En particular, estoy interesado en esta declaración:

Al diseñar una aplicación, tenga en cuenta los siguientes puntos sobre certificados de administración:

  • La API de administración de servicios no verifica que un certificado aún sea válido. La autenticación tendrá éxito contra un certificado caducado.

A primera vista, esto me parece peculiar e incluso un poco extraño. Sin embargo, no soy más que un experto en seguridad, y estoy buscando algunas aclaraciones y perspectivas aquí.

Además, también parece que lo mismo ocurre con las conexiones de certificado a Azure Key Vault. Es decir, puedo cargar un certificado no confiable (pero autofirmado) al servicio AKV, y aunque no tengo que verificar el certificado en el lado del cliente (ver a continuación), puedo hacer una llamada con ese mismo certificado para El servidor y devolverá los datos en consecuencia.

Para algunos códigos, aquí hay un fragmento de este artículo .

public static class CertificateHelper
{
    public static X509Certificate2 FindCertificateByThumbprint(string findValue)
    {
        X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
        try
        {
            store.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindByThumbprint, 
                findValue, false); // Don't validate certs, since the test root isn't installed.
            if (col == null || col.Count == 0)
                return null;
            return col[0];
        }
        finally
        {
            store.Close();
        }
    }
}

Puede ver que false se pasa al método Find para que no verifique el certificado (en el lado del cliente). Esto tiene sentido hasta ahora (para propósitos de prueba), pero este certificado no verificado se puede usar para recuperar datos del Almacén de claves de Azure (donde el certificado no parece ser verificado en el servidor). También vale la pena tener en cuenta que este certificado es autofirmado y no se ha agregado a ningún editor de confianza ni a una autoridad raíz en el cliente (por lo que falla si pasa el true al método Find anterior), ni tiene ha sido añadido a cualquier tienda en el servidor (que yo sepa). Una idea es que podría agregarse a una tienda confiable en el servidor, pero no he visto ninguna documentación sobre esto.

Entonces, quería hacer esta pregunta aquí para ver si esto se considera una política adecuada (y segura) para no verificar un certificado en el servidor, y si es así, ¿por qué? Me parece que la razón principal para tener un certificado es verificarlo en ambos del lado del cliente y del servidor.

Gracias de antemano por cualquier aclaración.

EDITAR: Solución

Después de la útil respuesta de @ Mky, estoy editando / agregando esta pregunta con correcciones a mi entender.

Primero, mi comprensión anterior es incorrecta en la segunda parte de la pregunta. Los certificados no se cargan en AKV, sino en Azure Active Directory. Debido a esto, AAD sirve como punto de seguridad y autenticación. AKV toma la solicitud del cliente que tiene el certificado adjunto y luego se autentica con ese certificado en AAD.

Además, en todo este proceso, la clave privada se usa durante el proceso de autenticación del cliente que llama (cliente / aplicación web) para firmar un mensaje serializado y codificado creado a partir de la credencial del certificado. Por lo tanto, aunque el certificado puede no ser válido / verificado desde el almacén de certificados del cliente, debe tener instalada la clave privada desde la cual se creó el certificado. Espero que tenga sentido. ¡Por mi parte, siento que mi cabeza está dando vueltas por todo esto!

    
pregunta Mike-EEE 22.02.2016 - 23:47
fuente

1 respuesta

3

De hecho, es obligatorio verificar el certificado de la persona con la que está hablando.

Sin embargo, no tiene sentido que el servidor verifique su propio certificado. Sería como si verificara que la llave de su casa todavía abre la puerta o si cambiara las cerraduras. En operaciones normales, ya deberías saber esto.

La verificación del certificado del servidor del lado del servidor solo es útil para alertarle sobre el trabajo de mantenimiento que se debe realizar. Después de esto, tomará una decisión informada para presentar el certificado que desea. Se arriesga a que el cliente no lo autentique y se niegue a comunicarse (lo que debería ser su comportamiento normal si se proporciona un certificado incorrecto).

    
respondido por el M'vy 23.02.2016 - 10:35
fuente

Lea otras preguntas en las etiquetas