ADC

Beispiel 10: Policy-basierte RSA-Verschlüsselung

Der RSA-Algorithmus verwendet die Funktion PKEY_ENCRYPT_PEM (), um vordefinierte und benutzerdefinierte HTTP-Header- oder Textinhalte zu verschlüsseln. Die Funktion akzeptiert nur öffentliche RSA-Schlüssel (keine privaten Schlüssel) und die verschlüsselten Daten dürfen nicht länger als die Länge des öffentlichen Schlüssels sein. Wenn die zu verschlüsselnden Daten kürzer als die Schlüssellänge sind, verwendet der Algorithmus die Füllmethode RSA_PKCS1.

In einem Beispielszenario kann die Funktion zusammen mit der Funktion B64ENCODE () in einer Rewrite-Aktion verwendet werden, um einen HTTP-Header-Wert durch einen Wert zu ersetzen, der mit einem öffentlichen RSA-Schlüssel verschlüsselt wurde. Die verschlüsselten Daten werden dann vom Empfänger mithilfe des privaten RSA-Schlüssels entschlüsselt.

Sie können die Funktion mithilfe einer Rewrite-Richtlinie implementieren. Dazu müssen Sie die folgenden Aufgaben ausführen:

  1. Fügen Sie den öffentlichen RSA-Schlüssel als Richtlinienausdruck hinzu.
  2. Erstellen Sie eine Rewrite-Aktion.
  3. Erstellen Sie eine Rewrite-Richtlinie.
  4. Binden Sie die Rewrite-Richtlinie als global ein.
  5. RSA-Verschlüsselung überprüfen

Richtlinienbasierte RSA-Verschlüsselung mit der NetScaler Befehlszeilenschnittstelle

Führen Sie die folgenden Aufgaben aus, um die richtlinienbasierte RSA-Verschlüsselung mit der NetScaler Befehlszeilenschnittstelle zu konfigurieren.

So fügen Sie mit der NetScaler Befehlszeilenschnittstelle einen öffentlichen RSA-Schlüssel als Richtlinienausdruckhinzu:

add policy expression pubkey '"-----BEGIN RSA PUBLIC KEY-----MIGJAoGBAKl5vgQEj73Kxp+9yn1v5gPR1pnc4oLM2a0kaWwBOsB6rzCIy6znwnvwCY1xRvQhRlJSAyJbloL7wZFIJ2FOR8Cz+8ZQWXU2syG+udi4EnWqLgFYowF9zK+o79az597eNPAjsHZ/C2oL/+6qY5a/f1z8bQPrHC4GpFfAEJhh/+NnAgMBAAE=-----END RSA PUBLIC KEY-----"'
<!--NeedCopy-->

So fügen Sie eine Aktion zum Verschlüsseln einer HTTP-Header-Anforderung mit der NetScaler Befehlszeilenschnittstellehinzu:

add rewrite action encrypt_act insert_http_header encrypted_data

HTTP.REQ.HEADER("data_to_encrypt").PKEY_ENCRYPT_PEM(pubkey).B64ENCODE

So fügen Sie Rewrite-Richtlinie mit der NetScaler Befehlszeilenschnittstellehinzu:

add rewrite policy encrypt_pol 'HTTP.REQ.HEADER("data_to_encrypt").EXISTS' encrypt_act
<!--NeedCopy-->

So binden Sie die Umschreibungsrichtlinie global mit der NetScaler Befehlszeilenschnittstelle:

bind rewrite global encrypt_pol 10 -type RES_DEFAULT

So überprüfen Sie die RSA-Verschlüsselung mit der NetScaler Befehlszeilenschnittstelle:

>curl -v -H "data_to_encrypt: Now is the time that tries men's souls" http://10.217.24.7/`

* About to connect() to 10.217.24.7 port 80 (#0)

*  Trying 10.217.24.7...

*  connected

*  Connected to 10.217.24.7 (10.217.24.7) port 80 (#0)

> GET / HTTP/1.1
> User-Agent: curl/7.24.0 (amd64-portbld-freebsd8.4) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.3
> Host: 10.217.24.7
> Accept: \*/\*
> data_to_encrypt: Now is the time that tries men's souls
>
< HTTP/1.1 200 OK
< Date: Mon, 09 Oct 2017 05:22:37 GMT
< Server: Apache/2.2.24 (FreeBSD) mod_ssl/2.2.24 OpenSSL/0.9.8y DAV/2
< Last-Modified: Thu, 20 Feb 2014 20:29:06 GMT
< ETag: "6bd9f2-2c-4f2dc5b570880"
< Accept-Ranges: bytes
< Content-Length: 44
< Content-Type: text/html
< encrypted_data: UliegKBJqZd7JdaC49XMLEK1+eQN2rEfevypW91gKvBVlaKM9N9/C2BKuztS99SE0xQaisidzN5IgeIcpQMn+CiKYVlLzPG1RuhGaqHYzIt6C8A842da7xE4OlV5SHwScqkqZ5aVrXc3EwtUksna7jOLr40aLeXnnB/DB11pUAE=
<
* Connection #0 to host 10.217.24.7 left intact
<html><body><h1>It works!</h1></body></html>* Closing connection #0

<!--NeedCopy-->

Die nachfolgende Ausführung dieses Curl-Befehls mit denselben zu verschlüsselnden Daten zeigt, dass die verschlüsselten Daten bei jeder Ausführung unterschiedlich sind. Dies liegt daran, dass das Padding zufällige Byte am Anfang der zu verschlüsselnden Daten einfügt, wodurch die verschlüsselten Daten jedes Mal anders sind.

>curl -v -H "data_to_encrypt: Now is the time that tries men's souls" http://10.217.24.7/`

< encrypted_data: DaOjtl1Pl4DlQKf58MMeL4cFwFvZwhjMqv5aUYM5Iyzk4UpwIYhpRvgTNu2lXEVc1H0tcR1EGC/ViQncLc4EbTurCWLbzjce3+fknnMmzF0lRT6ZZXWbMvsNFOxDA1SnuAgwxWXy/ooe9Wy6SYsL2oi1sr5wTG+RihDd9zP+P14=

>curl -v -H "data_to_encrypt: Now is the time that tries men's souls" http://10.217.24.7/

. . .

< encrypted_data: eej6YbGP68yHn48qFUvi+fkG+OiO8j3yYLScrRBU+TPQ8WeDVaWnDNAVLvL0ZYHHAU1W2YDRYb+8cdKHLpW36QbI6Q5FfBuWKZSI2hSyUvypTpCoAYcHXFv0ns+tRtg0EPNNj+lyGjKQWtFi6K8IXXISoDy42FblKIlaA7gEriY=
<!--NeedCopy-->

Richtlinienbasierte RSA-Verschlüsselung mithilfe der GUI

Mit der GUI können Sie die folgenden Aufgaben ausführen:

Um den öffentlichen RSA-Schlüssel als Richtlinienausdruck mithilfe der GUI hinzuzufügen, gehen Sie wie folgt vor:

  1. Melden Sie sich bei der NetScaler-Appliance an und navigieren Sie zuConfigurations>AppExpert > Advanced Expressions.
  2. Klicken Sie im Detailbereich auf Hinzufügen, um einen öffentlichen RSA-Schlüssel als erweiterten Richtlinienausdruck zu definieren.
  3. Stellen Sie auf der Seite „Ausdruck erstellen“ die folgenden Parameter ein:
    1. Name des Ausdrucks. Name des erweiterten Ausdrucks.
    2. Expression. Definieren Sie den öffentlichen RSA-Schlüssel mit dem Ausdruckseditor als erweiterten Ausdruck.
    3. Kommentare. Eine kurze Beschreibung des Ausdrucks.
  4. Klicken Sie auf Erstellen.

Um eine Rewrite-Aktion hinzuzufügen, um eine HTTP-Header-Anfrage mithilfe der GUI zu verschlüsseln:

  1. Melden Sie sich bei der NetScaler-Appliance an und navigieren Sie zuConfigurations>AppExpert > Rewrite** > Actions.**
  2. Klicken Sie im Detailbereich auf Hinzufügen, um eine Neuschreibaktion hinzuzufügen.
  3. Stellen Sie im Bildschirm „Rewrite-Aktion erstellen “ die folgenden Parameter ein:
    1. Name. Name der Rewrite-Aktion.
    2. Typ. Wählen Sie den Aktionstyp als INSERT_HTTP_HEADER aus.
    3. Verwenden Sie den Aktionstyp, um eine Kopfzeile einzufügen. Geben Sie den Namen des HTTP-Headers ein, der neu geschrieben werden muss.
    4. Expression. Name des erweiterten Richtlinienausdrucks, der der Aktion zugeordnet ist.
    5. Kommentare. Eine kurze Beschreibung der Rewrite-Aktion.
  4. Klicken Sie auf Erstellen.

Gehen Sie wie folgt vor, um mithilfe der GUI eine erweiterte Rewrite-Richtlinie hinzuzufügen:

  1. Melden Sie sich bei der NetScaler-Appliance an und navigieren Sie zuConfigurations>AppExpert > Rewrite** > Policies.**
  2. Klicken Sie auf der Seite Richtlinien neu schreiben auf Hinzufügen, um eine Richtlinie zum Umschreiben hinzuzufügen.
  3. Stellen Sie auf der Seite Create Rewrite Policy die folgenden Parameter ein:
    1. Name. Name der Rewrite-Richtlinie.
    2. Aktion. Name der Umschreibeaktion, die ausgeführt werden soll, wenn die Anforderung oder Antwort dieser Umschreiberichtlinie entspricht.
    3. Aktion protokollieren. Name der Nachrichtenprotokollaktion, die verwendet werden soll, wenn eine Anfrage dieser Richtlinie entspricht.
    4. Aktion mit undefiniertem Ergebnis. Durchzuführende Maßnahmen, wenn das Ergebnis der politischen Bewertung nicht definiert ist.
    5. Expression. Name des erweiterten Richtlinienausdrucks, der die Aktion auslöst.
    6. Kommentare. Eine kurze Beschreibung der Rewrite-Aktion.
  4. Klicken Sie auf Erstellen.

Um die Rewrite-Richtlinie global zu binden, verwenden Sie die GUI:

  1. Melden Sie sich bei der NetScaler-Appliance an und navigieren Sie zuConfigurations>AppExpert > Rewrite** > Policies.**
  2. Wählen Sie im Fenster Richtlinien neu schreiben eine Rewrite-Richtlinie aus, die Sie binden möchten, und klicken Sie auf PolicyManager.
  3. Stellen Sie auf der Seite Rewrite Policy Manager im Abschnitt Bind Points die folgenden Parameter ein:
    1. Bind-Punkt. Wählen Sie den Bindungspunkt als Standard Global aus.
    2. Protokoll. Wählen Sie den Protokolltyp als HTTP aus.
    3. Art der Verbindung. Wählen Sie den Verbindungstyp als Anfrage aus.
    4. Klicken Sie auf Weiter, um den Abschnitt Richtlinienbindung aufzurufen.
    5. Wählen Sie im Abschnitt Richtlinienbindung die Rewrite-Richtlinie aus und legen Sie die Bindungsparameter fest.
  4. Klicken Sie auf Bind.
Beispiel 10: Policy-basierte RSA-Verschlüsselung