2017年7月15日土曜日

Ubuntu16.04 の nginx で SSL 通信を有効にする方法

概要

Ubuntu16.04 で apt install できる nginx に SSL 証明書を設定して https 通信させてみました
Web 上に他にもいろいろと nginx + ssl の記事はありますが自分の備忘録として残しておきます

環境

  • Ubuntu 16.04
  • nginx 1.10.3

nginx のインストール

  • apt -y install nginx

今回は apt でインストールします
執筆時点での nginx の最新版は 1.13.3 なのでバージョン的にはかなり古いものになります

SSL の有効化

ディレクトリ構成などは apt install できたものをそのまま採用してます

設定ファイルの作成

まず SSL 用の設定ファイルがないので作成します

  • touch /etc/nginx/sites-available/ssl
  • vim /etc/nginx/sites-available/ssl
server {
        listen       443;
        server_name  your.site.domain.com;

        ssl                  on;
        ssl_certificate      /etc/ssl/certs/chain_server.crt;
        ssl_certificate_key  /etc/ssl/certs/server.key;

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;

        location / {
            proxy_pass http://localhost:9292/;
            proxy_redirect default;
        }
}

server_name には 443 で受けるサーバまたはロードバランサのドメイン名を指定してください
ポイントとしては ssl_certificate の項目で nginx の場合 CA 証明書を設定する欄はなく ssl_certificate でサーバ証明書と CA 証明書を設定します
つまりどういうことかというと 2 つのファイルを結合して配置します

連結証明書の作成

  • scp server.crt server.key ca.crt server001:/etc/ssl/certs

ローカルからサーバに証明書を転送します、すでにサーバに証明書一式がある場合はこの作業は不要です
パスは「/etc/ssl/certs」に配置します

  • cd /etc/ssl/certs
  • cat server.crt ca.crt >> chain_server.crt

単純に cat で結合すれば大丈夫です

設定ファイルを有効化

Ubuntu + apt install の場合 sites-enabled に使いたい設定ファイルのシンボリックリンクを作成することで設定を追加することができます
Apache とかもこの方式を採用しています

  • cd /etc/nginx/sites-enabled
  • ln -s /etc/nginx/sites-available/ssl ssl
  • rm default
  • systemctl restart nginx

作成した ssl を sites-enabled にリンクして終了です
あとは nginx を再起動してあげましょう

動作確認

ブラウザや curl で適当にドメインにアクセスして localhost:9292 で動作してるアプリにアクセスできるか確認してください
もちろんローカルで動作しているアプリは別のものに変更して大丈夫です

最後に

Ubuntu16.04 の nginx で https 通信を設定してみました
Web 上に膨大な情報があるので簡単にセットアップできると思います

この後の Tips でも紹介していますが、地味に ufw の設定などでハマるかもしれません

Tips

もし key ファイルにパスが設定されている場合は以下のコマンドでパスフレーズがない key ファイルを作成してください
パスフレーズがあっても問題ないのは問題ないですが、systemctl で自動起動などができなくなります

  • openssl rsa -in server.key -out nopass_server.key

パスフレーズがわからない場合はさすがに証明書の管理者に聞くしかないと思います

Ubuntu の場合 ufw が効いているので 443 をオープンしましょう

  • ufw allow 443

あと curl で以下のようなエラーが出た場合は CA 証明書が適切に連結されているか確認してみてください

curl: (60) server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

証明書によっては CA ファイルが不要な証明書もあるのでその場合は特にエラーも出ないと思います

0 件のコメント:

コメントを投稿