web-dev-qa-db-ja.com

TLSキー交換と証明書サブジェクトの公開キーの明確化

この質問は これ に似ているので、私が苦労していることを詳しく説明しましょう。

鍵交換および認証中にサーバーが使用する鍵の長さ/強度(RSAの公開鍵サイズ、DHEの素数フィールドサイズなど)を取得したい。

したがって、私が理解しているように、TLS証明書のsubject's public keyおよびKeyUsageビットは、私が見ている値でなければなりません。

ここで、サーバーにRSA公開鍵を含むTLS証明書があるとします。さらに、次のKeyUsageビットが設定されます。

keyEncipherment
digitalSignature

さらに、サーバーが暗号スイートのみをサポートしていると仮定しましょう

TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256

最初の暗号スイートの場合、証明書で提供されるキーを使用して、バルク暗号化キーを交換し、サーバーを認証できます。

私の質問は:

  • 2番目の暗号スイートの場合はどうなりますか?

    • リーフ証明書に別のキーが含まれている場合、サーバーは別の証明書チェーンを返すことができますか?
    • RSA鍵は鍵交換パラメーターの署名にのみ使用されますか?
  • KeyEncipherment(またはdigitalSignature)ビットが設定されていない場合はどうなりますか?

    • 常にリーフ証明書に設定されていると想定できますか?
  • 経験則の鍵交換と認証アルゴリズムのすべての異なる組み合わせを処理する方法はありますか?

1
superuser

リーフ証明書に別のキーが含まれている場合、サーバーは別の証明書チェーンを返すことができますか?

最初の暗号スイートはRSA公開鍵を必要とし、2番目はECC公開鍵を必要とし、各証明書には1つの公開鍵しか含めることができないため、サーバーは異なる証明書を返す必要があります。これは、異なる中間証明書または異なるルート証明書にもつながる可能性があります。

RSA鍵は鍵交換パラメーターの署名にのみ使用されますか?

TLS_RSA_WITH_CAMELLIA_128_CBC_SHA鍵交換もRSA(公開鍵だけでなく)です。つまり、クライアントはサーバーのpubkeyを使用して、プリマスターシークレットを暗号化(署名なし)しています。

KeyEncipherment(またはdigitalSignature)ビットが設定されていない場合はどうなりますか?

暗号が必要とする鍵交換によっては、失敗する可能性があります。詳細は 各鍵交換方法で必要な鍵の使用法は? を参照してください。

鍵交換と認証アルゴリズムのさまざまな組み合わせをすべて処理する方法の経験則はありますか?

私はあなたが何を期待しているのかわかりませんが、明らかに、鍵交換メソッドに必要なすべてのkeyUsageを証明書に含める必要があり、公開鍵のタイプは暗号で必要なアルゴリズムと一致する必要があります。通常、クライアントサーバーはとにかくすべての可能な組み合わせをサポートするのではなく、サブセットのみをサポートします。

1
Steffen Ullrich