ADC

示例 10:基于策略的 RSA 加密

RSA 算法使用 PKEY_ENCRYPT_PEM () 函数对 HTTP 预定义和用户定义的标头或正文内容进行加密。该函数仅接受 RSA 公钥(不接受私钥),并且加密数据的长度不能超过公钥的长度。当加密的数据短于密钥长度时,该算法使用 RSA_PKCS1 填充方法。

在示例场景中,该函数可在重写操作中与 B64ENCODE () 函数一起使用,将 HTTP 标头值替换为由 RSA 公钥加密的值。然后,接收者使用 RSA 私钥对正在加密的数据进行解密。

您可以使用重写策略来实现该功能。为此,必须完成以下任务:

  1. 添加 RSA 公钥作为策略表达式。
  2. 创建重写操作。
  3. 创建重写策略。
  4. 将重写策略绑定为全局策略。
  5. 验证 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-----"'
<!--NeedCopy-->

要使用 NetScaler 命令接口添加重写操作以加密 HTTP 标头请求,请执行以下操作:

add rewrite action encrypt_act insert_http_header encrypted_data

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

要使用 NetScaler 命令界面添加重写策略,请执行以下操作:

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

要使用 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
<html><body><h1>It works!</h1></body></html>* Closing connection #0

<!--NeedCopy-->

随后使用相同的数据执行此 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=
<!--NeedCopy-->

使用 GUI 进行基于策略的 RSA 加密

GUI 使您能够完成以下任务:

要使用 GUI 将 RSA 公钥添加为策略表达式,请执行以下操作

  1. 登录 NetScaler 设备并导航到配置 > AppExpert > 高级表达式
  2. 在详细信息窗格中,单击“添加”将 RSA 公钥定义为高级策略表达式。
  3. 在“创建表达式”页面中,设置以下参数:
    1. 表达式名称。高级表达式的名称。
    2. 表达式。使用表达式编辑器将 RSA 公钥定义为高级表达式。
    3. 评论。表达式的简短描述。
  4. 单击 Create(创建)。

要使用 GUI 添加重写操作以加密 HTTP 标头请求,请执行以下操作:

  1. 登录 NetScaler 设备并导航到配置 > AppExpert > 重写 > 操作
  2. 在详细信息窗格中,单击“添加”以添加重写操作。
  3. 在“创建重写操作”屏幕中,设置以下参数:
    1. 名称。重写操作的名称。
    2. 类型。选择操作类型作为 INSERT_HTTP_HEADER。
    3. 使用操作类型插入标题。输入需要重写的 HTTP 标头的名称。
    4. 表达式。与操作相关的高级策略表达式的名称。
    5. 评论。重写操作的简要描述。
  4. 单击 Create(创建)。

要使用 GUI 添加重写高级策略,请执行以下操作

  1. 登录 NetScaler 设备并导航到配置 > AppExpert > 重写 > 策略
  2. 在“重写策略”页面中,单击“添加”以添加重写策略。
  3. 在“创建重写策略”页面中,设置以下参数:
    1. 名称。重写策略的名称。
    2. 操作。如果请求或响应与此重写策略相匹配,则要执行的重写操作的名称。
    3. 记录操作。请求与此策略匹配时使用的消息日志操作的名称。
    4. 未定义结果操作。策略评估结果未定义时要执行的操作。
    5. 表达式。触发操作的高级策略表达式的名称。
    6. 评论。重写操作的简要描述。
  4. 单击 Create(创建)。

要使用 GUI 全局绑定重写策略,请执行以下操作

  1. 登录 NetScaler 设备并导航到配置 > AppExpert > 重写 > 策略
  2. 在“重写策略”屏幕中,选择要绑定的重写策略,然后单击“策略管理器”。
  3. 在“重写策略管理器”页面的“绑定点”部分中,设置以下参数:
    1. 绑定点。将绑定点选择为“默认全局”。
    2. 协议。选择协议类型为 HTTP。
    3. 连接类型。将连接类型选择为请求。
    4. 单击“继续”查看“策略绑定”部分。
    5. 策略绑定 部分中,选择重写策略并设置绑定参数。
  4. 单击绑定
示例 10:基于策略的 RSA 加密