SSL通信時にセッションを暗号化する方法

2019年10月24日 15:07
    以前、「Let's Encryptを使用したWebサーバーのSSL化」という記事を書きました。
    実はこの設定だけでは不十分だったので、今回はその続きを書きます。

    セッションが保存されない

    このポートフォリオサイトでは管理者のみがログインできる機能を持っています。
    Railsチュートリアルを見ながら作った自前のログイン機能です。
    このログイン機能ではログイン情報をセッションに保存しているのですが、WebサーバーのSSL化を行ってからセッションが保存されなくなりました。
    ログイン状態のセッションが存在しないとログイン画面にリダイレクトする設定になっているので、何度ログインしようとしてもログイン画面に戻されるという状況になってしまいました。

    Railsアプリの設定

    config/environments/production.rbの設定を以下の通り変更します。
    # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
    config.force_ssl = true
    コメントアウトを外して強制SSL化設定を有効にします。
    私は49〜50行目にありました。なければ普通に追加すればいいと思います。

    Nginxの設定

    /etc/nginx/conf.d/app.confを編集します。
      server {
        listen 80;
        ...
        location @app {
          # HTTP headers
          # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          # proxy_set_header Host $http_host;
          # proxy_redirect off;
          # proxy_pass http://app_server;
          proxy_set_header Host $http_host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Host $host;
          proxy_set_header X-Forwarded-Server $host;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_redirect off;
          proxy_pass http://app_server;
        }
        ...
      }
      server {
        listen 443 ssl;
        location @app {
          # HTTP headers
          # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          # proxy_set_header Host $http_host;
          # proxy_redirect off;
          # proxy_pass http://app_server;
          proxy_set_header Host $http_host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Host $host;
          proxy_set_header X-Forwarded-Server $host;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_redirect off;
          proxy_pass http://app_server;
        }
        ...
      }
    http設定とhttps設定の両方に同じ設定を追加します。
    私ははじめhttp設定の方にしか追加していなく、ERR_TOO_MANY_REDIRECTSというエラーが出て焦りました。
    (ポートフォリオサイトがクラッキングされたのかと思った😊)

    session_store.rbって?

    前項までで設定は終わりなんですが、いろいろと検索していたときによく「session_store.rbをあーだこーだ」という記述が見られたので補足しておきます。
    config/initializers/session_store.rbは、Rails5.1からデフォルトでは作成されなくなったセッション設定ファイルのようです。
    これがなくてももちろん動きますし、設定自体は生きているらしいのでファイルを手動で追加すれば機能させることもできます。
    今回の内容を満たすためには必要ありませんでした。

    関連記事

    関連記事はありません。