サイトアイコン 協栄情報ブログ

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

saitou-letsencrypt-installアイキャッチ


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

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

 

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

 

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

 

 

Let’s Encryptを使ってみる

■Let’s Encryptとは

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

 

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

 

【主な特徴】

 

"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でドメインを管理している場合、無料で証明書を発行できます。AWSを利用している方は、Let’s Encryptを使ってSSL証明書を発行する方法があるんだな、くらいの認識で大丈夫です。

 

 

●はじめるまえに

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

 

 

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

 

 

 

●certbotインストール

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

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

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

 

 

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

 

 

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 に保存する
メールアドレスを入力してください(緊急の更新やセキュリティに関する通知に使用されます)

 

 

 

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 サーバーに登録するために同意します。同意しますか?

 

 

 

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]を押しましょう。

 

 

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

 

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

 

 

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://<ドメイン名>

 

 

問題なく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/

 

 

モバイルバージョンを終了