2016年2月14日日曜日

ubuntu 14.04 + nginx + SSL立ち上げ

■apt準備
/etc/apt/sources.list に以下を追加

deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx

■パッケージインストール
apt-get update
apt-get install nginx

■設定
nginxのサイト設定は以下のどちらかのフォルダに設定することが出来る。
/etc/nginx/conf.d
/etc/nginx/sites-available

運用方針は人それぞれだが共通設定をconf.dに置き、サイト設定はsites-availableに置く。
有効にするサイト設定は/etc/nginx/sites-enabled/からシンボリックリンクを貼る

(1)サーバー共通設定作成
/etc/nginx/conf.d/default.conf を拡張子を変えて保存
/etc/nginx/conf.d/example_ssl.confを拡張子を変えて保存

/etc/nginx/conf.d/default.conf を新たに作成し中身を以下にする

========== ここから ==========
server {
    listen 80;
    listen [::]:80;

# httpへのアクセスをhttpsへリダイレクトする
#    return 301 https://$host$request_uri;     <= 後でコメントをはずす
}
========== ここまで ==========

(2)PFS用パラメータを生成
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam 2048 -out dhparam.pem

■サイト設定
(1)サイト設定の有効化
/etc/nginx/nginx.confの末尾に以下を追加

include /etc/nginx/sites-enabled/*;

(2)サイト設定の作成
/etc/nginx/sites-available/defaultのコピーを作成する

root および server_name を適宜設定
apache2からの移行ならroot は /var/www/html で良いかもしれない

(3)サイト設定の有効化
cd /etc/nginx/sites-enabled
ln -s /etc/ngingx/sites-available/<(2)でコピーしたサイト>

■let's encryptインストール
sudo su
cd /usr/share  <= どこか適当な場所でよい
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help

依存関係が自動でインストールされてヘルプが表示されれば成功

■証明書取得
./letsencrypt-auto certonly --webroot -w <WEBファイルルートフォルダ> -d <サイトドメイン名> -d www.<サイトドメイン名> -m <管理者メールアドレス> --agree-tos

www.<サイトドメイン名>オプションは必要に応じて。無くてもいい。
取得に成功すると /etc/letsencrypt/live/<ドメイン名>/に証明書ファイルが保存される。
保存されるのは以下4ファイル

cert.pem
chain.pem
fullchain.pem 
privkey.pem

■nginx SSL設定
(1)SSL設定
/etc/nginx/sites-available/ssl を作成し中身を以下にする

========== ここから ==========
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name <サーバーのドメイン名>;

    root <WEBファイルルートフォルダ>;
    index index.html;

    ssl_certificate      /etc/letsencrypt/live/<ドメイン名>/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/<ドメイン名>/privkey.pem;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  5m;

    # サーバ側の暗号化スイートを優先する
    ssl on;

    # SSLプロトコルを安全なものだけ指定
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    # 暗号化アルゴリズムはサーバーが指定.
    ssl_prefer_server_ciphers on;

    # 具体的に使うアルゴリズム以外は無効に設定
    ssl_ciphers  EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!EXPORT:!DES:!3DES:!MD5:!RC4:!DSS:!SHA1;

    # Perfect Forward Security (PFS)用パラメータ
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

    # Online Certificate Status Protocol(OCSP)有効化
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;

    # HTTP Strict Transport Security(HSTS)有効化
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
}
========== ここまで ==========

(2)80ポートの扱い変更
最初に作成した/etc/nginx/conf.d/default.confの末尾のコメントをはずしポート80へのhttpアクセスはポート443のhttpsにリダイレクトする

この設定はお好みで。80をふさぐ場合は設定そのものを消す

■nginx起動
service nginx restart

■セキュリティ状態の確認
https://www.ssllabs.com/ssltest/index.html
ドメイン名を入力してテストしてもらう

■let's encrypt 証明書自動更新
/etc/cron.monthly/letsencrypt.shを作成

========== ここから ==========
#!/bin/sh
/usr/share/letsencrypt/letsencrypt-auto renew --force-renew
service nginx reload
========== ここまで ==========

0 件のコメント:

コメントを投稿