こんにちは、以前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コンソール画面からインスタンス画面へ行き、パブリックサブネットのセキュリティリストにイングレスルールを追加します(以下画像)。
これでSSL化が完了しました!実際にアクセスして確認してみましょう。
大丈夫そうですね。しかし、今回作成した証明書は期限が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化できてしまいました!
今日も最後までご覧いただきありがとうございました。
コメント