Zum Hauptinhalt springen

6. Vertrauenswürdige CA-Anzeige

Eingeschränkte Clients, die aufgrund von Speicherbeschränkungen nur über eine kleine Anzahl von CA-Wurzelschlüsseln verfügen, möchten möglicherweise den Servern anzeigen, welche Wurzelschlüssel sie besitzen, um wiederholte Handshake-Fehler zu vermeiden.

Um anzuzeigen, welche CA-Wurzelschlüssel sie besitzen, KÖNNEN Clients eine Erweiterung vom Typ "trusted_ca_keys" in das (erweiterte) Client-Hello aufnehmen. Das Feld "extension_data" dieser Erweiterung MUSS "TrustedAuthorities" enthalten, wobei:

struct {
TrustedAuthority trusted_authorities_list<0..2^16-1>;
} TrustedAuthorities;

struct {
IdentifierType identifier_type;
select (identifier_type) {
case pre_agreed: struct {};
case key_sha1_hash: SHA1Hash;
case x509_name: DistinguishedName;
case cert_sha1_hash: SHA1Hash;
} identifier;
} TrustedAuthority;

enum {
pre_agreed(0), key_sha1_hash(1),
x509_name(2), cert_sha1_hash(3), (255)
} IdentifierType;

opaque DistinguishedName<1..2^16-1>;

Hier stellt "TrustedAuthorities" eine Liste von CA-Wurzelschlüssel-Identifikatoren bereit, die der Client besitzt. Jeder CA-Wurzelschlüssel wird über eine der folgenden Methoden identifiziert:

  • "pre_agreed": keine CA-Wurzelschlüssel-Identität bereitgestellt.

  • "key_sha1_hash": enthält den SHA-1-Hash des CA-Wurzelschlüssels. Für Digital Signature Algorithm (DSA)- und Elliptic Curve Digital Signature Algorithm (ECDSA)-Schlüssel ist dies der Hash des "subjectPublicKey"-Werts. Für RSA-Schlüssel ist der Hash der des Big-Endian-Byte-String-Darstellung des Modulus ohne anfängliche 0-wertige Bytes. (Dies kopiert die in anderen Umgebungen bereitgestellten Schlüssel-Hash-Formate.)

  • "x509_name": enthält den DER-codierten X.509 DistinguishedName der CA.

  • "cert_sha1_hash": enthält den SHA-1-Hash eines DER-codierten Zertifikats, das den CA-Wurzelschlüssel enthält.

Beachten Sie, dass Clients keine, einige oder alle CA-Wurzelschlüssel, die sie besitzen, in die trusted_ca_keys-Erweiterung aufnehmen können. Die Entscheidung, einen bestimmten CA-Wurzelschlüssel einzuschließen, kann darauf basieren, ob der Client bereit ist, eine Authentifizierung basierend auf dem CA-Wurzelschlüssel durchzuführen, ob die CA Zertifikate ausstellt, die für den Server relevant sind, oder ob es einen bekannten Fehlermodus für Handshakes gibt, der die Verwendung dieses Wurzelschlüssels beinhaltet.

Wenn ein Server eine Client-Hello-Nachricht empfängt, die die "trusted_ca_keys"-Erweiterung enthält, KANN er die in der Erweiterung enthaltenen Informationen verwenden, um seine Auswahl des an den Client zurückzusendenden Zertifikats zu leiten. In diesem Fall MUSS der Server eine Erweiterung vom Typ "trusted_ca_keys" in das (erweiterte) Server-Hello aufnehmen. Das Feld "extension_data" dieser Erweiterung MUSS leer sein.