Let's Encrypt で SSL 化しました

概要

SSL 化をします。

概要 (もうちょっと細かく)

Let’s Encrypt(LE) を使用して SSL 化をします。この環境はAWS Lightsailなので、SSL化を行うならACMでもよいのですが、ACMはELBかCloudFrontかAPI GatewayにしかSSL証明できない(と聞いた)。EC2単体にはできず、Lightsailもご多分に漏れず該当するので、まずはLEを使用します。ACMは他の機会にね。

環境

構成

Client--80:80--nginx(front)--8080--nginx(back)--html

80:80443:443 にします。

公式と手順

公式

自社のところでも使っててフフッってなる。

リバースプロキシとコンテナ

リバースプロキシだと WebRoot が「んっ?」となります。WebRoot = DocumentRoot にするのですが、リバースプロキシには配信している静的ファイルはないので困ってしまいます。

Let’s Encrypt Auto-Renewal for Nginx Reverse Proxies

打開策。ninjaドメインだ。リバースプロキシ側の conf ファイルに /.well-known の location 設定を追加する(+確認用のindexHTML)。記事内に出てくるrancherはコンテナ管理プラットフォーム(https://www.rancher.co.jp/)だそうで。

設定メモ

.well-known の作成と確認

sudo mkdir -p ~/docker-test/proxy/html/.well-known
sudo echo "test" > ~/docker-test/proxy/html/.well-known/test.html
    server {
        (中略)
        location /.well-known {
            root /usr/share/nginx/html/;
        }
        (中略)
    }

http://mkr-note.net/.well-known/test.html で test と表示される。

(今はありません。)

certbot

sudo apt -y install letsencrypt

ちょっと「ん?」って思ったところ。インストールはいいとして、certbot コマンドが動かない。find で探してもないので letsencrypt コマンドで進める。(それでも問題なかった。)

sudo letsencrypt certonly --webroot -w ~/docker-test/proxy/html/ -d mkr-note.net

表示されたウインドウ内の質問に対して、公式を参考に回答する。

SSL用修正

ssl_certificate の設定を悩み中。

生成された鍵を指定するのですが、最初にこんなエラーが出たので。 生成された鍵のディレクトリは複数あって参考ブログだとliveにしていたのだけど、それ対象にしたらエラー発生。ちなみにliveは、archiveに配置している鍵の symlink が入っている。

たぶん、権限をちょっと弄れば終わりそうですが。めんどくさ心が勝ってしまったので直接archive指定にしている。(ので鍵名のお尻に「1」がついてる。)

これはあとで直すかも。自動更新のときにギャーギャー言いそうなので。

(2018/11/4)追記

直しました。docker-compose.ymlで指定している volume のマウントを若干修正しました。ここまでマウントすんのもどうなの?って思うけど。

volumes:
    (中略)
    - /etc/letsencrypt:/etc/nginx/letsencrypt:rw

(2018/11/4)追記ここまで

    nginx: [emerg] BIO_new_file("/etc/nginx/certs/fullchain.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/nginx/certs/fullchain.pem','r')error:2006D080:BIO routines:BIO_new_file:no such file)
    server {
        listen 80;
        listen [::]:80;
        server_name mkr-note.net;
        return 301 https://$server_name$request_uri;
    }
    server {
        listen 443 ssl;
        listen [::]:443;
        server_name mkr-note.net;
        # archive
        ssl_certificate /etc/nginx/certs/fullchain1.pem;
        ssl_certificate_key /etc/nginx/certs/privkey1.pem;
        # live
        #ssl_certificate /etc/nginx/certs/fullchain.pem;
        #ssl_certificate_key /etc/nginx/certs/privkey.pem;
        (中略)
        location /.well-known/ {
            root   /usr/share/nginx/html/;
        }
    }

ポートフォワードと、ボリュームマウントを追加。

    ports:
      - "443:443"
    volumes:
      - (証明書を生成したディレクトリ):/etc/nginx/certs/

pelicanconf を修正。

    #SITEURL = 'http://mkr-note.net'
    SITEURL = 'https://mkr-note.net'
© てっくらのーと/mkr-note 2024