bpssl / docs / ja / source / install.rst

インストール

アプリケーションインストール

bpssl をインストールするのが簡単ですが、ウェブサーバーと 連携するところがありますので、注意しないといけません。

まずは、ポッケージを PIP でインストールします:

$ pip install bpssl

もしくは easy_install で:

$ easy_install bpssl

次に、 'beproud.django.ssl'settings.pyINSTALLED_APPS に追加してください。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    #...
    'beproud.django.ssl',
    #...
)

コンテキストプロセッサー

:func:`beproud.django.ssl.context_processors.conf` コンテキストプロセッサーを TEMPLATE_CONTEXT_PROCESSORS に追加してください。

TEMPLATE_CONTEXT_PROCESSORS = (
    #...
    'beproud.django.ssl.context_processors.conf',
    #...
)

ミドルウエアを設定

それから、 'beproud.django.ssl.middleware.SSLRedirectMiddleware'MIDDLEWARE_CLASSES に追加してください。

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    #...
    'beproud.django.ssl.middleware.SSLRedirectMiddleware',
    #...
)

HTTPのリバースプロクシーを使う場合は、 'beproud.django.ssl.middleware.SSLProxyMiddleware'MIDDLEWARE_CLASSES に 追加する必要があります。できるだけ上に登録すること。

MIDDLEWARE_CLASSES = (
    'beproud.django.ssl.middleware.SSLProxyMiddleware',
    # ...
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # ...
    'beproud.django.ssl.middleware.SSLRedirectMiddleware',
    # ...
)

ウェブサーバーの設定

SSLのエンコードやデコードがウェブサーバーで行うため、Djangoのアプリケーション側で、 リクエストがセキュアかどうかを判断するには、ウェブサーバーからその情報 をアップストリームのアプリケーションサーバーに送る必要があります。その情報を送る ために、ウェブサーバーを設定する必要があります。具体的にいうと、 request.is_secure() に頼っているので、このメソッドが正しい値を返すようにします。

nginx・FastCGIの場合

nginxとFastCGIを使う場合、ウェブサーバーの設定で、FastCGIの HTTPS パラメーターを on に設定すれば、 Django のアプリケーションはHTTPかHTTPSかを判断することが できます。そうするには、 fastcgi_paramHTTPS on に設定します。 HTTPS'on' に設定すれば、flup は wsgi.url_schemehttps に設定し、 request.is_secure() が正しい値を返すようになります。

location / {
    include                 /etc/nginx/fastcgi_params;
    fastcgi_pass            upstream;
    fastcgi_param           HTTPS on;
}

nginx・HTTP proxyの場合

HTTPリバースプロクシーとして、nginx を使う場合、HTTPリクエストがセキュアか どうかの情報をHTTPヘッダーでアプリケーションに渡す必要があります。 HTTPSで、送っているはずなのに、ブラウザがHTTPで情報を送らせてしまう man-in-the-middle 攻撃を避けるために、 HTTP リクエストの場合でも、nginxで このヘッダーを設定する、もしくは削る必要があります。

:ref:`SSL_REQUEST_HEADER <setting-ssl-request-header>` で設定したヘッダー名と 値を nginx 側で設定してください。 :class:`SSLProxyMiddleware <beproud.django.ssl.middleware.SSLProxyMiddleware>` と併用します。

#HTTP
server {
    listen 80;
    location / {
        proxy_pass          http://myproxy;

        # We need to set this header for HTTP requests as well
        # so that we won't fall victim to man-in-the-middle attacks.
        proxy_set_header X_FORWARDED_PROTOCOL      "http";
        # ...
    }
}

# HTTPS
server {
    listen 443;
    ssl on;
    # ...
    location / {
        proxy_pass          http://myproxy;
        # This should be set to the same headeras the
        # non-ssl setup above.
        proxy_set_header    X_FORWARDED_PROTOCOL   https;
        # ...
    }
}

Apache・FastCGIの場合

Apache・FastCGIの場合は、HTTPS の環境変数を設定したら、 request.is_secure() は 正しく動作するはず。Apache の rewrite モジュールで、以下の様に HTTPS 環境変数を 設定できます。

<VirtualHost *:443>
    SSLEngine on
    # ...

    RewriteEngine on
    RewriteCond %{HTTPS} on
    RewriteRule .* - [E=HTTPS:on]

    # ...
</VirtualHost>

Apache・mod_wsgiの場合

Apache・mod_wsgi を使う場合は、 wsgi.url_scheme が設定していますので、 特に特別な設定をせずに、 request.is_secure() が正しい値を返します。

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.