サーバ証明書の最終版
これまでサーバ証明書については、2回報告してきましたが、今回が最終版(第三回目)です。
○第一回目:サーバ証明書(1)、自己証明書
○第ニ回目:サーバ証明書(2)、格安証明書(FUJI SSL社)
○第三回目:サーバ証明書(3)、無料証明書(LetsEncript社)
今回は、無料でしかもサーバ証明書が自動更新できる優れものです。
無料証明書(LetsEncript社)
参考URL:https://letsencrypt.org/ja/about/
参考URL:https://ja.wikipedia.org/wiki/Let%27s_Encrypt
○Let’s Encryptについて
Let’s Encrypt は、公共の利益のために運営されている、フリーで自動化されたオープンな認証局 (certificate authority; CA) です。
インターネット・セキュリティ・研究グループ (Internet Security Research Group; ISRG) がサービスを提供しています。
主要なスポンサーは電子フロンティア財団(EFF)、Mozilla Foundation、アカマイ・テクノロジーズ、OVH、シスコシステムズ、Facebook、Google Chrome、Internet Societyです。
その他の関係団体としては認証局のIdenTrust(英語版)、ミシガン大学、スタンフォード・ロー・スクール、Linux Foundation[21]などがあり、レイセオン/BBNテクノロジーズのStephen Kent(英語版)、CoreOSのAlex Polvなどが関わっています[9]。
私たちは人々のために、ウェブサイトで HTTPS (SSL/TLS) を有効にするために必要なデジタル証明書を、無料で、私たちにできる最もユーザーフレンドリーな方法で発行しています。
私たちがこのようなことをする理由は、よりセキュアでプライバシーを尊重するウェブを作りたいと願っているからです。
Let’s Encrypt の背景にあるキーとなる原則は次のとおりです。
・無料: ドメイン名を持っている人なら誰でも、Let’s Encrypt を利用して費用なしで信頼される証明書を取得することができます。
・自動化: ウェブサーバー上で Let’s Encrypt と通信できるソフトウェアを動かすことで、証明書の取得や使用するためのセキュアな設定、更新の作業を簡単に行えます。
・セキュア: Let’s Encrypt は、それ自体が発展的な TLS セキュリティのベスト・プラクティスを実践するプラットフォームとして提供されます。
これは、CA サイドとサイトのオペレータがサーバーを適切にセキュアにすることによって成り立ちます。
・透明性: 発行または無効化されたすべての証明書は、パブリックに記録され、だれでも検証に利用することができます。
・オープン: 自動的な発行・更新のプロトコルを、今後オープンスタンダードとして発行し、誰でも採用できるようにします。
・協力的: インターネットのプロトコル自体と同じように、Let’s Encrypt はコミュニティに利益を与えるための協力的な努力のもとに成り立っており、いかなる組織のコントロールも受けません。
○ACME クライアント実装
Let’s Encrypt は、与えられたドメインを制御する権限があなたにあることを検証し、証明書を発行するために、ACME プロトコル(下記を参照)を使用しています。
Let’s Encrypt の証明書を取得するためには、使用する ACME クライアントを1つ選ぶ必要があります。
一番のおすすめクライアントは「Certbot」です、今回も「Cerbot」を使用します。
以下に示す ACME クライアントはサードパーティにより提供されているものです。
サードパーティ製クライアントは Let’s Encrypt の制御下にはなく、レビューを行っているわけではないので、安全性や信頼性に対する保証をすることはできません。
○LetsEbcriptよくある質問(FAQ)
参考URL::https://letsencrypt.org/ja/docs/faq/
LetsEncriptの動作の仕組み
参考URL:動作の仕組み
https://letsencrypt.org/ja/how-it-works/
○Let’s Encrypt の動作のしくみ
Let’s Encrypt と ACME プロトコルの目標は、HTTPS サーバーのセットアップと、ブラウザが信頼する証明書の自動的な取得を、人間の仲介なしに可能にすることです。
この目標は、ウェブサーバー上で証明書管理エージェントを実行することで実現されます。
このプロセスには2つのステップがあります。1つ目は、CA に対して、ウェブサーバーがドメインをコントロールしていることを証明するプロセスです。
2つ目は、そのドメインに対して、エージェントが証明書のリクエスト・更新・無効化を行うプロセスです。
ドメインの検証について
Let’s Encrypt と ACME プロトコルの目標は、HTTPS サーバーのセットアップと、ブラウザが信頼する証明書の自動的な取得を、人間の仲介なしに可能にすることです。
この目標は、ウェブサーバー上で証明書管理エージェントを実行することで実現されます。
このプロセスには2つのステップがあります。1つ目は、CA に対して、ウェブサーバーがドメインをコントロールしていることを証明するプロセスです。
2つ目は、そのドメインに対して、エージェントが証明書のリクエスト・更新・無効化を行うプロセスです。
エージェント・ソフトウェアは、提示されたチャレンジのうちの1つをクリアします。
今、上の例で提示された2つ目のチャレンジをエージェントがクリアできるとしましょう。
このとき、エージェントは http://example.com のサイト上の特定のパスにファイルを1つ生成します。また、エージェントは提示されたノンスに秘密鍵を使って署名します。
エージェントがこれらのステップをクリアしたら、CA に検証の準備ができたことを伝えます。
すると、CA は、チャレンジが正しく行われたかをチェックします。
CA はノンスの署名が正しいことを検証し、ウェブサーバーからファイルをダウンロードし、その中に期待どおりのコンテンツが含まれているかどうかを確認します。
もし、ノンスに書かれた署名が有効であり、チャレンジがクリアされたならば、公開鍵を持つエージェントは example.com に対する証明書の管理を行うことを認証されたことになります。
私たちは、このエージェントが使用するキーペアのことを、example.com に対して「認証されたキーペア」と呼びます。
ACMEプロトコル
○ACMEプロトコル
参考URL:ACMEプロトコルの仕組み:
https://http2.try-and-test.net/letsencrypt.html
詳細は、上記URLを参照してください。
ACMEは、Automated Certificate Management Environmentの略です。
Let’s Encryptは、ACMEプロトコルを使用して、概ね以下の流れでサーバ証明書を発行します。
①まずは、秘密鍵とCSRを生成し、秘密鍵はローカルファイルに保存
②エージェント(クライアントソフト)は、Let’sEncryptのACMEサーバに接続しCSRを送信
③ACMEサーバは、nonceと呼ばれる認証用の情報をエージェントソフトに返信
④エージェントは、nonceから、認証用のファイルを生成し、htdocs配下の特定のディレクトに配置
⑤準備が整ったところで、エージェントは、ACMEサーバに認証チャレンジを要求
⑥ACMEサーバは、指定のドメインに認証用のファイルが設置されているか、Webサーバ(HTTPD)に確認
⑦ACMEサーバが、期待した通りの認証用ファイルをダウンロードできれば、サーバ証明書を発行
⑧でエージェントに送付
DNS CAAについて
○DNS CAAについて
※Certification Authority Authorization(DNS CAA)。
参考URL:https://http2.try-and-test.net/dns_caa.html
○CAAとは、Certification Authority Authorizationの略で、日本語訳だと、「認証局認可」といったところです。
○DNSにCAAレコードとして登録する情報になります。
○このDNSレコードの用途ですが、日本語に直訳で「認証局認可」とあるように、認証局が利用するものです。
○ドメイン所有者は、CAAレコードを記載しておくことによって、証明書を発行する認証局あらかじめ指定します。
○たとえば、ドメイン認証によって証明書を発行する認証局、とくに、申請後数分で証明書を発行することを売りにしている認証局の場合、審査の隙を突かれてしまう可能性もあります。
cerbotコマンドインストール
参考URL::https://qiita.com/tetsu6/items/380d86fcae85a96ac443
サーバ証明書の取得、更新には「certbot」コマンドを使用します。
ACME クライアント実装の1例である「cerbot」のインストールについて。
○CentOS-Base.repoリポジトリの変更(/etc/yum.repos.d/CentOS-Base.repo)
^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" ^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g
○Python3.6 入れるため SCLリポジトリ追加
yum install centos-release-scl
○SCLリポジトリ修正:/etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
baseurl=http://vault.centos.org/centos/6/sclo/$basearch/rh/ #mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=6&repo=sclo-rh
○Python3.6 インストール
yum install rh-python36 scl enable rh-python36 bash
○python3 コマンドとしてシンボリックリンク
cd /usr/bin unlink python3 ln -s /opt/rh/rh-python36/root/usr/bin/python3 python3 python3 --version
○目的の「certbot」コマンドのインストール
python3 -m venv /opt/certbot/ /opt/certbot/bin/pip install --upgrade pip /opt/certbot/bin/pip install certbot certbot-apache ln -s /opt/certbot/bin/certbot /usr/bin/certbot certbot --version
cerbotコマンドのディレクトリ構成
cerbotコマンドのディレクトリ構成
※/etc/letsencrypt配下の構成
[root@PowerEdgeT320 letsencrypt]# ls -la 合計 52 drwxr-xr-x. 9 root root 4096 12月 25 18:57 2021 . drwxr-xr-x. 121 root root 12288 12月 25 19:37 2021 .. -rw-r--r--. 1 root root 64 12月 25 16:04 2021 .updated-options-ssl-apache-conf-digest.txt drwx------. 4 root root 4096 12月 25 18:29 2021 accounts drwx------. 3 root root 4096 12月 25 17:38 2021 archive drwxr-xr-x. 2 root root 4096 12月 25 17:38 2021 csr drwx------. 2 root root 4096 12月 25 17:38 2021 keys drwx------. 3 root root 4096 12月 25 17:38 2021 live -rw-r--r--. 1 root root 924 12月 25 16:04 2021 options-ssl-apache.conf drwxr-xr-x. 2 root root 4096 12月 25 17:38 2021 renewal drwxr-xr-x. 5 root root 4096 12月 25 16:02 2021 renewal-hooks
cerbotコマンドの使い方
cerbotコマンドの使い方
公式サイト:https://free-ssl.jp/command/
コマンド構文
certbot-auto [サブコマンド] [オプション] [-d DOMAIN] [-d DOMAIN] …
主要なサブコマンド
run | デフォルト。現在動作しているウェブサーバに、SSL/TLS サーバ証明書を取得・インストールします。 |
---|---|
certonly | SSL/TLS サーバ証明書の取得のみを行います。インストールは行いません。 |
install | 取得済みの SSL/TLS サーバ証明書を、サーバソフトウェアにインストールします。 |
renew | 取得済みの SSL/TLS サーバ証明書のうち、有効期限が近い証明書を自動的に更新します。 |
certificates | 取得済みの SSL/TLS サーバ証明書の情報を表示します。 |
revoke | 取得済みの SSL/TLS サーバ証明書を、失効させます。–cert-name or –cert-path |
delete | 取得済みの SSL/TLS サーバ証明書の情報を削除します。–cert-name |
rollback | 証明書のインストールによって変更されたサーバソフトウェアの設定ファイルを元に戻します(ロールバック)。 |
config_changes | 証明書のインストールを行う際に、サーバソフトウェアの設定ファイルにどのような変更が行われるのかを表示します。 |
plugins | インストールされているプラグインの情報を表示します。 |
サーバ証明書の取得
サーバ証明書の取得
certbot certonly --apache certbot certonly --apache --dry-run ##サーバ証明書取得テスト
実行サンプル:
[root@PowerEdgeT320 conf]# certbot --version certbot 1.22.0 [root@PowerEdgeT320 conf]# certbot certonly --apache Saving debug log to /var/log/letsencrypt/letsencrypt.log Support for Apache 2.2 is deprecated and will be removed in a future release. Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: trinitas-yokohama.jp 2: www.trinitas-yokohama.jp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1 Requesting a certificate for trinitas-yokohama.jp Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/trinitas-yokohama.jp/fullchain.pem Key is saved at: /etc/letsencrypt/live/trinitas-yokohama.jp/privkey.pem This certificate expires on 2022-03-25. These files will be updated when the certificate renews. NEXT STEPS: - The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
サーバ証明書の更新
サーバ証明書の更新
certbot renew
実行サンプル:
[root@PowerEdgeT320 conf]# certbot renew Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/trinitas-yokohama.jp.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Certificate not yet due for renewal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The following certificates are not due for renewal yet: /etc/letsencrypt/live/trinitas-yokohama.jp/fullchain.pem expires on 2022-03-25 (skipped) No renewals were attempted. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
サーバ証明書の更新の自動化
参考URL1:Let’s EncryptによるSSLサーバー証明書の取得、自動更新設定(Snapを使用しない版)
https://inaba-serverdesign.jp/blog/20211019/pip-lets-encrypt-ssl-certificate-update-html.html
参考URL2:Let’s EncryptのSSL証明書を更新する(手動とcronによる自動更新)
https://it-jog.com/khow/serv/renewletsencrypt
Let’s Encrypt証明書の有効期間は90日と限定されており、期限が切れる前に更新する必要があります。
※Let’s Encryptの証明書は、デフォルトでは、有効期限まで30日未満のときのみ更新可能です。
有効期限まで30日以上のときは、コマンドを実行しても、証明書を更新しません。
有効期限が残り30日以上あり、それでも強制的にSSL証明書を更新したい場合は、
–force-renewalオプションを付ければ実行できます。但し、更新回数には一定の制限があります。
サーバ証明書の更新の自動化
certbot renew --dry-run ##自動化テスト
サーバ証明書の更新の自動化:cron設定
00 N * * N root certbot renew --post-hook "service httpd restart"
LetsEncript/証明書関連の術語について
参考URL:Glossary:https://letsencrypt.org/ja/docs/glossary/
英文のドキュメントですが、一部試行的に翻訳して記載します。
翻訳には以下のサイトを利用させていただきました:https://app.yarakuzen.com/
5000文字/1回の制限がありますが、何回でも無料で翻訳できます。
術語 | 省略形 |
説明 | |
ACME | Automatic Certificate Management Environment |
---|---|
自動証明書管理環境:Let’sEncryptによって実装されたプロトコル。 そのプロトコルと互換性のあるソフトウェアは、それを使用してLet’sEncryptと通信して証明書を要求できます。 |
|
ACME Client | ACMEサーバーと通信して証明書を要求できるプログラム。 Let’s EncryptのソフトウェアであるBoulderは、ACMEと互換性があり、いくつかの相違点があります。 |
ACME Server | 証明書を生成できるACME互換サーバー |
Authority Information Access | AIA |
証明書の発行者に関する情報を取得する方法をユーザーエージェントに示すために使用される証明書拡張。 通常、OCSPURIと発行者URIを指定します。 |
|
Baseline Requirements | BRs |
Aの一連の技術要件とポリシー要件。 すべての主要なルートプログラムにはベースライン要件が組み込まれているため、CAは、ほとんどのブラウザで信頼されるように、これらの要件に従う必要があります。 |
|
Boulder | Let’sEncryptによって開発および使用されているACMEを実装するソフトウェア。 |
CA Issuers | CA発行者:証明書の発行者に関する情報を含むAIAフィールドの一部。 Webサーバーが信頼できる証明書チェーンを提供しなかった場合に役立つことがあります。 |
CA/Browser Forum | Let’s Encryptは、CA /ブラウザフォーラムのメンバーです。 |
CAA | Certificate Authority Authorization |
CA /ブラウザフォーラム:認証局、インターネットブラウザソフトウェアのベンダー、オペレーティングシステム、およびその他のPKI対応アプリケーションの自発的なグループ。 CA /ブラウザフォーラムは、ベースライン要件を公開しています。 CAAレコードは、ブラウザではなくCAによってチェックされます。 |
|
Canonical Name record | CNAME |
標準名レコード(CNAME):あるドメイン名を別のドメイン名にマップするDNSエントリ(標準名と呼ばれます)。 | |
Certificate | 証明書:公開鍵と、その公開鍵をいつ使用するかを説明するその他のデータを含む、特定の形式のファイル。 最も一般的な種類の証明書はリーフ証明書です。 中間証明書とルート証明書もあります。 |
Certificate Authority | CA |
証明書:公開鍵と、その公開鍵をいつ使用するかを説明するその他のデータを含む、特定の形式のファイル。 最も一般的な種類の証明書はリーフ証明書です。 中間証明書とルート証明書もあります。 |
|
Certificate Policy | CP |
証明書ポリシー(CP):特定のコミュニティおよび/または共通のセキュリティ要件を持つアプリケーションのクラスへの証明書の適用可能性を示す名前付きのルールセット。 発行の具体的な詳細は、CPSに概説されています。 |
|
ISRG Certificate Policy | Internet Security Research Group |
ISRG証明書ポリシー-RFC3647。 | |
以降省略・・・・・・ | 以降省略・・・・・・・・・・・・・・・・・・。 |
著者:志村佳昭(株式会社トリニタス 技術顧問)
–>