web-dev-qa-db-ja.com

Rails 4アプリでSSLを設定するにはどうすればよいですか?(nginx + passenger)

ステージングRailsアプリをnginxで乗客と一緒に実行しています。SSLで接続を保護したいです。オンラインで多くのリソースを読みましたが、まだSSLで実行していません。

これまでのところ、nginx.confのサーバーブロックは次のとおりです。

server {
     listen 80;
     listen 443 default deferred;
     server_name example.com;
     root /home/deploy/app/public;
     passenger_enabled on;

     passenger_set_cgi_param HTTP_X_FORWARDED_PROTO https;

     ssl on;
     ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:!ADH:!AECDH:!MD5;
     ssl_prefer_server_ciphers on;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_certificate     /etc/ssl/server.crt;
     ssl_certificate_key /etc/ssl/server.key;
 }

サイトは実行されていますが、HTTPSでは実行されていません。

16
user1584575

私は自分でSSLを使用することを決定し、これを行う方法について DigitalOcean サイトで記事を見つけました。それはlisten 443 default deferred;である可能性があり、その記事によれば、sslではなくdeferredである必要があります。

これが彼らが使用するnginxブロックです。

server {
  listen 80 default_server;
  listen [::]:80 default_server ipv6only=on;

  listen 443 ssl;

  root /usr/share/nginx/html;
  index index.html index.htm;

  server_name your_domain.com;
  ssl_certificate /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key /etc/nginx/ssl/nginx.key;

  location / {
    try_files $uri $uri/ =404;
  }
}

更新:

現在、自分のサイトをSSLで実行しています。上記に加えて、私はRailsにSSLを強制するように指示しました。本番環境の構成で;

# ./config/environments/production.rb
config.force_ssl = true

オプションで、これらの設定をnginx.confに追加できます。

http {
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  keepalive_timeout 70;
}

更新:2015-09

この回答を書いたので、nginx構成にいくつか追加したものを追加しました。これは、誰もが含める必要があると思います。以下をserverブロックに追加します。

server {
  ssl_prefer_server_ciphers On;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

  add_header X-Frame-Options DENY;
}

最初の3行(ssl_prefer_server_ciphersssl_protocolsssl_ciphers)は、強力なSSL設定があることを確認するため、最も重要です。

X-Frame-Optionsは、サイトが<iframe>タグを介して含まれるのを防ぎます。ほとんどの人がこの設定を含めることで恩恵を受けると思います。

28
Michael R. Cook