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\")
|
|
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. |
|
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 KurznamennsComment
. Sie könnennsComment
in der Erweiterung anstelle von2.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.