Let's Encryptを使用したWebサーバーのSSL化

2019年10月12日 10:41

    前提

    独自ドメインを取得していること。
    参考:Let's Encrypt で Nginx にSSLを設定する

    証明書を取得する前

    参考にさせていただいた記事では、証明書を取得する際、オプションを追加してスタンドアローンモードを使用しています。
    スタンドアローンモードを使用すると、最後の証明書の取得で以下のようなエラーが出る場合があります。
    Problem binding to port 80: Could not bind to IPv4 or IPv6.
    スタンドアローンモードのLet's Encryptは自前のHTTPサーバーを起動して証明書の取得を行おうとするのですが、既にNginxやApacheを起動していてTCP/80が使用中だとLet's EncryptのHTTPサーバーが起動(TCP/80のバインド)ができないというエラーです。
    なので、証明書を取得するコマンドを実行する前に、ApacheやNginxを停止しておく必要があります。
    私はNginxを使用しているので、Nginxのコマンドを以下に示します。
    $ sudo nginx -s stop

    Nginxの設定

    既に定義済みのHTTP(TCP/80)の設定はそのままにしておき、新たにHTTPS(TCP/443)の設定を追加します。
      server {
        listen 80;
        server_name www.autovice.jp;
        # リダイレクト設定
        return 301 https://$host$request_uri;
        ...
      }
      # 追加
      server {
        listen 443 ssl;
        ssl_certificate     /etc/letsencrypt/live/www.autovice.jp/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.autovice.jp/privkey.pem;
        server_name www.autovice.jp;
        ...
      }
    HTTP(TCP/80)のセクションに一行だけ追加します。
    HTTPでアクセスされた際、自動的にHTTPSにリダイレクトする設定です。

    Apacheの場合、Let's Encryptで証明書を取得するコマンドでオプションを指定すれば自動でリダイレクト設定を追加してくれるようですが、オプションを指定しなかった場合やNginxを使用している場合は手動でリダイレクト設定を追加する必要があります。

    Nginx起動

    最後にNginxを起動、または再起動してからWebサイトにアクセスできるか確認します。
    http://〜でアクセスしてhttps://〜にリダイレクトされることも確認しましょう。
    $ sudo nginx
    $ sudo nginx -s reload

    関連記事

    関連記事はありません。