Apache 2.x + Certbot(新規、自動更新)
本マニュアルは、サーバ証明書の設定手順をご案内するものです。
apacheのインストールや、コマンドの意味等はご案内しておりませんので、各情報サイトや参考書籍等でご確認ください。
本手順では以下の環境を使用し、動作を確認しております。
こちらのデモ動画からも手順をご確認いただけます。
使用した環境
OS:RHEL9
ウェブサーバアプリケーション:Apache2.4.53
Acmeクライアント:Certbot2.6.0
Atlasのアカウント及び、API Key、MAC Key
※弊社では以下の手順にて動作検証をおこなった際の一例をご紹介しており、動作を保証するものではございません。本手順について内容の変更等や誤りがあった場合、弊社では一切の責任を負いかねることを予めご了承ください。詳細は各アプリケーションのドキュメント等をご参照ください。
※Apacheはオープンソースのアプリケーションです。脆弱性などの問題がないか、随時情報を確認いただき、万一問題が発見された場合は、該当サービスの停止や、対応パッチがリリースされている場合は速やかに適用するなど、運用には十分ご注意ください。
※本手順で実行するコマンドはLinux環境、Ubuntu環境で共通のものになります。
1.事前準備
-
ご利用のLinux環境にて下記コマンドを順に実行しcertbotをインストールします。
dnf -y install certbot
dnf -y install python3-certbot-apache ※後程実施いただく"certbot run"コマンドを実行する場合に必要となります。
※certbotインストールのために【EPEL release】という追加パッケージセットが必要なため、インストールされているかどうか不明な場合は下記コマンドを実行してください。
dnf install epel-release 上記の実行後応答がない場合には、下記コマンドにてインストールしてください。※インストール後は、再度"dnf install epel-release"コマンドを実施ください。
dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -
証明書を設定するウェブサイトへアクセス(名前解決)ができるよう事前にご設定ください。
-
VirtualHostの設定
conf.dディレクトリ内に下記コマンドにてconfファイルを新規作成し下記内容を追加してください。
vi /etc/httpd/conf.d/vhost-ssl.conf
<VirtualHost *:80>
DocumentRoot "/var/www/html/"
ServerName www.exmple.com
</VirtualHost>
※"ServerName"で指定する値はアクセス時に利用するFQDNをご指定ください。

※バーチャルホストを指定されていない場合、certbotの発行コマンド実行後、下記エラーが発生します。
「Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.」 -
証明書を設定するウェブサイトへアクセス(名前解決)ができるよう事前にご設定ください。
-
certbotの事前設定
AtlasポータルからKey ID:<API-KEY>、ACME MAC:<ACME-MAC>を取得してください。
Atlasポータルからそれぞれの情報の取得方法については、下記ページをご確認ください。
API Credentialsの取得方法について ACME MACの取得方法について -
下記コマンドを実施いただき、アカウントの紐づけを行います。
certbot register -m 'mail@example.jp' --agree-tos --eab-kid 'KeyID' --eab-hmac-key 'MACkey' --server 'https://emea.acme.atlas.globalsign.com/directory'
※太字表記の部分は記載例ですので、お客様の環境によって読み替えてください。
入力後、(Y)es/(N)o: の確認が行われるため、「Y(y)」を入力後、「Enter」キーを押下ください。

2.証明書発行と自動更新設定
-
証明書の発行とバインドのため、以下のコマンドを実施ください。
certbot run --apache -d www.exmple.com --key-type rsa --server 'https://emea.acme.atlas.globalsign.com/directory'
※"www.example.com"は適用する証明書のコモンネームをご指定ください。
※複数のFQDNを指定する場合、「example.jp,www.example.jp」のように「,」(カンマ)で区切って指定します。
成功時のレスポンス(一例)
複数のFQDNを指定することで、それらのFQDNがSAN(そのサーバー証明書を設定・使用するドメイン名)に記載された、1枚の証明書が発行されます。

発行された証明書は通常、以下のディレクトリで確認できます。
証明書 : /etc/letsencrypt/live/${FQDN}/fullchain.pem
秘密鍵 : /etc/letsencrypt/live/${FQDN}/privkey.pem
※ ${FQDN} は、証明書を設定したWebサーバーのFQDNを示します。
※ /etc/letsencrypt は、Certbotがデフォルト設定で生成するディレクトリです。
証明書発行とバインドのコマンド実施後、【vhost-ssl-le-ssl.conf】ファイルにて設定された証明書を確認することができます。
vi /etc/httpd/conf.d/vhost-ssl-le-ssl.conf
-
ご利用のブラウザから設定されたFQDNにアクセスし、証明書が設定されているかご確認ください。
-
下記コマンドを実施し証明書の自動更新の設定を行います。
systemctl enable --now certbot-renew.timer
設定後は下記コマンドを実行することでスケジュールの確認が可能です。
systemctl list-timers

-
証明書の自動更新後はApacheの再起動を行うことで適用されます。下記手順にて証明書の更新後、再起動も自動化することが可能です。
下記コマンドを実行し、設定ファイルを開きます。
vi /etc/sysconfig/certbot
下記の箇所部分を確認。
# An example to restart httpd would be:
# POST_HOOK="--post-hook 'systemctl restart httpd'"
POST_HOOK="";以下の内容に書き換えます。
# An example to restart httpd would be:
# POST_HOOK="--post-hook 'systemctl restart httpd'"
POST_HOOK="--post-hook 'systemctl restart httpd'"
補足①cronによる更新の自動化
certbotのバージョンによっては自動化のコマンドに対応していない可能性があります。
その場合はcrontabコマンドを使用します。
サーバ証明書の更新自動化のため下記コマンドを実施しcronの設定画面を開きます。
crontab -e
下記の内容を記述します。
※日時は一例(10日ごとに更新)です。任意の値をご設定ください。
* * */10 * * sudo certbot renew
※証明書は有効期限の30日前から更新可能です。
※更新可能期間外でも指定日時で更新申請が実施されますが、証明書は発行されません。

「*」に指定する値は実施する日時を指定します。詳細は下記をご参考ください。
| *の位置(左から) | 頻度 | 指定可能な値 |
|---|---|---|
| 1 | 分 | 0~59 |
| 2 | 時 | 0~23 |
| 3 | 日 | 1~31 |
| 4 | 月 | 1~12 |
| 5 | 曜日 | 0~6(0日曜、以降順に続く) |
例1:30日ごとに実行する場合
* * */30 * * sudo certbot renew
例2:3月、6月、9月、12月の15日、07時10分に実行する場合
10 7 15 3,6,9,12 * sudo certbot renew
下記コマンドにて証明書の有効期間が30日以上残っている場合でも、強制的に更新が可能です。
certbot renew --force-renewal
緊急で証明書の入れ替えが必要になった場合等に、本オプションを指定してください。
※大量の証明書発行が継続して行われた場合、サーバー側で申請を制限する場合があります。
補足②ワイルドカード証明書を取得する方法
Cerbotでワイルドカード証明書を取得する方法は、以下の2パターンから可能です。
パターン①Atlasポータル登録済みのドメインを用いた手法
■条件
・Atlasポータルに親ドメインをDNS認証もしくはメール認証で登録済みであること
Atlasポータルドメイン管理 :: GlobalSign Atlas Documentation
・親ドメインを登録済みのプロファイルからAPIkeyとAcmeMACを作成し、それをリクエストに用いること
※証明書発行のコマンドは本ページ[2]のものを流用してください。
パターン②CloudflareのDNSを利用した手法
■条件
・DNSプラグインのインストール
【インストールコマンド】
|
dns_cloudflare_api_token = [CloudflareのAPI Tokenの値] |
※Certbotは利用可能なDNSサービスごとにプラグインが用意されているが別パッケージになるので、Cloudflare用プラグインをインストールする。
・Cloudflareのアカウント作成(無料)
・対象ドメインのDNSネームサーバをCloudflareに変更すること
・CloudflareのAPI Tokenの取得と保存
・リクエスト時にCloudflareのAPI Tokenが記述されたファイルが必要となる為、専用のファイルをサーバ側に作成。
【例:[/etc/letsencrypt/cloudflare.ini ]に以下の様に記述】
|
dns_cloudflare_api_token = [CloudflareのAPI Tokenの値] |
・証明書の発行コマンドを実行する
注:ワイルドカード証明書の発行を希望の場合はホスト名を*.としてください。
|
certbot certonly \--server "https://emea.acme.atlas.globalsign.com/directory" |
ACMEアカウントに関連する Certbotのサブコマンド・オプション(一部)
| コマンド |
説明 |
|---|---|
| register |
・ACMEアカウントを作成します。 |
| -m ’MAIL’ | ・ACMEアカウントに設定するメールアドレスを指定します。 (コマンドラインでのオプション指定は任意ですが、指定しない場合にはインタラクティブに入力を求められます) |
| --agree-tos | ・Globalsignの利用規約に同意します。 (コマンドラインでのオプション指定は任意ですが、指定しない場合にはインタラクティブに入力を求められます) |
| --eab-kid ’KID’ | ・ACMEアカウントの認証情報を指定します。(Key ID) ※Atlasポータルから取得 |
| --eab-hmac-key ’HMAC-KEY’ |
・ACMEアカウントの認証情報を指定します。(ACME MAC) ※Atlasポータルから取得 |
| --server ’SERVER’ | ・申請先のサーバホストを指定します。 以下のような固定値を入力してください。 サンプル:'https://acme.globalsign.com/directory' |
証明書発行に関連する Certbotのサブコマンド・オプション(一部)
| コマンド |
説明 |
|---|---|
| -d |
・証明書を発行するFQDNを指定します。カンマで区切ることで複数指定が可能です。 |
| --apache |
・apacheプラグインを利用して、証明書の発行とインストールを自動化します。利用する認証方法はファイル認証となります。 |
| --key-type | ・rsaを指定します。 ※Certbot 2.0.0以降、指定しない場合申請エラーになります。 |