目次

Nginx+ Certbot(新規・自動更新)

本マニュアルは、サーバ証明書の設定手順をご案内するものです。
Nginxのインストールや、コマンドの意味等はご案内しておりませんので、各情報サイトや参考書籍等でご確認ください。
本手順では以下の環境を使用し、動作を確認しております。

使用した環境

OS:RHEL9
ウェブサーバアプリケーション:nginx/1.20.1
Acmeクライアント:Certbot2.6.0 Atlasのアカウント及び、API Key、MAC Key

※弊社では以下の手順にて動作検証をおこなった際の一例をご紹介しており、動作を保証するものではございません。本手順について内容の変更等や誤りがあった場合、弊社では一切の責任を負いかねることを予めご了承ください。詳細は各アプリケーションのドキュメント等をご参照ください。
※Nginxはオープンソースのアプリケーションです。脆弱性などの問題がないか、随時情報を確認いただき、万一問題が発見された場合は、該当サービスの停止や、対応パッチがリリースされている場合は速やかに適用するなど、運用には十分ご注意ください。
※本手順で実行するコマンドはLinux環境、Ubuntu環境で共通のものになります。

1.事前準備

  1. ご利用のLinux環境にて下記コマンドを順に実行しcertbotをインストールします。

    sudo yum install -y certbot python-certbot-nginx

    ※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

  2. 証明書を設定するウェブサイトへアクセス(名前解決)ができるよう事前にご設定ください。

  3. certbotの事前設定
    AtlasポータルからKey ID:<API-KEY>、ACME MAC:<ACME-MAC>を取得してください。
    Atlasポータルからそれぞれの情報の取得方法については、下記ページをご確認ください。
    API Credentialsの取得方法について ACME MACの取得方法について

  4. 下記コマンドを実施いただき、アカウントの紐づけを行います。

    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」キーを押下ください。



    別の認証局や異なるAtlasアカウントの情報をすでに設定済みの場合、対象のディレクトリを削除することで再登録可能となります。

    /etc/letsencrypt/accounts/FQDN/

    ※"FQDN"の部分は紐づけ時に利用したURLのFQDN部分を指定してください。

2.証明書発行と自動更新設定

  1. 証明書の発行とバインドのため、以下のコマンドを実施ください。

    certbot run --nginx -d www.example.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がデフォルト設定で生成するディレクトリです。
  2. ご利用のブラウザから設定されたFQDNにアクセスし、証明書が設定されているかご確認ください。

  3. crontabコマンドを使用し、サーバ証明書の更新自動化のため下記コマンドを実施しcronの設定画面を開きます。

    crontab -e
  4. 下記の内容を記述します。

    * */30 * * 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プラグインのインストール
【インストールコマンド】

dnf install python3-certbot-dns-cloudflare

※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"
 \--eab-kid <EAB_KID> --eab-hmac-key <EAB_HMAC_KEY>
\--dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini
\-m ssl@example.com
\-d "*.sample.com" --agree-tos --key-type rsa

 

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以降、指定しない場合申請エラーになります。