ADC

Erweiterte Richtlinienausdrücke: Analysieren von SSL-Zertifikaten

Es gibt erweiterte Richtlinienausdrücke, um SSL-Zertifikate und Hello-Nachrichten des SSL-Clients zu analysieren.

Analysieren Sie SSL-Zertifikate

Sie können erweiterte Richtlinienausdrücke verwenden, um X.509 Secure Sockets Layer (SSL) Clientzertifikate auszuwerten. Ein Clientzertifikat ist ein elektronisches Dokument, mit dem die Identität eines Benutzers authentifiziert werden kann. Ein Clientzertifikat enthält (mindestens) Versionsinformationen, eine Seriennummer, eine Signaturalgorithmus-ID, einen Ausstellernamen, eine Gültigkeitsdauer, einen Antragstellernamen (Benutzer), einen öffentlichen Schlüssel und Signaturen.

Sie können sowohl SSL-Verbindungen als auch Daten in Clientzertifikaten untersuchen. Beispielsweise möchten Sie möglicherweise SSL-Anforderungen, die Verschlüsselungen mit niedriger Stärke verwenden, an eine bestimmte virtuelle Serverfarm mit Lastausgleich senden. Der folgende Befehl ist ein Beispiel für eine Content Switching-Richtlinie, die die Verschlüsselungsstärke in einer Anforderung analysiert und Verschlüsselungsstärken kleiner oder gleich 40 entspricht:

add cs policy p1 -rule "client.ssl.cipher_bits.le(40)"

Als weiteres Beispiel können Sie eine Richtlinie konfigurieren, die bestimmt, ob eine Anforderung ein Clientzertifikat enthält:

add cs policy p2 -rule "client.ssl.client_cert exists"

Sie können auch eine Richtlinie konfigurieren, die bestimmte Informationen in einem Clientzertifikat untersucht. Die folgende Richtlinie überprüft beispielsweise, ob das Zertifikat einen oder mehrere Tage vor Ablauf hat:

add cs policy p2 -rule "client.ssl.client_cert exists && client.ssl.client_cert.days_to_expire.ge(1)"

Ein Beispiel für die Verwendung von JA3 Fingerabdrücken:

add ssl policy ja3_pol -rule "CLIENT.SSL.JA3_FINGERPRINT.EQ(bb4c15a90e93a25ddc16274395bce4c6)" -action reset

Oder ein Beispiel für die Verwendung von JA3-Fingerabdrücken mit Patset:

add policy patset pat1
bind policy patset pat1 bb4c15a90e93a25ddc16274395bce4c6 -index 1
bind policy patset pat1 cd3c15a90e93a25ddc16274395bce6b4 -index 2
add ssl policy ssl_ja3_pol -rule CLIENT.SSL.JA3_FINGERPRINT.contains_any("pat1") -action reset
<!--NeedCopy-->

Hinweis

Informationen zum Analysieren von Datums und Uhrzeiten in einem Zertifikat finden Sie unter Format von Datums und Zeiten in einem Ausdruck und Ausdrücke für SSL-Zertifikatdaten.

Präfixe für textbasierte SSL- und Zertifikatsdaten

In der folgenden Tabelle werden Ausdruckspräfixe beschrieben, die textbasierte Elemente in SSL-Transaktionen und Clientzertifikaten identifizieren.

Tabelle 1. Präfixe, die Text oder boolesche Werte für SSL- und Clientzertifikatsdaten zurückgeben

Präfix Beschreibung
CLIENT.SSL.CLIENT_CERT Gibt das SSL-Clientzertifikat in der aktuellen SSL-Transaktion zurück.
CLIENT.SSL.CLIENT_CERT.TO_PEM Gibt das SSL-Clientzertifikat im Binärformat zurück.
CLIENT.SSL.CIPHER_EXPORTABLE Gibt ein boolesches TRUE zurück, wenn die kryptografische SSL-Verschlüsselung exportierbar ist.
CLIENT.SSL.CIPHER_NAME Gibt den Namen der SSL-Verschlüsselung zurück, wenn sie von einer SSL-Verbindung aufgerufen wird, und eine NULL-Zeichenfolge, wenn sie von einer Nicht-SSL-Verbindung aufgerufen wird.
CLIENT.SSL.IS_SSL Gibt ein boolesches TRUE zurück, wenn die aktuelle Verbindung SSL-basiert ist.
CLIENT.SSL.JA3_FINGERPRINT Gibt ein boolesches TRUE zurück, wenn der konfigurierte JA3-Fingerabdruck mit dem JA3-Fingerabdruck in der Hello-Nachricht des Clients übereinstimmt. Hinweis: Dieser Ausdruck ist in Version 13.1 Build 12.x und höher verfügbar.

Präfixe für numerische Daten in SSL-Zertifikaten

In der folgenden Tabelle werden Präfixe beschrieben, die numerische Daten außer Datumsangaben in SSL-Zertifikaten auswerten. Diese Präfixe können mit den Operationen verwendet werden, die unter Grundlegende Operationen für Ausdruckspräfixe und zusammengesetzte Operationen für Zahlenbeschrieben sind.

Tabelle 2. Präfixe, die numerische Daten außer Daten in SSL-Zertifikaten auswerten

Präfix Beschreibung
CLIENT.SSL.CLIENT_CERT.DAYS_TO_EXPIRE Gibt die Anzahl der Tage zurück, an denen das Zertifikat gültig ist, oder gibt -1 für abgelaufene Zertifikate zurück.
CLIENT.SSL.CLIENT_CERT.PK_SIZE Gibt die Größe des öffentlichen Schlüssels zurück, der im Zertifikat verwendet wird.
CLIENT.SSL.CLIENT_CERT.VERSION Gibt die Versionsnummer des Zertifikats zurück. Wenn die Verbindung nicht SSL-basiert ist, wird Null (0) zurückgegeben.
CLIENT.SSL.CIPHER_BITS Gibt die Anzahl der Bits im kryptographischen Schlüssel zurück. Gibt 0 zurück, wenn die Verbindung nicht SSL-basiert ist.
CLIENT.SSL.VERSION Gibt eine Zahl zurück, die die SSL-Protokollversion darstellt, wie folgt: 0. Die Transaktion ist nicht SSL-basiert: 0x002. Die Transaktion ist SSLv2:0x300. Die Transaktion ist SSLv3:0x301. Die Transaktion ist TLSv1:0x302. Die Transaktion ist TLS 1.1:0x303. Die Transaktion ist TLS 1.2:0x304. Die Transaktion ist TLS 1.3.

Hinweis

Informationen zu Ausdrücken im Zusammenhang mit Ablaufdatum in einem Zertifikat finden Sie unter Ausdrücke für SSL-Zertifikatdaten.

Ausdrücke für SSL-Zertifikate

Sie können SSL-Zertifikate analysieren, indem Sie Ausdrücke konfigurieren, die das folgende Präfix verwenden:

CLIENT.SSL.CLIENT_CERT

In diesem Abschnitt werden die Ausdrücke beschrieben, die Sie für Zertifikate konfigurieren können, ausgenommen Ausdrücke, die den Zertifikatablauf untersuchen. Zeitbasierte Vorgänge werden unter Erweiterte Richtlinienausdrücke: Arbeiten mit Datumsangaben, Zeiten und Zahlenbeschrieben.

In der folgenden Tabelle werden die Vorgänge beschrieben, die Sie für das Präfix CLIENT.SSL.CLIENT_CERT angeben können.

Tabelle 3. Vorgänge, die mit dem Präfix CLIENT.SSL.CLIENT_CERT angegeben werden können

SSL-Zertifikat Betrieb Beschreibung
<certificate>.EXISTS Gibt ein boolesches TRUE zurück, wenn der Client über ein SSL-Zertifikat verfügt.
<certificate>.ISSUER Gibt den Distinguished Name (DN) des Ausstellers im Zertifikat als Name-Wert-Liste zurück. Ein Gleichheitszeichen (“=”) ist das Trennzeichen für den Namen und den Wert, und der Schrägstrich (“/”) ist das Trennzeichen, das die Name-Wert-Paare trennt. Es folgt ein Beispiel für den zurückgegebenen DN: /C=US/O=myCompany/OU=www.mycompany.com/CN=www.mycompany.com/emailAddress=myuserid@mycompany.com
<certificate>.ISSUER. IGNORE_EMPTY_ELEMENTS Gibt den Emittenten zurück und ignoriert die leeren Elemente in einer Name-Wert-Liste. Beispielsweise, Bedenken Sie Folgendes: Cert-Issuer: /c=in/st=kar//l=bangelore //o=mycompany/ou=sales/ /emailAddress=myuserid@mycompany.com. Die folgende Rewrite-Aktion gibt basierend auf der vorhergehenden Emittentendefinition eine Anzahl von 6 zurück: sh rewrite action insert_ssl_header Name: insert_ssl Operation: insert_http_header Target:Cert-Issuer Value:CLIENT.SSL.CLIENT_CERT.ISSUER.COUNT. Wenn Sie jedoch den Wert in den folgenden ändern, ist die zurückgegebene Anzahl 9: CLIENT.SSL.CLIENT_CERT.ISSUER.IGNORE_EMPTY_ELEMENTS.COUNT
<certificate>. SERIALNUMBER Gibt die Seriennummer des Zertifikats als hexadezimale Zeichenfolge in Großbuchstaben ohne führende Nullen zurück. Wenn die Seriennummer des Zertifikats beispielsweise 04daa1e44bd2e7769638a0058b4964bd lautet, hilft der folgende Ausdruck bei der Zuordnung der Seriennummer CLIENT.SSL.CLIENT_CERT.SERIALNUMBER.SET_TEXT_MODE(IGNORECASE).CONTAINS(\"4daa1e44bd2e7769638a0058b4964bd\")
  • <certificate>.extensions.has_object
Gibt den booleschen Wert TRUE zurück, wenn das Clientzertifikat die Erweiterung mit einer passenden OID hat. Wenn das Clientzertifikat beispielsweise die Erweiterung mit der OID 2.16.756.5.4.2.1.2.13.2.7 hat, gibt der Ausdruck client.ssl.client_cert.extensions.has_object (2.16.756.5.4.2.1.2.13.2.7) TRUE zurück.
  • <certificate>.extensions.object(OID).has_value(value)

Gibt den booleschen Wert TRUE zurück, wenn das Clientzertifikat die Erweiterung mit einer passenden OID und einem passenden Wert hat. Wenn das Clientzertifikat beispielsweise die Erweiterung mit der OID 2.16.756.5.4.2.1.2.13.2.7 und einen Wert XB hat, gibt der Ausdruck client.ssl.client_cert.extensions.object(“2.16.756.5.4.2.1.2.13.2.7”).has_value(“XB”) TRUE zurück.
Hinweise:
− Wenn eine Erweiterung mit einer angegebenen OID einen anderen Typ als IA5 oder Integer hat, würde die Richtlinienauswertung zu einem undefinierten (UNDEF) Ereignis führen.
<certificate>.extensions.count Anzahl der im Clientzertifikat empfangenen Erweiterungen. Wenn die Anzahl der Erweiterungen im Clientzertifikat beispielsweise 16 ist, gibt expression client.ssl.client_cert.extensions.count.eq(16) TRUE zurück.

Hinweis:

Sie können einen bekannten Kurznamen anstelle von OID für Standarderweiterungen verwenden. Die Netscape-Kommentarerweiterung hat beispielsweise die OID 2.16.840.1.113730.1.13 und den Kurznamen nsComment. Sie können nsComment in der Erweiterung anstelle von 2.16.840.1.113730.1.13

``` verwenden

  • client.ssl.client_cert.extensions.has_object(nscomment).
  • client.ssl.client_cert.extensions.object(“nscomment”).has_value(“OpenSSL Generated Client Certificate”).

```

Parse SSL-Client hallo

Sie können die Hello-Nachricht des SSL-Clients analysieren, indem Sie Ausdrücke konfigurieren, die das folgende Präfix verwenden:

Präfix Beschreibung
CLIENT.SSL.CLIENT_HELLO.CIPHERS.HAS_HEXCODE Entspricht dem im Ausdruck angegebenen Hex-Code mit den Hex-Codes der Verschlüsselungssammlungen, die in der Hello-Nachricht des Clients empfangen wurden.
CLIENT.SSL.CLIENT_HELLO.CLIENT_VERSION Version, die im Hello-Nachrichtenheader des Clients empfangen wurde.
CLIENT.SSL.CLIENT_HELLO.IS_RENEGOTIATE Gibt true zurück, wenn ein Client oder Server eine Sitzungsneuverhandlung initiiert.
CLIENT.SSL.CLIENT_HELLO.IS_REUSE Gibt true zurück, wenn die Appliance die SSL-Sitzung basierend auf der in der Client-Hallo-Nachricht empfangenen Sitzungs-ID ungleich Null wiederverwendet.
CLIENT.SSL.CLIENT_HELLO.IS_SCSV Gibt true zurück, wenn die Signaling Cipher Suite Value (SCSV) -Funktion in der Hello-Nachricht des Clients angekündigt wird. Der Hexadezimalcode für Fallback SCSV ist 0x5600.
CLIENT.SSL.CLIENT_HELLO.IS_SESSION_TICKET Gibt true zurück, wenn in der Client-Hallo-Nachricht eine Sitzungsticket-Erweiterung mit einer Länge ungleich Null angekündigt wird.
CLIENT.SSL.CLIENT_HELLO.LENGTH Länge, die im Hello-Nachrichtenheader des Clients empfangen wurde.
CLIENT.SSL.CLIENT_HELLO.SNI Gibt den Servernamen zurück, der in der Erweiterung “Servername” der Hello-Nachricht des Clients empfangen wurde.
CLIENT.SSL.CLIENT_HELLO.ALPN.HAS_NEXTPROTOCOL Gibt true zurück, wenn das Anwendungsprotokoll in der Erweiterung ALPN, das in der Hello-Nachricht des Clients empfangen wurde, mit dem im Ausdruck angegebenen Protokoll übereinstimmt

Diese Ausdrücke können am Bindungspunkt CLIENTHELLO_REQ verwendet werden. Weitere Informationen finden Sie unter Bindung von SSL-Richtlinien.

Erweiterte Richtlinienausdrücke: Analysieren von SSL-Zertifikaten