例10:ポリシーベースのRSA暗号化
RSA アルゴリズムは PKEY_ENCRYPT_PEM () 関数を使用して、HTTP の事前定義およびユーザー定義のヘッダーまたは本文コンテンツを暗号化します。この関数は RSA 公開鍵のみを受け入れ (秘密鍵は受け付けません)、暗号化されたデータは公開鍵の長さを超えることはできません。暗号化されるデータがキーの長さよりも短い場合、アルゴリズムはRSA_PKCS1のパディング方式を使用します。
サンプルシナリオでは、この関数を B64ENCODE () 関数と書き換えアクションで使用して、HTTP ヘッダー値を RSA 公開鍵で暗号化された値に置き換えることができます。暗号化中のデータは、受信者によって RSA 秘密鍵を使用して復号化されます。
この機能は、書き換えポリシーを使用して実装できます。そのためには、次のタスクを完了する必要があります。
- RSA 公開鍵をポリシー表現として追加します。
- 書き換えアクションを作成します。
- 書き換えポリシーを作成します。
- リライトポリシーをグローバルとしてバインドします。
- RSA 暗号化の検証
NetScalerコマンドインターフェイスを使用したポリシーベースのRSA暗号化
NetScalerコマンドインターフェイスを使用してポリシーベースのRSA暗号化を構成するには、次のタスクを完了します。
NetScalerコマンドインターフェイスを使用してRSA公開鍵をポリシー表現として追加するには:
add policy expression pubkey '"-----BEGIN RSA PUBLIC KEY-----MIGJAoGBAKl5vgQEj73Kxp+9yn1v5gPR1pnc4oLM2a0kaWwBOsB6rzCIy6znwnvwCY1xRvQhRlJSAyJbloL7wZFIJ2FOR8Cz+8ZQWXU2syG+udi4EnWqLgFYowF9zK+o79az597eNPAjsHZ/C2oL/+6qY5a/f1z8bQPrHC4GpFfAEJhh/+NnAgMBAAE=-----END RSA PUBLIC KEY-----"'
NetScalerコマンドインターフェイスを使用してHTTPヘッダーリクエストを暗号化するアクションを書き換えるには:
add rewrite action encrypt_act insert_http_header encrypted_data
HTTP.REQ.HEADER("data_to_encrypt").PKEY_ENCRYPT_PEM(pubkey).B64ENCODE
NetScalerコマンドインターフェイスを使用して書き換えポリシーを追加するには:
添加修改政策encrypt_pol HTTP.REQ.HEADER (data_to_encrypt").EXISTS' encrypt_act
NetScalerコマンドインターフェイスを使用してリライトポリシーをグローバルにバインドするには:
bind rewrite global encrypt_pol 10 -type RES_DEFAULT
NetScalerコマンドインターフェイスを使用してRSA暗号化を検証するには:
>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 It works!
* Closing connection #0
同じ暗号化データを使用してこの curl コマンドを後から実行すると、暗号化されたデータが実行ごとに異なることがわかります。これは、パディングが暗号化するデータの先頭にランダムなバイトを挿入するため、暗号化されたデータが毎回異なるためです。
>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=
GUI によるポリシーベースの RSA 暗号化
GUI では、次のタスクを実行できます。
GUI を使用して RSA 公開鍵をポリシー表現として追加するには:
- NetScalerアプライアンスにサインインし、[構成]>[AppExpert]>[高度な表現]に移動します。
- 詳細ペインで [追加] をクリックして、RSA 公開鍵を高度なポリシー表現として定義します。
- エクスプレッションの作成ページで、次のパラメータを設定します。
- エクスプレッション名。拡張エクスプレッションの名前。
- 式。RSA 公開鍵をエクスプレッションエディタを使用して高度なエクスプレッションとして定義します。
- コメント。表現の簡単な説明。
- [作成]をクリックします。
GUI を使用して HTTP ヘッダーリクエストを暗号化するアクションを書き換えるには:
- NetScalerアプライアンスにサインインし、[ **構成] > [AppExpert] > [書き換え] > [アクション] に移動します。**
- 詳細ウィンドウで、[追加] をクリックして書き換えアクションを追加します。
- 「書き換えアクションの作成」画面で、次のパラメータを設定します。
- Name:書き換えアクションの名前。
- タイプ。アクションタイプを INSERT_HTTP_HEADER として選択します。
- アクションタイプを使用してヘッダーを挿入します。書き換えが必要な HTTP ヘッダーの名前を入力します。
- 式。アクションに関連するアドバンスポリシー表現の名前。
- コメント。書き換えアクションの簡単な説明。
- [作成]をクリックします。
GUI を使用してリライト・アドバンスド・ポリシーを追加するには:
- NetScalerアプライアンスにサインインし、[ **構成] > [AppExpert] > [リライト] > [ポリシー] に移動します。**
- 「リライトポリシー」ページで、「追加」をクリックしてリライトポリシーを追加します。
- 「リライトポリシーの作成」ページで、次のパラメータを設定します。
- Name:リライトポリシーの名前。
- アクション。リクエストまたはレスポンスがこのリライトポリシーに一致した場合に実行するリライトアクションの名前。
- アクションをログに記録します。リクエストがこのポリシーに一致する場合に使用するメッセージログアクションの名前。
- 未定義の結果のアクション。ポリシー評価の結果が未定義の場合に実行するアクション。
- 式。アクションをトリガーする高度なポリシー表現の名前。
- コメント。書き換えアクションの簡単な説明。
- [作成]をクリックします。
GUI を使用してリライトポリシーをグローバルにバインドするには:
- NetScalerアプライアンスにサインインし、[ **構成] > [AppExpert] > [リライト] > [ポリシー] に移動します。**
- 「リライトポリシー」画面で、バインドするリライトポリシーを選択し、「ポリシーマネージャ」をクリックします。
- 「ポリシーマネージャーの書き換え」ページの「バインドポイント」セクションで、次のパラメータを設定します。
- バインドポイント。バインディングポイントをデフォルトグローバルとして選択します。
- プロトコル。プロトコルタイプを HTTP として選択します。
- 接続タイプ。接続タイプをリクエストとして選択します。
- 「続行」をクリックすると、「ポリシーバインディング」セクションが表示されます。
- 「ポリシー・バインディング」セクションで、リライト・ポリシーを選択し、バインド・パラメータを設定します。
- [Bind]をクリックします。