Antes que nada, hablas de dos maneras completamente diferentes de usar un certificado. Si usa un certificado firmado por el servidor de una CA, entonces el usuario se autenticará antes de la carga de la página (al crear un canal seguro) y sabrá quiénes son. De la otra manera que mencionas, almacenar el certificado de usuario en UserProfile, ¿te refieres a almacenar el certificado privado? Esto está muy lejos de un enfoque seguro. ¿Qué esperas exactamente guardar en el perfil del usuario, que te servirá para la autenticación? Y si lees esto desde UserProfile, ¿cómo se autenticará realmente el usuario? ¿Usando nombre de usuario + contraseña? Entonces, ¿cuál es el objetivo del certificado en el perfil?
No haría SSL en Django. Un enfoque más adecuado para manejar esto es mantener todo el material SSL en Apache usando un encabezado HTTP después. Usted emite un certificado al usuario, lo agrega en sus navegadores y, cuando se conecta al sitio, Django verifica el certificado y extrae el nombre de usuario asociado con la solicitud. A continuación, transfiera este nombre de usuario como encabezado HTTP a la aplicación Django, p. HTTP_USER_NAME = some_user. También asegúrese de que Apache elimina todos los encabezados de la solicitud del cliente. Entonces su aplicación Django no debería hacer nada más: confiará en que Apache ya hizo el trabajo AUTH y obtendrá el nombre de usuario. (Esto funciona bien con Nginx, y aunque no lo he usado en Apache, no veo una razón por la que no sea posible con él también, tal vez necesites un poco de mod de Apache para instalarlo).
Por lo tanto, la única desventaja de este enfoque es que probablemente tendrá que hacer un trabajo manual con la firma/envío de certificados al usuario, pero si esta no es una operación que se repite con frecuencia, parece estar bien a cambio de la seguridad Ofrece.
ACTUALIZACIÓN: Este es un ejemplo de cómo hacer la autenticación SSL en Apache: http://www.zeitoun.net/articles/client-certificate-x509-authentication-behind-reverse-proxy/start y para nginx: http://forum.nginx.org/read.php?5,226319
¿es posible realizar la autenticación del cliente utilizando el matraz? – nishi
Tengo una aplicación django y los clientes tienen sus certificados digitales en memorias USB cómo leer sus certificados con django –