1 公開キー・インフラストラクチャについて
この章では、公開キー暗号化の概要と、Oracle Linuxでキーの一般的なキーの管理に使用される公開キー・インフラストラクチャに関する情報を含め、その仕組みについて簡単に説明します。
公開キー暗号化とは
公開キー暗号化は、セキュアでないパブリック・ネットワーク上でセキュアな通信を可能にし、ネットワーク接続の相手側のエンティティのアイデンティティを検証するために使用される暗号化技術です。公開キー暗号化は、非対称のペア・キーを確立することによって機能します。一方のキーで暗号化されたデータは、もう一方のキーで復号化されます。一方のキーは秘密のまま保たれ、もう一方のキーは公開されます。公開キーを使用してデータを復号化するユーザーは、秘密キーにアクセスできるユーザーがデータを暗号化したことを確認できます。同様に、公開キーを使用してデータを暗号化するユーザーは、秘密キーにアクセスできるユーザーのみがデータを復号化できることを確認できます。
どちらのキーも、それ自体ではデータの送信者のアイデンティティを確立できません。これを実現するために、公開キーは通常、秘密キーの所有者に属するものとして署名されます。署名プロセスは、認証局(CA)と呼ばれる信頼できるサード・パーティによって行われます。秘密キーと公開キーのペアの作成者が、証明書署名リクエスト(CSR)の形式で公開キーをCAに送信します。CAは、独自の秘密キーを使用して証明書に署名します。証明書には、送信元の公開キーを暗号化したものと、エンティティ(対象)、CA (発行者)に関するその他の情報、証明書の有効期間、使用されている暗号化アルゴリズムが含まれます。この証明書は、公開することも、秘密キーを使用して暗号化されたデータを復号化する必要がある任意のクライアントに提供することもできます。
CAを信頼するクライアントは、証明書に格納されている公開キーも信頼できます。CA証明書を使用して証明書を復号化すると公開キーが生成され、この公開キーを使用して、データの機密を保持するセキュアな通信チャネルを作成し、チャネル内を移動するデータの送信元のアイデンティティを確立できます。
インターネットでは、エンティティの代理で証明書を発行するために、ルートCAに信頼されている多くの最上位レベルまたはルートの公開CAおよび中間CAが存在します。中間CAは、証明書チェーンを返します。証明書チェーンでは、ルートCAに至るまでのチェーンの各証明書がチェーンの前にある証明書の署名者の公開キーを認証します。
CA証明書は、公開キーのアイデンティティおよび公開キーが有効とみなされる期間を確立するためにのみ使用されます。証明書の有効期限が切れても、公開キーを使用して暗号化されたデータは、秘密キーによって復号化できます。これは、通信が常にセキュアとみなされるためには、秘密キーを永久に安全な状態に保つ必要があることを意味します。公開キー暗号化には、秘密キーの安全性維持を支援するために使用できるメカニズムも存在します。このメカニズムは、Perfect Forward Secrecy (PFS)と呼ばれ、キー交換アルゴリズムを使用して、データを暗号化するために対称暗号で使用できるランダムな使い捨てのセッション・キーを安全に認識します。この方法の利点は、セッション・キーの安全性が損なわれた場合、その特定の通信セッションの通信のみが公開されることです。また、秘密キーの安全性が損なわれた場合、実際の通信セッションのすべてが自動的に公開されることもありません。
PFSのもう1つの利点は、非対称キー・ペアとCA証明書を使用して各情報を復号化および検証する計算コストが高く低速なプロセスを簡素化することです。実際には、公開キーを復号化してCA証明書に照らして検証し、それを使用して通信セッション内のデータを復号化するプロセスは、PFSが確立されるまでのセッションの開始時にのみ実行されます。ランダム・セッション・キーを作成して共有するアルゴリズムは、通常、Diffie-Hellmanキー交換です。その後、セッション・キーは対称暗号化を使用して、セッションの残りを通じてデータの暗号化と復号化をより高速に実行します。この目的のために最もよく使用される暗号はAESで、ハードウェアを利用して、暗号文での暗号化と通信を平文との通信とほぼ同じ速さで実行できます。
通信チャネルの処理、およびクライアント側とサーバー側が非対称暗号化から対称暗号化に切り替わるこのネゴシエーションは、すべてTransport Layer Security (TLS)またはSecure Sockets Layer (SSL)暗号化プロトコルを使用して実現されます。
OpenSSL、GnuTLSおよびネットワーク・セキュリティ・サービス(NSS)は、TLSおよびSSLプロトコルのオープン・ソース実装を提供します。OpenJDKパッケージに付属するkeytoolコマンドを使用して、Javaキーストアを管理することもできます。これは、多くの場合、Javaベースのアプリケーションで使用されます。信頼の階層が組織のイントラネットに限定されている場合は、これらの実装を使用してルート証明書を生成し、そのドメインのCAを設定できます。ただし、この自己署名ルート証明書を組織の各システムにインストールしないかぎり、ブラウザ、LDAPまたはIPA認証、証明書を使用するその他のソフトウェアは、信頼できない関係の可能性についてユーザーにプロンプトを表示します。
ノート:
ルートCAまたは中間レベルのCAによって検証されたドメインの証明書を使用する場合は、適切なルート証明書が各システムにすでに存在するため、ルート証明書を配布する必要はありません。
一般に、TLS/SSL証明書は1年後に期限が切れます。ルート証明書など、Webブラウザで配布され、ルートCAおよび中間CAによって発行されるその他の証明書は、5から10年後に期限が切れます。アプリケーションで証明書の期限切れ警告が表示されないようにするには、期限切れになる前にTLS/SSL証明書を交換するよう計画を立ててください。ルート証明書の場合は、通常、証明書が期限切れになる前にソフトウェアを更新します。
CAに署名証明書をリクエストする際、そのCAの公開キーを認証するルート証明書または証明書チェーンがシステムに存在しない場合、CAから信頼できるルート証明書を取得します。中間者攻撃を防ぐには、ルート証明書をインポートする前にその信憑性を検証します。証明書のフィンガープリントとCAによって発行されているフィンガープリントが一致することを確認します。
SSLとTLSについて
Secure Sockets Layer (SSL)とTransport Layer Security (TLS)はどちらも、サーバー・システムとクライアント・システム間のセキュアな接続と交換を保証する通信プロトコルです。どちらのプロトコルも、ネットワーク通信を保護するための暗号化と認証を提供します。ただし、SSLは古いテクノロジであり、TLSに置き換えられています。TLSで使用される暗号化は、より複雑で、高度で、堅牢で、安全です。TLSを使用した認証は高速で、アラート・メッセージングが改善されます。
基礎となるプロトコルにこの変更を加えても、OpenSSLプロジェクトは名前を維持しており、多くの場合、SSL用語はTLS機能を記述するために同じ意味で使用されます。セキュアな通信のコンテキストでは、SSLはTLSプロトコルおよびTLS証明書を参照していると理解されるようになりました。このドキュメントでのSSLの参照は、TLSのコンテキストで理解されることを意図しています。
Automatic Certificate Management Environment (ACME)
Automatic Certificate Management Environment (ACME)は、RFC 8555でIETFによって公開されるプロトコルおよびフレームワークであり、ドメイン検証が必要な証明書の署名と作成のために使用できます。
プロトコルでは、ドメイン名の制御によってのみ実行できるアクションをACMEクライアントで実行することで、CAによるHTTPSを介したJSON形式のメッセージを使用して、ドメイン所有権の検証が自動的に処理されます。たとえば、CAはDNSレコードのプロビジョニングをリクエストすることも、特定のHTTPリソースをドメイン名でWebサーバーで利用可能にするようにリクエストすることもできます。
CAは、証明書をリクエストしているエンティティがドメインの所有権を持っていることを検証した後、ACMEクライアントから送信された証明書に署名できます。通常、クライアントは、システムで実行されているサービスが使用できる場所に証明書を自動的にインストールできます。
ACMEによって、公開キー・インフラストラクチャの管理に関連するコストと複雑度が軽減されます。場合によっては、CAの選択に応じて、ドメイン内のシステムの署名証明書を無料で取得できることがあります。たとえば、ACMEプロトコルの作成者であるLet's Encryptは、無料のオープンCAサービスを提供しています。その他の商用CAも、無料のACMEベースの証明書を提供し始めています。
最初のバージョンのACMEプロトコルは単一のドメイン証明書の作成にのみ使用できましたが、ACME v2はワイルドカード・ドメイン(*.example.comなど)を使用した証明書の作成および署名に使用できます。したがって、すべてのサブドメインで単一の証明書を使用できます。ACMEではドメインのみが検証されることに注意してください。より多くの検証が必要な証明書が必要な場合は、ACMEを超えるサービスを提供する確立されたCAから署名証明書を取得することが必要になる場合があります。
TLS/SSLで保護されたサービスを使用するために、インフラストラクチャ全体で証明書を迅速に作成して発行する必要がある場合は、ACMEをサポートするCAとACMEクライアントの使用を検討してください。ACMEは、キー・ペアとCSRを自動的に生成し、CSRを検証のためにCAに送信し、CAの検証ステップを実行して、署名証明書を取得し、サービスおよびアプリケーションがアクセスできる場所に格納できます。多くのクライアントは、定期的なcron
タスクを自動的に設定して、証明書の有効期限をチェックし、現在の証明書の期限が切れる前に新しい証明書を自動的にリクエストします。