Let’s Encryptを使ってSSL化してみた(OCIのVMインスタンス)

Oracle Cloud Infrastructure

こんにちは、以前Oracle Cloudで作ったVMインスタンスにウェブサーバーを立てましたが、今回はそのサイトのSSL化を行いたいと思います。今回使うLet’s Encryptは無料で利用できるので、費用はかかっていません。

使用しているOSはOracle Linux7.7ですが、ベースはRed Hat Enterprise Linuxの7系だと思います。

SSL化を行う前に、ドメインを取得しDNSサービスを使って名前解決を行なっています。その際の記事はこちら

Certbotのインストール

Let’s Encryptが推奨している通り、証明書発行とインストールの自動化を行うためにCertbotを利用します。私はApacheを利用しているのでApacheに対応するためのCertbotも入れておきます。

EPELを利用してインストールを行うので、まずEPELを入れておきます。*私の場合すでに入れてありました

sudo yum install epel-release

sudo yum install certbot python2-certbot-apache

と、ここで早速エラーが登場(以下)。

sudo yum install certbot python2-certbot-apache

Error: Package: 1:python-zope-component-4.1.0-5.el7.noarch (epel)
           Requires: python-zope-interface
Error: Package: python2-certbot-1.3.0-1.el7.noarch (epel)
           Requires: python-zope-interface
 You could try using --skip-broken to work around the problem

依存関係にあるパッケージがインストールされておらずエラーとなってしまいました。python-zope-interfaceをとってきましょう。

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-zope-interface-4.0.5-4.el7.x86_64.rpm

sudo yum install python-zope-interface-4.0.5-4.el7.x86_64.rpm

これで無事python-zope-interfaceがインストールされました。改めてCertbotをインストールします。

sudo yum install certbot python2-certbot-apache

インストールが通りました!

証明書の発行

インストールが完了したので、証明書を発行します。Certbotコマンドを使ってウェブルート、そしてドメインを指定します。*ここではmiyacle.mlというドメインを使います。

sudo certbot certonly --webroot -w /var/www/html -d miyacle.ml

lsコマンドで確認すると/etc/letsencrypt/live/miyacle.mlに証明書が発行されたことがわかります。次に証明書や鍵の場所をssl.confに記述します。

sudo emacs /etc/httpd/conf.d/ssl.conf

SSLCertificateFile /etc/letsencrypt/live/miyacle.ml/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/miyacle.ml/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/miyacle.ml/chain.pem

今回はemacsをエディタとして使っています。余談ですが個人的にはvimよりemacsが好きです、理由は、はじめに使ったのがemacsでより慣れているからです笑

ポートの追加

最後にApacheを再起動し、https通信用のポートを開けてあげます、直接443番を指定することも可能です。ちなみに過去記事の際に既にポートは開けてありました。

sudo systemctl start httpd

sudo firewall-cmd --add-service=https --zone=public --permanent
sudo firewall-cmd --reload

Oracle Cloud Infrastructureで作成したインスタンスの場合はOCI側からのイングレス設定が必要です。*OCIコンソール画面からインスタンス画面へ行き、パブリックサブネットのセキュリティリストにイングレスルールを追加します(以下画像)。

OCIコンソールからイングレスルールの追加

これでSSL化が完了しました!実際にアクセスして確認してみましょう。

SSL化されたmiyacle.ml

大丈夫そうですね。しかし、今回作成した証明書は期限が3ヶ月で切れてしまうため、定期的に更新するように設定しておきます。crontabに一文追加するだけで自動で更新してくれます。以下のように設定しました。

sudo crontab -u root -e
00 00 01 * * certbot renew && systemctl restart httpd

毎月1日の0時に証明書を更新し、Apacheも再起動してくれる….はずです。

おわりに

今日はOracle Cloud Infrastructureで作成したVMインスタンスに立てたウェブサーバー上のサイトをSSLしてみました。結構CentOSでの設定方法がネットにあるのですが、RHELだとやり方が少し変わるので気をつけてください。(変わるというかすんなりインストールが通らない場合があります…)

Certbotのサイトを見てcertbot-autoを使えばもっと簡単にできたのか…な?と終わってから気付きましたが、まぁいいでしょう。それでも思ったより簡単に無料でSSL化できてしまいました!

今日も最後までご覧いただきありがとうございました。

コメント

タイトルとURLをコピーしました