Webは用いる人のリテラシーで決まる 文学部卒で30代で突然エンジニアに転向した私が切り抜けてきたこと
Twitter Facebook
TOP > BLOG > IT記事

Let’s encryptをサーバーにインストールしてcronで自動更新すればSSLはずっと無料エンジニア向け

SSL

SSL証明書をウェブサーバーにインストールし、常時SSLをすることがウェブ業界ではすっかり標準になりました。さくらインターネットなど提供するレンタルサーバーなら無料でSSLを設定できますが、これはサービス事業者がLet’s encryptを、利用者がGUIで使えるよう開発しただけです。

自社でウェブサーバーを管理しているとか、自前サーバーで運用しているブロガーなどは証明書のインストールをする場合は自分でしないといけません。有償の証明書を使う場合は年間5万円の高い証明書もあれば、一方で980円の証明書もあり、そういった選択肢から選ぶ必要があります。これらの証明書なら、必ずしもというわけではないですが品質としては一定の信頼ができます。

無償の証明書を使う場合はLet’s encryptを使うというのが現実的な選択肢となるでしょう。もしAWSを使っているならamazonの証明書が無料で使えますが、この記事ではLet’s encryptをインストールしてCronで自動更新する流れを整理して紹介します。

Let’s encryptをインストールする前提条件

Let’s encryptの利用には重要な前提条件があります。

  • Let’s encryptを実行するサーバーに、DNSがすでに向けられていること
  • ポート443をあけておくこと

Let’s encryptをインストールする大まかな流れ

  • Epelをインストールする
  • Certbotをダウンロードする
  • ChmodでCertbotに実行権限を付与する
  • Certbotを実行する
  • cronで自動更新の設定をする

だいたいこんな感じの流れです。もちろんどんなサーバーを使っているかによって必要な手順は異なります。大手事業者のVPSなどを使っている人は、Epelやpythonなど特定のソフトやミドルウェアがが事前にインストールされていることがよくあるので、場合によっては不要な手続きもあるでしょう。

Epelをインストール

#yum install epel-release

以下のようなメッセージが出る場合はEpelはインストール済みです。

Package epel-release-6-8.noarch already installed and latest version Nothing to do
epel

Certbotをダウンロードする

# wget https://dl.eff.org/certbot-auto でダウンロード

#ls をするとちゃんとダウンロードされていますね。

wget

ChmodでCertbotに実行権限を付与する

ダウンロードしたてのcertbotには実行権限がありません。

[admin@ik1-317-18962 work]$ ls -al
total 88
drwxr-xr-x 2 root root 4096 Jul 15 13:40 .
drwxr-xr-x. 22 root root 4096 Jul 15 13:29 ..
-rw-r–r– 1 root root 79656 Jul 15 04:19 certbot-auto

ということで、以下のように実行権限を付与しましょう。

#chmod a+x certbot-auto

そうすると、以下のように権限が付与されます。

[admin@ik1-317-18962 work]$ sudo chmod a+x certbot-auto
[admin@ik1-317-18962 work]$ ls -al
total 88
drwxr-xr-x 2 root root 4096 Jul 15 13:40 .
drwxr-xr-x. 22 root root 4096 Jul 15 13:29 ..
-rwxr-xr-x 1 root root 79656 Jul 15 04:19 certbot-auto

certbot-autoを実行する

ではいよいよcertbot-autoを実行しましょう。これによって証明書が発行されます。

# ./certbot-autoを実行する

途中で何回かy or nをきかれるが内容を見てyを選択しましょう。
また以下のようにウェブサーバーを質問されます。Apacheなのかnginxなのかを選択しましょう。まさかLet’s encryptで常時SSL化しようという人で、自分の使っているウェブサーバーが分からないという人はいないと思いますが。。

1: Apache Web Server plugin (apache)
2: Nginx Web Server plugin (nginx)
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel):

他にもemailを聞かれるので適当に入れる、domainを入れるなど順次必要な項目を入力しましょう。最後に以下のようにリダイレクトの設定が出てきます。これもご自身の使っているサーバーの状況に応じて選択しましょう。

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
1: No redirect – Make no further changes to the webserver configuration.
2: Redirect – Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you’re confident your site works on HTTPS. You can undo this
change by editing your web server’s configuration.

以上で設定は完了で、以下のような表示が出れば設定は成功です。

Congratulations! You have successfully enabled https://hogehoge.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=hogehoge.com
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/hogehoge.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/hogehoge.com/privkey.pem
Your cert will expire on 2019-12-10. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again with the “certonly” option. To non-interactively renew *all*
of your certificates, run “certbot-auto renew”
– Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
– If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

ポート443をあける

443ポートが開いていない場合は当然設定しましょう。

鍵の場所

certbotの設定した秘密鍵や証明書は以下の場所にあります。

/etc/letsencrypt/live/hogehoge.com/fullchain.pem → 証明書
/etc/letsencrypt/live/hogehoge.com/privkey.pem → 秘密鍵

更新の仕組み

# certbot-auto renew

このコマンドを実行することで証明書が更新されます。証明書の期限は3ヶ月なので、3ヶ月ごとにこれを実行する必要があります。手動で実行するのが面倒なのでCronを使いましょう。当然サーバーの時計は合っていることが前提です。

cronで自動更新の設定をする

cronとはサーバーにおいて定期的に自動実行したいプログラムを動かすに使う仕組みです。タイマーみたいなもんですね。/var/spool/cron/配下に設定ファイルを置くと、それが自動実行されます。cronを使ったことのない人は詳しくはこういう解説記事を読んでください。

/var/spool/cron/配下にhogehogeのようなディレクトリを作成して以下のように記述するか、または#cron -eでもcronの編集モードに入るか、どちらでもOKです。ネットで検索して出てくる記事によっては安全なのは#cron -eのようですが、私の感覚ではたいした違いはありません。

certbotに関する注意点としては、自動実行を5回実行してNGの場合は使用制限がかかるらしいのでcronの設定は月1回にしておきましょう。3ヶ月に1回の更新だから月1回の設定でも、エラーが5回に達することはありません。3回NGがおきても無害なので無視です。

ファイルには当然パスを通します。これはサーバーによるのでお使いのサーバーやアプリに応じて設定してください。
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/admin/bin
GEM_PATH=””

分 時 日 月 曜日 コマンド
26 14 5 * * /var/work/certbot/certbot-auto renew

この場合は毎月5日の14時26分に/var/work/certbot/配下で#certbot-auto renewを実行するという意味です。実行されたかどうかは/var/log/cronで実行されたか確認できます。できていない場合はpathが通っていないとか、実行権限がおかしいとか、その辺りを見直すといいでしょう。

このブログを書いてる人
早川 朋孝

業界15年のウェブエンジニアです。文学部卒で20代はSEO、アクセス解析などフロントの運用を中心に経験しましたが、30代のある時、ひょんなことから一人情シスのような状況を経験することになり、流れでそのままエンジニアに転向しました。プログラムやサーバー管理、数学の勉強などをしなおして、いまではWebのことはフロントからバックエンドまでなんでもできます。

本が好きで月140時間は読書します。このブログではWeb業界で経験してきた業界の裏側、読書で学んだこと、技術ノートなどを書きます。ネコ好きなタバコ嫌いで、明治学院フランス文学科卒。

facebookへ
PAGE TOP