【ubuntu】Let’s Encryptを使って無料でHTTPS通信を実現しよう【使い方】


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

国内の格安VPSを使用した際に、HTTP通信をSSL化しようとしました。契約オプションでSSL有効化があったのですが、月額料金がサーバ代よりも高かったのです。

 

無料でHTTPS通信を実現できる方法を探したところ、"Let’s Encrypt"に出会いました。

 

今回の記事は、ubuntuにLet’s Encryptの"certbot"をインストールし、無料でHTTPS通信を実現する方法を紹介します。

 

 

Let’s Encryptを使ってみる

■Let’s Encryptとは

saitou-letsencrypt-installアイコン

Let’s Encryptは、無料でSSL/TLS証明書を発行するための認証局(CA)です。このプロジェクトは、Webサイトを安全にするためにHTTPSをより広く普及させる目的で設立されました。Let’s Encryptは、Automated Certificate Management Environment(ACME)というプロトコルを使用して自動化された証明書管理を提供します。

 

以下の特徴は、公式Webサイトから引用しております。

 

【主な特徴】

  • 無料: ドメイン名を持っている人なら誰でも、Let’s Encrypt を利用して費用なしで信頼される証明書を取得することができる。
  • 自動化: ウェブサーバー上で Let’s Encrypt と通信できるソフトウェアを動かすことで、証明書の取得や使用するためのセキュアな設定、更新の作業を簡単に行える。
  • セキュア: Let’s Encrypt は、それ自体が発展的な TLS セキュリティのベスト・プラクティスを実践するプラットフォームとして提供される。これは、CA * サイドとサイトのオペレータがサーバーを適切にセキュアにすることによって成り立つ。
  • 透明性: 発行または無効化されたすべての証明書は、パブリックに記録され、だれでも検証に利用することができる。
  • オープン: 自動的な発行・更新のプロトコルを、オープンスタンダードとして発行し、誰でも採用できるようにする。
  • 協力的: インターネットのプロトコル自体と同じように、Let’s Encrypt はコミュニティに利益を与えるための協力的な努力のもとに成り立っており、いかなる組織のコントロールも受けない。

 

"Let’s Encrypt"の魅力は、利用が無料で、プラグインを利用すれば設定もほぼ自動で行われることです。

 

国内のVPSを提供している会社のSSL化導入料金を調べてみると、

 

会社 料金/年
C社 6,600円/年
S社 990円/年
X社 836円/年 Let’s Encrypt利用無料プランあり
K社 9,350円/年

 

サーバが月額ワンコインで借りられることを考えると、通信の保護にサーバ代金以上のコストがかかる場合もあるみたいです。セキュリティ、運用、コストを考えると、判断が難しいところではありますが、個人ブログサイトや検証にはLet’s Encryptが最適ではないでしょうか。

 

 

■ハンズオン

Let’s Encryptが提供する証明書の発行・取得や使用するためのセキュアな設定、更新の作業は、ソフトウェア"certbot"が実行します。"certbot"のインストールと、簡単な設定をハンズオン形式で紹介いたします。

 

 

●前提条件

今回のハンズオンの前提条件は以下の通りです。

 

  • 環境: AWS
  • 使用AWSリソース: Amazon EC2, Amazon VPC, Amazon Route53
  • セキュリティグループルール(インバウンド): 0.0.0.0/0 port: 80, 443
  • OS: ubuntu22.04
  • 接続: 任意。Session Managerを利用する場合、適切なIAMポリシーを付与してください。
  • ユーザー: ubuntu
  • パブリックv4: あり
  • アプリケーション: nginx

 

今回のハンズオンはAWSで構築しますが、AWSでドメインを管理している場合、無料で証明書を発行できます。AWSを利用している方は、Let’s Encryptを使ってSSL証明書を発行する方法があるんだな、くらいの認識で大丈夫です。

 

 

●はじめるまえに

用意したWebサーバの状況を確認しておきます。
http://<ドメイン名>

 

saitou-letsencrypt-installインストール方法

 

↓https: でアクセスしようとすると、接続できません。

 

saitou-letsencrypt-installインストール方法

 

 

●certbotインストール

Let’s Encryptの証明書を取得するためには、certbotというクライアントソフトウェアが必要です。インストールしていきましょう。

 

↓まずはリポジトリのインデックスを更新します。
sudo apt-get update

 

saitou-letsencrypt-installインストール方法

 

↓ユーティリティを提供するパッケージをインストールします。
sudo apt-get install software-properties-common

 

saitou-letsencrypt-installインストール方法

 

↓universe リポジトリをシステムに追加し、[ENTER]を実行してください。
sudo add-apt-repository universe

 

saitou-letsencrypt-installインストール方法

 

Adding component(s) ‘universe’ to all repositories.
Press [ENTER] to continue or Ctrl-c to cancel.
コンポーネント「universe」をすべてのリポジトリに追加します。
[ENTER] を押して続行するか、Ctrl+C を押してキャンセルします。

 

↓Certbot の最新版をインストールし、[ENTER]を実行してください。
sudo add-apt-repository ppa:certbot/certbot

 

saitou-letsencrypt-installインストール方法

 

↓新しく追加したパッケージ情報を取り込むためにリポジトリのインデックスを更新します。
sudo apt-get update

 

↓Let’s Encryptの証明書を取得・更新するためのツール"certbot"と、NginxでCertbotを使うためのプラグイン"python3-certbot-nginx"をインストールします。
sudo apt-get install certbot python3-certbot-nginx

 

saitou-letsencrypt-installインストール方法

 

↓Certbotを実行して、Nginxの設定を自動で行います。このコマンドが成功すると、Let’s Encryptの証明書が取得され、Nginxの設定が自動で更新されます。
sudo certbot --nginx

 

saitou-letsencrypt-installインストール方法

 

ubuntu@ip-10-0-1-101:~$ sudo certbot –nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter ‘c’ to cancel): <メールアドレス>
デバッグ ログを /var/log/letsencrypt/letsencrypt.log に保存する
メールアドレスを入力してください(緊急の更新やセキュリティに関する通知に使用されます)

 

 

saitou-letsencrypt-installインストール方法

 

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
(Y)es/(N)o: Y
次のサイトで利用規約をお読みください。
https://letsencrypt.org/documents/LE-SA-v1.3– September-21-2022.pdf。絶対です
ACME サーバーに登録するために同意します。同意しますか?

 

 

saitou-letsencrypt-installインストール方法

 

Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let’s Encrypt project and the non-profit organization that
develops Certbot? We’d like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
最初の証明書が正常に発行されたら、次のことをしていただけますか?
電子フロンティア財団と電子メール アドレスを共有する
Let’s Encrypt プロジェクトのパートナーであり、
Certbotを開発していますか? Web の暗号化に関する当社の取り組みについて電子メールをお送りしたいと考えています。
EFF のニュース、キャンペーン、デジタルの自由をサポートする方法。

 

↓ドメイン名を入力しまし、[Enter]を押しましょう。

 

saitou-letsencrypt-installインストール方法

 

Account registered.
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter ‘c’ to cancel):
アカウントが登録されました。
証明書に記載するドメイン名を入力してください (カンマまたは/または)
スペースで区切ります) (キャンセルするには「c」を入力します):

 

↓設定変更に成功すると、以下のメッセージが出てきます。

 

saitou-letsencrypt-installインストール方法

 

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/saito-test.test.cloud5.jp/fullchain.pem
Key is saved at: /etc/letsencrypt/live/saito-test.test.cloud5.jp/privkey.pem
This certificate expires on 2023-12-15.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for saito-test.test.cloud5.jp to /etc/nginx/sites-enabled/default
Congratulations! You have successfully enabled HTTPS on https://saito-test.test.cloud5.jp
We were unable to subscribe you the EFF mailing list because your e-mail address appears to be invalid. You can try again later by visiting https://act.eff.org.
証明書を正常に受け取りました。
証明書は/etc/letsencrypt/live/saito-test.test.cloud5.jp/fullchain.pemに保存されます。
キーは/etc/letsencrypt/live/saito-test.test.cloud5.jp/privkey.pemに保存されます。
この証明書の有効期限は 2023 年 12 月 15 日です。
これらのファイルは、証明書が更新されるときに更新されます。
Certbot は、この証明書をバックグラウンドで自動的に更新するスケジュールされたタスクを設定しました。
証明書の展開
saito-test.test.cloud5.jp の証明書が /etc/nginx/sites-enabled/default に正常にデプロイされました
おめでとう! https://saito-test.test.cloud5.jp で HTTPS が有効になりました。
あなたの電子メール アドレスが無効であるため、EFF メーリング リストに登録できませんでした。 https://act.eff.org にアクセスして、後でもう一度試すことができます。

 

メールアドレスとドメイン名を入力するだけでインストール作業は終了です。

 

 

●動作確認

httpsでの通信が可能になったか、動作確認をしてみます。
https://<ドメイン名>

 

saitou-letsencrypt-installインストール方法

saitou-letsencrypt-installインストール方法

saitou-letsencrypt-installインストール方法

 

問題なくhttpsでアクセスできますね。ためしにhttpでアクセスしても、httpsでリダイレクトされます。

 

 

certbotを実行した際に、nginxのconfファイルが編集されていました。デフォルトと比較してみると、以下の記述が追加されていますね。※ドメイン名など一部ぼかしています。

 

server {

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
    server_name saito-test.<ドメイン>.jp; # managed by Certbot

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/saito-test.<ドメイン>.jp/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/saito-test.<ドメイン>.jp/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = saito-test.<ドメイン>.jp) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

        listen 80 ;
        listen [::]:80 ;
    server_name saito-test.<ドメイン>.jp;
    return 404; # managed by Certbot

}

 

 

今回は以上です。

 

 

まとめ:Let’s Encryptを使って無料でHTTPS通信を実現しよう

格安VPSを利用すると、当然ですが、自分でほとんどすべての設定を行わなければいけません。通信のSSL化もそのうちの一つですよね。

 

"Let’s Encrypt"は無料で利用できて、プラグインのおかげで設定自体も簡単です。コストを抑えたい方や検証で利用したい場合にぜひ使ってみてください。

 

 

参考リンク:Let’s Encrypt

 

↓ほかの協栄情報メンバーもSSLに関する記事を公開しています。ぜひ参考にしてみてください。

 

■AWS DMSエンドポイント(Oracle)の SSL 暗号化を設定してみました。(小林 剛)
https://cloud5.jp/configuring-ssl-encryption-on-oracle-endpoints/

 

■WordPressプラグインの”Really Simple SSL”有効化エラーの対処法(齊藤弘樹)
https://cloud5.jp/saitou-really-simple-ssl-error/

 

 

Last modified: 2023-09-17

Author