Time4VPSにて無料でSSL証明(https)する方法

2020年2月14日

以前までは個人でのウェブサイト運営はHTTP通信(http://)でまったく問題なかったのですが、2015年からGoogleの方針もあってウェブサイトの常時SSL化(https://)が標準になってきました。

レンタルサーバーであればその会社が用意したものを利用すれば簡単・無料で常時SSL化ができるのですが、VPSなどでは自前でSSL証明を通す必要があります。

ここではTime4VPSで借りたVPSに無料でSSL証明を通す方法を説明します(なお、Time4VPSじゃなくてもどこの会社のVPSでもOKです)。

無料で常時SSL化する方法

Time4VPSでは、管理画面の左にある「New Order」から次のようにすればSSL証明の購入ができます。

金額を見てみると割と安いのですが(2年間で2500円くらい)、できれば無料でやりたいのが庶民の願いだと思います。

「Let’s Encrypt」を導入

SSL証明書「Let’s Encrypt」を導入すれば無料でウェブサイト(ドメイン、サブドメインOK!)を常時SSL化できます。

しかし次のようなデメリットがあります。

  1. 3か月毎に更新が必要
  2. IPアドレスURL(http://***.***.***.***)には証明書が発行されない(「http://ysklog.net」のようなドメイン形式でなければならない)

なお①のデメリットである「3か月毎の証明書更新」ですが、これはcronで自動更新設定をすれば手間なく永続的に更新可能です(この設定も説明します)。

導入手順

それでは早速、VPSに「Let’s Encrypt」を導入しましょう。

なお、私の環境を明示しておきます。

  • CentOS Linux 7.7.1908
  • Linux 2.6.32-042stab141.3 on x86_64
  • Intel(R) Xeon(R) CPU E5-2630L v4 @ 1.80GHz, 1 cores

※「Apache(一般的なhttpサーバー)」インストール済み

1.「mod_ssl」モジュールのインストール

yum install mod_ssl -y

途中「yes」か「no」かみたいなことを聞かれるので「y」を入力してください(「Complete!」と出れば完了)。

なお既にmod_sslモジュールがインストールされている場合は次のように文が出力されます。

Package 1:mod_ssl-2.4.6-90.el7.centos.x86_64 already installed and latest version
Nothing to do

設定の変更を有効化させるためにhttpdを再起動します。

systemctl restart httpd

2.「Let’s Encrypt」のインストール

まずは「epelリポジトリ」を導入する。

yum -y install epel-release

そして、

yum install certbot python2-certbot-apache -y

これも途中「yes」か「no」かみたいなことを聞かれるので「y」を入力してください(「Complete!」と出れば完了)。

既にインストールが完了している場合は次のように出力されます。

Package certbot-0.39.0-1.el7.noarch already installed and latest version
Package python2-certbot-apache-0.39.0-1.el7.noarch already installed and latest version
Nothing to do

次に証明書をインストールします。下の「ysklog.net」はご自分のドメインのものにしてください。

certbot –apache -d ysklog.net

次にあなたのメールアドレスを聞かれるのでメールアドレスを入力してください。

Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
cancel): ここにあなたのメールアドレス

※ここで入力したメールアドレスには、Let’s Encryptからのお知らせが来ます。

次に、規約への同意を聞かれるので「A」を入力してください。

(A)gree/(C)ancel: A

そして、先ほど入力したメールアドレスをLet’s Encryptパートナーに公開するか聞かれるのでお好みのものを選んでください。

(Y)es/(N)o: N

※これはイエスでもノーでも大丈夫です。私はノーにしました。

次にこのような質問をされます。

Please choose whether HTTPS access is required or optional.
——————————————————————————-
1: Easy – Allow both HTTP and HTTPS access to these sites
2: Secure – Make all requests redirect to secure HTTPS access
——————————————————————————-
Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel): 2

これは

  1. HTTPアクセスとHTTPSアクセスどちらもOKにする
  2. すべてのアクセスをHTTPSにする(いダイレクトする)

と聞かれているので、特に理由がなければ「2」にしましょう(常時SSL化するのであれば「http://」のアクセスを許可する必要がない)。

設定の変更を有効化させるためにhttpdを再起動します。

systemctl restart httpd

以上でSSL証明書の発行は完了です。

実際にウェブサイトにアクセスしてみると、ちゃんとURLが「https://」となっていることがわかると思います。

「Let’s Encrypt」の更新設定

冒頭でも述べたように、「Let’s Encrypt」の証明書は3か月毎に更新しなければなりません。

有効期限が切れる前に下のコマンドで更新する必要があります。

certbot renew

なお、これは証明書の期限が30日以上ある場合は意味ないので(30日未満のときにしなければならない)、強制的に更新させる場合は次のようにします。

certbot renew –force-renew

しかし、実際問題3か月毎に手動で更新するのは現実的ではないのでcronを使って更新作業を自動化しましょう。

cronでの自動更新

cronについては【CentOS7】cronの設定方法を参照してください。

次のコマンドでcronを起動させます。

systemctl start crond.service

そして、サーバーの起動時にcronも自動起動するように設定します。

systemctl enable crond.service

次に、rootユーザーでcronを設定します( 「Let’s Encrypt」の証明書更新はrootユーザーじゃないとダメ )。

crontab -u root -e

そして、次の設定内容を入力してください。

00 03 01 * * certbot renew –force-renew && systemctl restart httpd

これは、

  1. 毎月1日3時に
  2. 「Let’s Encrypt」の証明書を更新して
  3. その後httpdの再起動を行う

というものです。

※「Let’s Encrypt」の証明書更新の後はhttpdの再起動が必要らしい

残りの期限を確認

「Let’s Encrypt」証明書の有効期間を調べる場合は次のコマンドを打ちます。

certbot renew

すると次のようなテキストが出力されるので赤文字部分で有効期限が把握できます。

The following certs are not due for renewal yet:
/etc/letsencrypt/live/ysklog.net/fullchain.pem expires on 2020-03-23 (skipped)
No renewals were attempted.

なお、念のためcronでの自動更新がうまくいっているかの確認をするようにしてください。