2010-01-25 6 views
23

Ich plane, Produkte zu verkaufen, indem ich Kreditkarten belaste, deshalb ist das Verwenden von SSL für Django-powered Website kritisch. Und ich bin sehr naiv.Django und SSL Frage

Mein ursprünglicher django-Setup-Plan verwendete Apache als Webserver und benutzte mod_wsgi, um mit Django zu kommunizieren, statische Medien, die wiederum von Apache bedient wurden. Alles schien gut, bis SSL-Protokoll zu den Plänen kommt.

Ich werde SSL-Protokoll für Benutzerkonto Konfigurationsseiten, die gesamte Kaufsequenz und vielleicht bei der Django-Admin verwenden.

Ich habe die offiziellen Dokumentationen überprüft und gegoogelt, aber die Antworten sind eher verwirrend.

  • Was wäre die empfohlene Methode zur Implementierung von SSL für dieses Setup?
  • Vorschläge zu diesem ersten Mal SSL-Implementierer auf einer Website?
  • Von this page scheint es, als hätten sie Nginx auf dem Stapel enthalten. Konnte es ohne es nicht getan werden?

Dank

Antwort

28

Ich habe Django-Anwendungen auf SSL mit Apache mod_ssl und mod_wsgi bereitgestellt.

Ich bin kein Experte Apache, aber hier ist, wie ich Setup SSL für eine Website (unter den Richtlinien setzt in der httpd.conf-Datei oder in einer Datei aus dieser Datei referenziert, zum Beispiel im sites-enabled Verzeichnis, wenn das verwendet wird, in Ihre Apache-Installation). Informationen zum Erstellen und Verwenden eines selbstsignierten Zertifikats finden Sie im folgenden Dokumentationslink.

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

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

Dokumentation Links:

+0

Und wenn ich nur will django/admin/Urls über https zu gehen? Was muss ich zu Ihrem Konfigurationsbeispiel hinzufügen? – Feanor

+1

Ich denke, der einfachste Weg besteht darin, sowohl die HTTP- als auch die HTTPS-Sites mit der gleichen '' WSGIScriptAlias''-Anweisung zu konfigurieren. Verwenden Sie ein "Redirect/admin" in der https-Site-Konfiguration. – codeape

7

Django das SSL-Zeug nicht verarbeitet. Apache wird das transparent für Sie erledigen und Django wird wie gewohnt arbeiten. In einer Ansicht mit request.is_secure() können Sie nach SSL suchen.

Allerdings müssen Sie Links als https URLs wo nötig bereitstellen. Sie können auch bestimmte http-Seiten auf https-Seiten umleiten (wie den Django-Admin-Bildschirm).

14

Für jene durch Google kommen, heres ein Beispiel Config für 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; 
    } 

}