通常、ドメインがHTTPSアクセスを提供している場合、サーバー側では証明書の公開鍵と秘密鍵を同時にデプロイして、初めてハンドシェイクプロセスにおける通信の暗号化と復号を完了できます。お客様のドメインをEdgeOneに接続して安全な加速を行う必要がある場合も、証明書の公開鍵と秘密鍵をEdgeOneのエッジノードにアップロードしてデプロイする必要があります。証明書の秘密鍵をより厳格に保存したい場合、証明書の秘密鍵をTencent Cloud SSLコンソールにアップロードしたくない場合は、EdgeOneはKeyless秘密鍵不要証明書デプロイソリューションをサポートしています。本文書では、EdgeOneのKeyless秘密鍵不要証明書ソリューションの使用方法について説明します。
説明:
現在のKeylessソリューションは、RSAアルゴリズム証明書の使用のみをサポートしています。
ソリューション紹介
HTTPS一方向認証のハンドシェイクフロー(RSA鍵交換アルゴリズムを例とする)
通常の状況では、EdgeOne上にHTTPS証明書を設定している場合、クライアントがHTTPSを使用してハンドシェイクリクエストを開始するフローは以下の通りです(RSA鍵交換アルゴリズムを使用する場合を例とします):
1. クライアントはEdgeOneにリクエストを開始し、ClientHelloを送信し、クライアントが生成した乱数およびサポートされる暗号スイート情報などをEdgeOneに送信します。
2. EdgeOneはリクエストを受信した後、サーバー側でも乱数を生成し、現在のドメインに設定されているHTTPS証明書の公開鍵をクライアントに送信します。
3. クライアントはサーバー側の乱数および現在のドメインの公開鍵証明書を受信した後、CA証明書を使用してその証明書を検証し、有効かつ信頼できることを確認します。
4. 証明書の検証が完了したことを確認した後、クライアントは現在の暗号化アルゴリズムに基づいてプレマスターシークレットを生成し、その証明書内の公開鍵を使用してプレマスターシークレットを暗号化してからEdgeOneに送信します。
5. EdgeOneは暗号化されたプレマスターシークレットを受信し、証明書の秘密鍵を使用して復号し、プレマスターシークレットを取得します。
6. この時点で、サーバー側とクライアントはどちらも完全なクライアント乱数、サーバー乱数、およびプレマスターシークレット情報を有しており、これらを組み合わせてセッション鍵を生成します。クライアントとサーバー側はどちらもこのセッション鍵を使用して通信を行います。
上記の暗号化通信セッションの安全性は、サーバー側の証明書秘密鍵が安全であることにあります。もしサーバー側の証明書秘密鍵が漏洩した場合、攻撃者に悪用されてセッション情報が漏洩する可能性があります。
Keyless無秘密鍵証明書ソリューションにおけるハンドシェイクフロー(RSA鍵交換アルゴリズムを例とする)
EdgeOneは現在、Keyless秘密鍵不要証明書ソリューションをサポートしています。証明書秘密鍵の安全性をさらに確保するために、ユーザーはドメイン証明書の公開鍵部分のみをEdgeOneエッジノードにデプロイすることができます。ユーザーは秘密鍵部分を自身で保存でき、秘密鍵証明書を使用する必要がある場合には、Keylessサーバーにリクエストを送信して秘密鍵で関連データを復号できます。HTTPS一方向認証ハンドシェイクの通常フローと異なる点は、主にサーバー側が暗号化されたプレマスターシークレット情報を受信した後、EdgeOneがその情報をKeyless Serverに転送し、Keyless Serverが復号を完了し、復号されたプレマスターシークレット情報を暗号化通信を通じてEdgeOneに返すことです。
説明:
デフォルトでは、EdgeOneエッジノードとKeyless Server間の通信にはHTTPSセキュア通信暗号化が設定可能です。HTTPS双方向認証ハンドシェイクを設定してこのセッションのセキュリティをさらに強化する必要がある場合は、お問い合わせください。 事前準備
1. Keyless Serverをインストールするためのサーバーを1台準備します。例えば:1.1.1.1。
2. Keylessを使用する必要があるドメインを1つ準備します。例えば:example.com。このドメインはEdgeOneへの接続が完了しており、このドメインに対応する証明書は:example.com.crt、example.com.keyです。
3. 現在設定に必要なサーバー証明書を準備します。これにはクライアント公開鍵、秘密鍵が含まれます。証明書名の例は:server.crt、server.keyです。
説明:
自己署名証明書を使用してテストに必要な証明書を準備することもできます。詳細はOpenSSLを使用した自己署名証明書の生成を参照してください。自己署名証明書はテスト用途のみに使用され、ブラウザーに信頼されず、実際の業務には適用できません。 使用手順
ステップ1:サーバーにKeyless Serverサービスをインストールする
1. Keyless Serverをインストールする予定のサーバーにログインし、以下の依存環境がインストール済みであることを確認してください。要件は以下の通りです:
Go:バージョンはgo1.20以上である必要があります。 Openssl:関連ライブラリopenssl-static(1:1.1.1k-12.tl3.1)、openssl-devel(1:1.1.1k-12.tl3.1)、およびzlib-devel(1.2.11-25.tl3)が必要です。 2. すべての元のインストールが完了していることを確認した後、以下のコマンドを使用して、GitHubからTencent Cloud EdgeOneが提供するKeyless serverオープンソースプロジェクトコードを、指定したインストールディレクトリにダウンロードしてください。
git clone https://github.com/Tencent/edgeone-keyless-server.git
3. Keylessプロジェクトのファイルルートディレクトリに移動します。
cd /edgeone-keyless-server
4. ルートディレクトリに、Keyless公開鍵と秘密鍵証明書を保存するためのディレクトリ/sslを作成します。ディレクトリ/ssl/mutual_sslは、サーバーがKeylessリクエストを受信する際にHTTPSハンドシェイクで使用する証明書を保存するために使用します。
mkdir ssl
mkdir ssl/mutual_ssl
説明:
Keyless serverは、Keylessのキーレス加速リクエストを受信すると、デフォルトで/sslディレクトリに保存されている証明書を読み取り、その証明書の秘密鍵を取得して復号します。証明書の保存パス名をカスタマイズする必要がある場合は、/config/keyless.yamlでprivate_key_pathを現在の証明書の保存パスに変更する必要があります。
5. 現在のドメインに使用するKeyless公開鍵と秘密鍵証明書をアップロードし、その証明書の公開鍵と秘密鍵ファイルをすべて/sslディレクトリにアップロードしてください。例えば、example.com.crt、example.com.keyです。EdgeOneエッジノードとKeyless server間のハンドシェイクに必要なサーバー証明書について、証明書の公開鍵と秘密鍵ファイルを./ssl/mutual_ssl/ディレクトリにアップロードしてください。例えば、server.crt、server.keyです。
注意:
Keylessの公開鍵と秘密鍵の証明書ファイル名は一致している必要があります。
EdgeOneエッジノードとKeyless server間でHTTPS双方向認証ハンドシェイクを使用する場合は、クライアントのCA証明書も./ssl/mutual_ssl/ディレクトリにアップロードしてください。また、EdgeOneエッジノードがKeyless serverにアクセスする際に携帯するクライアント証明書を設定する必要があります。この証明書の設定については、お問い合わせの上で設定を行ってください。 6. 以下のコマンドを実行して、本機のIPアドレスを取得します。例えば、172.16.64.24です。
7. 設定ファイルを変更します。
7.1 iを押して挿入モードに入り、この設定ファイルの編集を開始できます。主に以下の5つのパラメータを変更し、その他のパラメータはデフォルトのままで構いません:
IP:手順6で取得した本機のIPアドレスを使用します。
Port:外部に提供するサービスポートです。443の使用を推奨し、ポートがアクセス可能であることを保証する必要があります。
tls_cert:手順5でアップロードしたサーバー証明書の公開鍵パスです。EdgeOneエッジノードとKeyless server間のHTTPSハンドシェイクに使用されます。
tls_key:手順5でアップロードしたサーバー証明書の秘密鍵パスです。EdgeOneエッジノードとKeyless server間のHTTPSハンドシェイクに使用されます。
ca_cert:デフォルトでは設定は不要です。双方向認証ハンドシェイクを設定する必要がある場合、この設定はクライアント証明書のCA証明書パスを指定するために使用されます。これは、手順5でアップロードしたクライアントCA証明書パスです。
7.2 Escを押して挿入モードを終了し、:wqを入力して保存して終了します。
8. 基礎設定が完了したら、プロジェクトをコンパイルします。
go build -o keyless main.go && chmod a+x keyless
9. 以下のコマンドを実行して、Keyless serverサービスを有効にします。
sudo nohup /edgeone-keyless-server/keyless >/dev/null 2>&1 &
10. 以下のコマンドを実行して、現在のサービスが正常に有効化されているかどうかを確認します。launch successと表示された場合、有効化は成功しています。
ステップ2:Tencent Cloud SSL Certificatesコンソールで証明書をアップロードする
説明:
公開鍵のみを含むサーバー証明書をアップロードする必要がある場合は、お問い合わせください。Tencent Cloud SSL製品の許可リストを有効にします。 ステップ3:EdgeOneコンソールでドメイン名にKeyless無秘密鍵証明書を使用するよう設定する
2. サイト詳細ページで、ドメインサービス>ドメイン管理をクリックします。
3. 設定が必要なドメイン名を見つけ、HTTPS設定列で編集をクリックし、エッジHTTPS設定カードを見つけて設定をクリックし、設定方式としてKeyless 無私钥証明書を使用を選択します。
4. Keylessサーバーのアドレスを設定します。このアドレスは、手順1で準備したサーバーのアドレスとポート番号です。 5. 使用するHTTPS証明書を選択します。この証明書は、手順2でアップロードした証明書です。 6. 確定をクリックし、設定のデプロイと配信を待つと、有効になります。
ステップ4:アクセス検証
curlを使用してアクセス検証を行い、HTTPSハンドシェイクが正常にアクセスできるかどうかを確認します。以下のcurlコマンドを参照できます:
curl https://example.com/ -v -k
Keyless証明書を更新する
1. Keyless serverサーバーにログインし、現在インストールされているKeylessディレクトリに移動して、更新する公開鍵証明書と秘密鍵証明書を./ssl/ディレクトリにアップロードします。
注意:
Keylessの公開鍵証明書と秘密鍵証明書のファイル名は必ず一致させる必要があります。証明書を更新する際は、古いドメイン名証明書を直接上書きしないでください。別のファイル名で保存することをお勧めします。例えば:元の証明書名がexample.com.crt、example.com.keyの場合、新しい証明書名はexample.com.new.crt、example.com.new.keyを使用できます。
2. アップロード完了後、以下のコマンドを実行してKeyless証明書を再読み込みします。
curl http://127.0.0.1/KeylessReloadCerts -v
curlリクエストが以下のように表示され、応答が200の場合、読み込み成功です:
5. サイト詳細ページで、ドメインサービス>ドメイン管理をクリックします。
6. 設定が必要なドメイン名を見つけ、HTTPS設定列で編集をクリックし、エッジHTTPS設定カードを見つけて設定をクリックし、設定方式としてKeyless 無私钥証明書を使用を選択します。
7. HTTPS証明書を新しくアップロードした証明書に変更し、確定をクリックして、設定のデプロイと配信を待つと有効になります。