2010-01-25 18 views
23

Estoy planeando vender productos mediante el cobro de tarjetas de crédito, por lo que usar SSL será crítico para el sitio web con Django. Y soy muy ingenuo para esto.Pregunta de Django y SSL

Mi plan inicial de instalación django utilizaba Apache como servidor web y usaba mod_wsgi para comunicarse con Django, un medio estático nuevamente servido por Apache. Todo parecía estar bien hasta que el protocolo SSL llegue a los planes.

Usaré el protocolo SSL para las páginas de configuración de cuentas de usuario, toda la secuencia de compra y tal vez en django admin.

He revisado la documentación oficial y buscado en Google, pero las respuestas son bastante confusas.

  • ¿Cuál sería la forma recomendada de implementar SSL para esta configuración?
  • ¿Alguna sugerencia para esta primera vez Implementador de SSL en un sitio web?
  • De this page, parece que han incluido Nginx en la pila. ¿No podría hacerse sin eso?

Gracias

Respuesta

28

He implementado aplicaciones Django en SSL usando mod_ssl y mod_wsgi de Apache.

No soy experto Apache, pero aquí es como me SSL de configuración para un sitio (poner las directivas a continuación en el archivo httpd.conf, o en un archivo de referencia de ese archivo, por ejemplo, en el directorio de sites-enabled, si es que se utiliza en tu instalación de Apache). Consulte el primer enlace de documentación a continuación sobre cómo crear y usar un certificado autofirmado.

NameVirtualHost *:443 
<VirtualHost *:443> 
    SSLEngine On 
    SSLCertificateFile /etc/apache2/ssl/certificatefile.crt 
    SSLCertificateKeyFile /etc/apache2/ssl/certificatekeyfile.crt 

    WSGIScriptAlias//path/to/file.wsgi 
</VirtualHost> 

enlaces Documentación:

+0

Y si sólo quiero Django/admin/URL para ir a través de https? ¿Qué tengo que agregar a tu ejemplo de configuración? – Feanor

+1

Supongo que la forma más sencilla es configurar los sitios http y https con la misma directiva '' WSGIScriptAlias''. Use un '' Redirect/admin'' en la configuración del sitio https. – codeape

7

Django no se ocupa de las cosas SSL. Apache se encargará de eso de forma transparente y Django funcionará como de costumbre. Puede verificar SSL en una vista con request.is_secure().

Sin embargo, debe publicar enlaces, según corresponda, como URL de https. También es posible que desee redirigir ciertas páginas http a páginas https (como la pantalla de administración de django).

14

Para los que vienen a través de Google, aquí una configuración de ejemplo para Nginx:

server { 
    listen 443 ssl default; 
    server_name example.com; 
    ssl on; 
    ssl_certificate /etc/nginx/server.crt; 
    ssl_certificate_key /etc/nginx/server.key; 
    add_header Cache-Control "public, must-revalidate"; 
    # add_header Cache-Control "no-cache"; 
    expires  1d; 
    add_header Strict-Transport-Security "max-age=2592000; includeSubdomains"; 

    location/{ 
     fastcgi_pass localhost:8000; 
     fastcgi_param PATH_INFO $fastcgi_script_name; 
     fastcgi_param REQUEST_METHOD $request_method; 
     fastcgi_param CONTENT_TYPE $content_type; 
     fastcgi_param CONTENT_LENGTH $content_length; 
     fastcgi_param SERVER_PORT  $server_port; 
     fastcgi_param SERVER_NAME  $server_name; 
     fastcgi_param SERVER_PROTOCOL $server_protocol; 
     fastcgi_pass_request_headers on; 
     # include fastcgi_params; 
    } 

    location /static { 
     root /home/myapp/application; 
    } 

    location = /favicon.ico { 
     root /home/myapp/application/assets; 
     access_log off; 
     log_not_found off; 
    } 

}