上一主题: INSSL-带有 SSL 支持的 HTTP 网关

下一主题: OUT:单一主机输出网关组件

INSSLR-带有 SSL 支持的冗余 HTTP 输入网关

最新版本:2.0.2-1

INSSLR-带有 SSL 支持的冗余 HTTP 输入网关

概览

目录

系统

类别

网关

用户卷

yes

最小 内存

160M

操作系统

Linux

约束

no

功能概述

INSSLR 组件是安全 HTTP 请求的第 7 层网关。 它将请求转换为未编码的 HTTP 请求。 需要支持客户端的安全 HTTP 时,可随时使用它,但是后端处理基础架构不支持或无法支持 SSL,其中包括:

如果已配置,则 INSSLR 也支持客户端证书身份验证。 在进行 SSL 相互身份验证的情况下,客户端和服务器都将交换各自的证书和相应公钥。 客户端可以联系发布服务器证书的认证机构 (CA Technologies),并确认证书是真实的,然后进行操作。 服务器也可能这样做。

在其默认配置中,INSSLR 充当安全 HTTP 请求的第 7 层网关,同时也提供了有防火墙的入口点,让网络流量进入 CA 3Tera AppLogic 应用,可以使用 Internet 可访问的静态 IP 地址配置该应用。

在配置时,可以在故障切换模式下使用两个 INSSLR 组件来提供冗余服务。 在这种情况下,INSSLR IP 地址(通过 ip_addr 配置)仅在其中一个节点上运行,并在失败时自动转移到另一个 INSSLR 组件。 在任何给定时间,只有一个 INSSLR 组件处于活动状态。 在故障切换模式下运行时,可以将 INSSLR 配置为在以下几种模式下运行:

在冗余模式下运行时,INSSLR 在其 ctl 终端上提供一个界面,用于:

INSSLR 持续不断地监控连接到其 http 终端的后端组件的运行状况。 INSSLR 执行的运行状况检查可能包含简单的 TCP 连接检查或更复杂的 HTTP 请求(在 INSSLR 的边界上指定)。 在连接的组件失败时,INSSLR 会将错误报告给网格显示板,或者(如果处于冗余模式并配置为这样做)故障切换到备份 INSSLR 组件。

要支持需要在多个服务的单个 IP 地址中显示的应用,可将 INSSLR 配置为将非 HTTP 流量透明地定向到单独的输出终端。 对于此类连接,组件充当第 3 层防火墙/NAT 路由器。

边界

资源

资源

最小值

最大值

默认值

CPU

0.05

4

0.05

内存

160M

2G

160 M

带宽

1 Mbps

2 Gbps

200 Mbps

用于 CA 3Tera AppLogic 2.7 版本的默认内存已更改为 128 MB。 最小内存仍为 64 MB。

说明

分配给 INSSLR 的内存量不影响其吞吐量。 使用更多内存只为了支持更多并发请求,这样后端服务器可以在更长的时间段内保留请求。

终端

name

dir

协议

说明

ctl

in

HTTP

接收有关组件已被强制为主服务器/备份服务器的通知。 仅当 fover_mode 不是 none 时,该终端才接受连接。 有效的 http 请求类似于 /?action=<active|passive|kill|status>。 active/passive 选项使组件成为主动或被动组件。 注意:该操作可能不成功(如果另一个节点未处于活动状态并且无法完成故障切换),并且不返回错误。 调用应用通过发出 /?action=status 请求来检查组件的状态。 status 返回组件的当前状态 (active/passive)。 kill 可强制关闭组件,由另一个节点(如果它正在运行)接管该组件。

http

out

HTTP

在配置的外部 IP 地址接收的 HTTPS 和/或 HTTP 请求,将在标准 HTTP 端口 80 上作为简单 HTTP 请求定向到输出 http。 除客户端提供的 HTTP 头之外,转发的请求还包含以下信息头:

X-Forwarded-For:远程客户端的 IP 地址。 服务器端 CGI 脚本应使用该 IP 地址来代替远程 IP 地址。

X-Forwarded-Proto: https-如果已通过 HTTPS 连接客户端,将存在该头。 后端应用使用此头来区分 HTTP 和 HTTPS 连接。

fs

out

NFS

为用于存储密钥的本地密钥卷提供一个 nfs 挂接作为备用位置。 如果同时提供本地密钥卷和 fs 终端连接,组件将无法启动。 此终端可保持未连接状态。

aux

out

Any

其他协议(如果已配置)的输出一请参阅 l3_accept_ * 属性。

nfy

out

HTTP

每当发生故障切换时发出通知。 另请参阅 fover_nfy_prefix。 此终端可保持未连接状态。

mon

out

CCE

发送性能和资源使用统计信息。

属性

name

类型

说明

ip_addr

ip_owned

网关的外部 IP 地址。 该属性没有默认值,必须予以设置。 默认值:(空)

网络掩码

IP 地址

网络掩码。 该属性没有默认值,必须予以设置。 默认值:(空)

网关

IP 地址

传出流量的默认网关。 默认值:(空)

l7_accept

enum

该属性指定接受将哪种类型的 HTTP 流量转发到 http 终端。 有效值:https、http、both、none。 如果设置为 none,则只根据 l3_accept_* 属性重定向所有流量。
默认值:both。

l3_accept_proto

enum

指定应将哪些协议转发到 aux 终端。 有效值:none、tcp、udp、raw、all。
如果设置为 tcp 或 udp,则可使用 l3_accept_port 属性指定端口。 如果设置为 raw,则由 l3_accept_port 属性指定协议编号。 如果设置为 all,则将外部接口上的所有传入流量转发到 aux 终端。 l7_accept 属性优先于此属性一如果将 l7_accept 设置为 none 之外的值,则所有 http(s) 都将转发到 http 终端,其余流量则转到此属性指定的 aux。
默认值:none。

l3_accept_port

string

要在 l3_accept_proto 指定的协议中接受并发送到 aux 终端的逗号(或空格)分隔的协议列表;该列表中的协议可以指定为端口号或标准协议名称(例如:ftp、smtp 等等; 在指定 tcp/udp 端口或 gre、tcp 等时; 在使用原始协议时)。 还可以指定端口范围(例如 1024:10000、0:1024)。 如果留空,则转发指定协议的所有端口。
注意:如果将 l3_accept_proto 设置为 raw,则必须指定该属性,此时该属性用于指定协议编号(可以指定多个原始协议,但不允许指定协议范围(例如 20:30))
默认值:all

allowed_hosts

字符串

允许连接的主机和/或子网的列表。 使用空格或逗号分隔多个条目。 支持的格式示例:192.168.1.2 192.168.1.0/24 192.168.2.0/255.255.255.0。 默认值:0.0.0.0/0(全部允许)

key_on_fs

string

指示密钥通过 fs 终端 (on) 存储在 nfs 挂接上还是存储在本地密钥卷上 (off)。 有效值:on 和 off。 默认值:off。

cert_file

string

该网关实例应为客户端提供的服务器证书的文件名(相对于数据卷根)。 注意:如果将 l7_accept 设置为 http 或 both,则在配置的数据卷上(请参阅下面的“卷”)由此属性指定的位置必须存在有效证书,否则 INSSLR 将无法启动。
默认值:server.pem。

unsafe_ssl

string

为了与传统浏览器兼容,允许使用不安全的 ssl 密码。 默认值 disabled 将禁用 SSLv2 密码以及被视为不安全的其他一些 SSLv3 和 TLSv1 密码。 建议将该属性设置为 disabled,除非您需要对仅使用 SSLv2 的传统浏览器支持 http 会话。 在设置为 enabled 时,系统中可用的所有 SSL 密码(包括 SSLv2)都可用于 https 会话。
默认值:disabled。
版本 1.2.1 中添加了该属性。

keepalive

int

指定 INSSLR 和客户端之间的最长保持连接时间(指定以秒为单位)。 默认值:15。

timeout

int

指定 INSSLR 等待后端服务器输出的秒数。 如果后端服务器在超时秒数内未发送输出,连接将会关闭。
默认值:300

max_request_size

int

客户端请求的最大大小 (MB)。 如果应用需要处理较大的客户端上载,请增大此值。 默认值:10。

adv_config

string

在 http 和 https 侦听程序(以启用的那一个为准)的位置块内添加要插入到 nginx conf 中的原始配置。 例如:要添加自定义头,请将 adv_config 设置为 proxy_set_header myport $proxy_port;。 这样会向发送给后端服务器的请求中添加 myport: 80。 adv_config 可以设置为位置块的任何有效语句(请参阅 nginx 文档了解更多详细信息)。 可以添加用 ; 分隔的多个配置行。 如果设置,该属性必须采用有效的 nginx 语法(以 ; 结束),否则组件将无法启动。 默认值:(空)

client_cert

string

启用客户端证书身份验证。 有效值:on、ask 和 off。 如果设置为 on,则强制使用客户端证书身份验证,只有具有有效证书的客户端可以向 INSSLR 发出成功请求。 如果设置为 ask,将请求客户端提供证书,但即使未提供有效证书也会建立连接。 默认值:off。

client_depth

int

要在成链客户端证书中进行的验证深度。 如果未设置 client_cert,该属性将无效。 有效值:1-9。 默认值:1

ca_list_client

string

包含 PEM 格式的 CA Technologies 证书序列的文件。 连接时,会将所列 CA Technologies 证书的名称发送到客户端。 这会通知客户端它应发送哪个客户端证书。 可使用同一列表来验证客户端证书。 该文件名相对于已挂接的密钥卷的根目录或通过 fs 终端进行的 nfs 挂接的根目录,并且可以包含路径,例如 path/to/keys/ca_list_client.pem。 默认值:ca_list_client.pem。

cert_revocation_list

string

包含 CA 生成的证书吊销列表 (CRL) 的文件。 该列表列出了 CA 吊销的客户端证书。 将在该列表中搜索提供给 INSSLR 的每个客户端证书,如果发现该证书已被吊销,INSSLR 将向客户端发出“SSL 证书错误”响应。 该文件名与 ca_list_client 相似,也相对于已挂接的密钥卷的根目录或通过 fs 终端进行的 nfs 挂接的根目录,并且可以包含路径,例如 path/to/keys/ca_list_client.pem。 默认值:""。

运行状况检查属性

name

类型

说明

healthcheck_method

字符串

用于执行后端 Web 服务器运行状况检查的方法。
off一禁用 Healthcheck,所有其他 healthcheck_ properties 都不相关。
tcp_connect一INSSLR 连接到 Web 服务器的端口 80。 如果成功建立连接,则 INSSLR 假定 Web 服务器正在运行。 这是最快的方法,且需要的资源最少。
http_head一INSSLR 使用 HEAD 方法来请求 healthcheck_url 属性指定的文档。 此方法的速度比 tcp_connect 慢,需要 INSSLR 和 Web 服务器上的更多资源,但是更加可靠。 根据 healthcheck_regexp 指定的正则表达式匹配响应,如果找到匹配项,则认为服务器处于活动状态。
http_get一INSSLR 使用 GET 方法来请求 healthcheck_url 属性指定的文档。 这是最慢的方法,需要的资源更多,但是最可靠。 根据 healthcheck_regexp 指定的正则表达式匹配响应(头和正文),如果找到匹配项,则认为服务器处于活动状态。
默认值:off。

healthcheck_url

字符串

用于以 http_get 和 http_head 运行状况检查方法执行后端 Web 服务器运行状况检查的 URL。 可指定为完整 URL (http://host.name/file/to/check/for.php) 或相对路径 (/file/to/check/for.php)。 如果指定为 URL,INSSLR 在使用从 Host: 头中的 UR 中提取的主机名执行运行状况检查时将使用 HTTP/1.1 协议。 允许使用虚拟主机。 如果指定为相对路径,INSSLR 将使用 HTTP/1.0 协议,并检查该属性指定的文档。
默认值:/。

healthcheck_agent

字符串

用作 http_get 和 http_head 运行状况检查方法的代理标识符的字符串。
默认值:INSSLR-health-check。

healthcheck_regexp

字符串

用于 http_head 和 http_get 运行状况检查模式的测试字符串。 使用简短或不具体的字符串(例如 OK)很可能会引起误报匹配。 该字符串是 Perl 正则表达式,此处提供了有关 Perl 正则表达式的更多详细信息。
默认值:^HTTP\/1\.\d\s+200。

healthcheck_interval

Int

后端 Web 服务器运行状况检查之间的时间间隔(指定以秒为单位)。
默认值:60 秒。

healthcheck_timeout

Int

运行状况检查花费的最长时间(秒)。 如果超过超时值,则认为检查失败,并将其终止(启动新检查)。 默认值:10。

healthcheck_alert

Int

在 INSSLR 开始在网格显示板上转储错误之前的后续运行状况检查失败数。 如果设置为 0,则不向显示板报告任何错误(但仍启用运行状况检查)。 为了避免在启动/停止应用时出现误报,请勿将此值设置得太低。 如果在冗余模式下运行 INSSLR 并且要在后端服务器出现故障的情况下切换到备份节点,另请参阅 fover_on_healthcheck。 默认值:3。

高级属性(用于故障切换方案)

fover_mode

字符串

故障切换模式。 可能值有 none(无故障切换)、symmetric 和 asymmetric。
设置为 symmetric 时,INSSLR 在对称故障切换模式下运行(您需要两个 INSSLR 组件,两者都在对称故障切换模式下运行)。
设置为 asymmetric 时,INSSLR 在非对称故障切换模式下运行(您需要两个 INSSLR 组件,两者都在非对称故障切换模式下运行)。
重要信息! 在故障切换模式下运行时,两个组件都必须将 fover_mode 设置为相同的值。
默认值:none

fover_local_ip

IP 地址

要在故障切换模式下用于与其他 INSSLR 组件进行通信的本地 IP 地址。 此值可以是任意可用的 IP,包括任何保留的专用地址(由 rfc1918 定义)。 该地址仅用于监控其他 INSLLR 组件的状态。
重要信息!

应将该属性设置为与其他 INSSLR 组件中的 fover_remote_ip 属性相同的 IP。

如果已将 fover_mode 设置为 none,则可将该属性留空。
默认值:(空)

fover_remote_ip

IP 地址

用于故障切换模式的其他 INSSLR 组件的远程 IP 地址。

重要信息!

应将该属性设置为与其他 INSSLR 组件中的 fover_local_ip 属性相同的 IP。

如果已将 fover_mode 设置为 none,则可将该属性留空。
默认值:(空)

fover_netmask

IP 地址

fover_local_ip 的网络掩码。
重要信息! 如果已将 fover_mode 设置为 none,则可将该属性留空。
默认值:(空)

fover_nfy_prefix

字符串

每当发生故障切换时请求的 Url 前缀。 请求的 URL 是

http://nfy/fover_nfy_prefixfover_mode=fover_mode&state=<start|stop>&ip_addr=ip_addr&fover_local_ip=fover_local_ip&fover_remote_ip=fover_remote_ip&fover_netmask=fover_netmask

并通过 nfy 终端。
默认值:?

fover_on_healthcheck

Int

指定如果对 http 终端的运行状况检查失败,INSSLR 是否应故障切换到备份节点。 如果设置为非零值,INSSLR 将在后续的许多运行状况检查失败后进行故障切换。 为了避免在启动/停止应用时出现误报,请勿将此值设置得太低。 如果您只需要收到失败通知,另请参阅 healthcheck_alert。 默认值:0(禁用)。

名称

说明

key

一个只读数据卷(占位符),至少包含 SSL 服务器签名密钥。 该文件应为 PEM 格式。 除非已修改 cert_file 属性来指定不同名称,否则证书应位于名为 server.pem 的密钥卷的根目录中。

错误消息

在组件启动失败的情况下,系统日志可能记录以下错误消息:

错误消息

说明

错误: 找不到 SSL 服务器证书 [cert_file]

找不到 cert_file 属性指定的 SSL 服务器证书。 通过将 l7_accept 设置为 http 或 none 来提供有效证书路径或禁用安全的 HTTP 请求

错误: RSA 私钥受密码保护

SSL 服务器证书受密码保护,您需要不受密码保护的证书。

错误: client_cert 的值无效 [client_cert]

有效值包括 on、off 和 ask。

错误: client_depth 的值无效 [client_depth]

有效值为 1-9。

错误: 找不到 CA Technologies 客户端列表 [ca_list_client]

找不到 CA Technologies 客户端列表。 提供 CA Technologies 客户端列表或通过将 client_cert 设置为 off 来禁用客户端证书。

错误: 您指定了原始 l3 协议,但未指定协议编号 (l3_accept_port)

在将 l3_accept_proto 设置为 raw 时,l3_accept_port 属性是必需的。

错误: 属性 [property] 的值无效: [value]

该属性的值无效。

错误: 在冗余模式下运行所需要的最小内存为 100 MB

在冗余模式(fover_mode 不为 none)下运行时,需要的最小内存为 100 MB。

错误: 已启用对运行状况检查的故障切换,但组件不在冗余模式下运行

已启用对运行状况检查的故障切换 (fover_on_healthcheck > 0),但组件不在冗余模式下运行(fover_mode 是 none)。

错误: 当 healthcheck_method 为 http_get 或 http_head 时,必须设置 healthcheck_url

当 healthcheck_method 为 http_get 或 http_head 时,属性 healthcheck_url 不应为空。

错误: 当 healthcheck_method 为 http_get 或 http_head 时,必须设置 healthcheck_regexp

当 healthcheck_method 为 http_get 或 http_head 时,属性 healthcheck_regexp 不应为空。

错误: 已启用对运行状况检查的故障切换,但已禁用运行状况检查

已启用对运行状况检查的故障切换 (fover_on_healthcheck > 0),但未启用运行状况检查(healthcheck_method 为 off)。

错误: healthcheck_method 的值 [healthcheck_method] 无效

有效值包括 off、tcp_connect、http_get、http_head。

错误: 防火墙配置失败

无法启动防火墙,检查 l3_accept_proto、l3_accept_port、l3_accept_proto、allowed_hosts、l7_accept 值。

错误: 无法配置 Nginx

无法配置 nginx 服务,如果使用了 adv_config 属性,请检查该属性。

错误: 无法启动运行状况检查

无法启动运行状况检查,请检查 healthcheck_ 属性。

运行状况检查 URL 中存在错误: [url]

指定的 healthcheck_url 无效。

错误: 检测信号无法启动

无法启动检测信号服务。

性能

应用故障切换

INSSLR 用大约 10 秒检测其他 INSSLR 的故障。 它再用 10 秒故障切换到其他应用。 从最初发生应用故障到其他应用接管流量的总时间大约为 20 秒。

请求速率

INSSLR 每秒路由的事务数不少于 3000 个(请求/响应对),此速率受文档大小和可用网络带宽的限制。

数据吞吐量

INSSLR 路由速率不低于 7 MB/秒,受文档大小和可用网络带宽的限制

并发连接数

在使用默认内存的情况下,INSSLR 支持不少于 500 个并发的未决请求。 (未决请求是来自客户端的开放 TCP 连接,其中有一个或多个未完成的 HTTP 请求正在进行中)。 最大并发连接数取决于可用内存。 每增加 16 MB 内存可将并发的 http 事务数增加 500。 例如:如果在冗余模式下运行并且要提供 2000 个并发连接,则需要 100M+3*= 148M(以冗余模式运行的最小内存为 100M)。

通知

在以冗余模式运行(fover_mode 不是 none)时,每当 INSSLR 变为主动/被动时都将触发通知。 在活动节点启动时或每当发生故障切换时,将会触发通知(每个节点发送有关 INSSLR 变为主动/被动的通知)。

INSSLR 发送两则通知:

重要信息!

http 请求的超时是 5 秒,因此故障切换不会变慢。

运行状况检查

INSSLR 将对其 http 终端进行基本检查。 错误将会报告到网格显示板(最大速率为每 10 分钟 1 次)。 如果 INSSLR 以冗余模式运行并且 fover_on_healthcheck 设置为非零值,则后续的运行状况检查失败 fover_on_healthcheck 次后,INSSLR 会尝试故障切换到其备份组件。 如果备份 INSSLR 组件未运行或配置不正确,故障切换可能不会成功。
重要信息! 将 fover_on_healthcheck 设置为 1 会使 INSSLR 在每次运行状况检查失败时都进行故障切换,我们不总是希望出现这种情况。 使用较大的值可帮助避免误报(例如停止应用时)。

服务器证书

要使用 SSL,您需要已签名的证书以及对其进行加密的私钥。 私钥和证书应采用 PEM 格式,并放在 cert_file 属性指定的单个文件中。

生成服务器证书

CA 3Tera AppLogic 允许您生成服务器证书。

生成服务器证书

  1. 使用以下命令生成私钥:
    openssl genrsa -out privkey.pem 2048 
    

    要生成密码保护的密钥,请使用以下命令(要将密钥用于 INSSLR,您需要一个无密码的密钥。如果创建受密码保护的密钥,则需在 INSSLR 中使用它之前先删除密码)

    openssl genrsa -des3 -out privkey.pem 2048 
    
  2. 下一步您需要一个证书。 此处有两个选项-创建证书请求并由可信的 CA 签名(对此它们会向您收费),或创建用于测试目的的自签名证书(在这种情况下,请求您的站点的浏览器将发出警告,指出该证书未经可信的 CA 签名)。

    要生成证书请求,请执行以下命令:

    openssl req -new -key privkey.pem -out server.csr 
    

    在将 .csr 文件发送到可信的证书颁发机构之后,该机构将为您返回可以使用的已签名证书(.crt 文件)。

  3. 要生成自签名证书,请执行以下命令:

openssl req -new -x509 -key privkey.pem -out server.crt -days 1095

使用服务器证书

现在,可将证书和密钥放在一个文件中并在 INSSLR 中使用该文件:

cat privkey.pem  server.crt > server.pem 

如果您的密钥受密码保护,则可通过执行以下命令来删除密码:

openssl rsa -in key_with_pass.pem -out privkey.pem

使用现有的 apache+mod_ssl 服务器证书

如果某个现有证书已在 Apache 中使用,则该证书也可以在 INSSLR 中使用。 请确保密钥不受密码保护(参阅上文),并将私钥和证书按该顺序放在一个文件中。

示例:

cat privkey.pem  server.csr > server.pem 

如果使用成链的证书,还应包括颁发者提供的中间证书。 将私钥、证书和中间证书以该顺序放在一个文件中。

示例:

cat privkey.pem server.csr sf_issuing.crt > server.pem 

重要信息! 服务器签名密钥是网站的身份证明。 由于它不受密码保护,因此也容易受到攻击(组件无需您的协助就能读取该密钥)。 在数据卷上安装密钥文件时,请采取必要的措施来保护该密钥文件。 不要将相同的数据卷用于其他用途,也不要使其对 Web 服务器(例如:托管可通过 Web 访问的数据(HTML 页面、脚本等)的 Web 服务器)可见。

客户端证书

下列示例概述了如何创建 CA Technologies 私钥,并通过 OpenSSL 使用该私钥来签署自己的证书。 此操作已使用 OpenSSL 0.9.8b(与安装在 INSSLR 中的版本相同)进行测试。

创建证书颁发机构

如果您已有自己的用于创建自签名服务器证书的证书颁发机构,则可跳过此步骤并使用该证书颁发机构。 在为应用创建可信颁发机构的规范时,环境安全非常重要。

创建证书颁发机构

  1. 在安全的主机系统上,使用以下命令创建一个工作目录并在该工作目录内创建一个专用目录:
    mkdir CA 
    mkdir CA/private 
    
  2. 为证书颁发机构创建密钥长度为 2048 位的受密码保护的 RSA 密钥:
    openssl genrsa -des3 -out CA/private/CA_key.pem 2048 
    

重要信息! 证书颁发机构的私钥是信任应用的基础,因此不要将其放错地方或提供给其他方。

创建由证书颁发机构签署的客户端证书

CA 3Tera AppLogic 允许您创建由证书颁发机构签署的客户端证书。

创建由证书颁发机构签署的客户端证书

  1. 生成 RSA 私钥(要创建受密码保护的密钥,请使用 -des3 选项):
    openssl genrsa -out clientA_privkey.pem 2048 
    
  2. 基于私钥生成证书签名请求 (CSR):
    openssl req -new -key clientA_privkey.pem -out clientA_request.csr 
    
  3. 使用为 CA 生成的证书签署 CSR 中包含的证书:
    openssl x509 -req -days 365 -in clientA_request.csr -CA CA/CA_cert.pem -CAkey CA/private/CA_key.pem -CAcreateserial -out clientA.cer 
    

请注意下列各项:

openssl pkcs12 -export -in clientA.cer -inkey clientA_privkey.pem -out clientA.p12

吊销 CA 签署的客户端证书

吊销 CA 颁发的客户端证书:

下面显示了一个示例 openssl.conf,crl_reason 参数为下列其中一项:unspecified、keyCompromise、CACompromise、affiliationChanged、superseded、cessationOfOperation、certificateHold 或 removeFromCRL。 原因的匹配不区分大小写。

重新生成证书吊销列表 (CRL):

在该示例中,crl.pem 是应作为 cert_revocation_list 属性提供给 INSSLR 的文件。

用于以上示例的示例配置文件为:

      ####################################################################
      [ ca ]
      default_ca      = CA_default            # The default ca section

      ####################################################################
      [ CA_default ]

      dir             = ./CA                  # Where everything is kept
      certs           = $dir/certs            # Where the issued certs are kept
      crl_dir         = $dir/crl              # Where the issued crl are kept
      database        = $dir/index.txt        # database index file.
      #unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
      new_certs_dir   = $dir/newcerts         # default place for new certs.

      certificate     = $dir/cacert.pem       # The CA certificate
      serial          = $dir/serial           # The current serial number
      crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
      crl             = $dir/crl.pem          # The current CRL
      private_key     = $dir/private/cakey.pem# The private key
      RANDFILE        = $dir/private/.rand    # private random number file

      default_days    = 365                   # how long to certify for
      default_crl_days= 30                    # how long before next CRL
      default_md      = sha1                  # which md to use.
      preserve        = no                    # keep passed DN ordering

      policy          = policy_anything

      [ policy_anything ]
      countryName             = optional
      stateOrProvinceName     = optional
      localityName            = optional
      organizationName        = optional
      organizationalUnitName  = optional
      commonName              = supplied
      emailAddress            = optional

创建 INSSLR 使用的证书颁发机构列表文件

CA 3Tera AppLogic 允许您创建 INSSLR 使用的证书颁发机构列表文件。

创建 ca_list_client 属性标识的文件

  1. 访问以下文件:
    cat CA/private/CA_key.pem CA/CA_cert.pem > ca_list_client.pem 
    
  2. 将该文件放置在密钥卷上,或放置在通过 fs 终端挂接了 nfs 的卷上。
  3. 如果需要,也可以按照与创建客户端证书相同的方式创建 INSSLR 的服务器证书(例如:server.pem)并由创建的证书颁发机构签署。 不要对此证书使用密码。
  4. 创建 server.pem 和 ca_list_client.pem 后,可按如下方式对客户端证书身份验证进行测试:

openssl s_client -host IP-address -port 443 -showcerts -ssl3 -cert clientA.cer -key clientA_privkey.pem -state

客户端证书头

如果客户端使用 HTTPS 连接到 INSSLR,并且存在客户端证书,INSSLR 会向其发出到后端服务器的请求添加以下头:

是否使用这些头由应用来决定。 INSSLR 只是传递这些信息,而不以任何方式验证这些信息(除签名和加密的正确性以外)。

典型用法

Web 应用

要向您的应用提供 http(s) 访问,请将 http 终端直接连接到 WEB 组件。

直接连接到 WEB 组件的 http 终端

如果您需要可扩展的 Web 应用,请将 http 终端挂接到 HALB 组件。

包含连接到 HLB 组件的 http 终端的可扩展 Web 应用

Web 应用的配置

配置示例只列出了设置为非默认值的属性,而未包括网络配置(ip_addr、netmask、gateway)。

属性

说明

l7_accept

http/https/both

指定所使用的 l7 协议。 注意:如果指定 https 或 both,密钥卷应包含 cert_file 属性指定的 SSL 证书

带有附加服务的 Web 应用

如果应用中除包含 http 之外还包含其他服务,可以使用 INSSLR 向其 http 终端传递 http 流量,并将 aux 终端用于其他服务。

使用 INSSLR 将 http 流量传递给其 http 终端,并对其他服务使用 aux 终端

属性

说明

l7_accept

http/https/both

指定所使用的 l7 协议。 注意:如果指定 https 或 both,密钥卷应包含 cert_file 属性指定的 ssl 证书

l3_accept_proto

tcp

将 tcp 端口 25、110、143 重定向到 aux 终端。

l3_accept_port

25,110,143

将 tcp 端口 25、110、143 重定向到 aux 终端。

带有多个附加服务的 Web 应用

如果有多个 tcp/udp 服务和 http,则可使用 INSSLR 向其 http 终端传递 http 流量,并使用 aux 向 PS8 提供其余流量,这样会向后端服务器馈送所需流量。

使用 INSSLR 将 http 流量传递给其 http 终端,并使用 aux 将剩余流量馈送给 PS8

属性

说明

l7_accept

http/https/both

指定所使用的 l7 协议。 注意:如果指定 https 或 both,密钥卷应包含 cert_file 属性指定的 ssl 证书

l3_accept_proto

all

将未传递到 http 终端的所有 IP(icmp 除外)流量都重定向到 aux 终端。

冗余的 Web 应用

如果需要提供冗余的 Web 应用,可以复制应用并使用 INSSLR 为外部 IP 地址提供故障切换功能。

备份 Web 应用

如果您只需要一个备份应用,用于针对停机时间向用户发出通知,则可使用 INSSLR 来生成需要最少资源的备份应用。

正在使用的组件:

主应用中的 INSSLR:

属性

说明

ip_addr

1.2.3.4

应用的公共 IP 地址,主应用和备份应用的该 IP 地址必须相同。

网络掩码

255.255.255.0

应用的公共 IP 地址的网络掩码,主应用和备份应用的该网络掩码必须相同。

网关

1.2.3.254

应用的公共 IP 地址的网关,主应用和备份应用的该网关必须相同。

fover_mode

asymmetric

由于我们只想在主应用关闭时使用备份应用,因此在非对称模式下运行。

fover_local_ip

192.168.100.1

在两个应用中的 INSSLR 组件之间通信所用的专用 IP 地址。 本地 IP 地址低于远程 IP 地址,因此该组件将成为主组件,并且只要它运行,它就是主组件。

fover_remote_ip

192.168.100.2

在两个应用中的 INSSLR 组件之间通信所用的远程 IP 地址。

fover_netmask

255.255.255.0

fover_local_ip 的网络掩码。

备份应用中的 INSSLR:

属性

说明

ip_addr

1.2.3.4

应用的公共 IP 地址,主应用和备份应用的该 IP 地址必须相同。

网络掩码

255.255.255.0

应用的公共 IP 地址的网络掩码,主应用和备份应用的该网络掩码必须相同。

网关

1.2.3.254

应用的公共 IP 地址的网关,主应用和备份应用的该网关必须相同。

fover_mode

asymmetric

由于我们只想在主应用关闭时使用备份应用,因此在非对称模式下运行。

fover_local_ip

192.168.100.2

在两个应用中的 INSSLR 组件之间通信所用的专用 IP 地址。

fover_remote_ip

192.168.100.1

在两个应用中的 INSSLR 组件之间通信所用的远程 IP 地址。

fover_netmask

255.255.255.0

fover_local_ip 的网络掩码。

冗余 Web 应用(单一应用)

冗余 Web 应用(单一应用)

如果要在冗余模式下运行应用而不创建新应用,则可只将应用中的组件加倍并在冗余模式下运行这些组件。 由于这需要使用(至少)两台 Web 服务器和两个数据库组件,因此在正常模式下它们都被使用(提供可扩展性),但是其中任何一个组件均可在另一个组件出现故障时单独为应用提供服务。 如果需要更多的可扩展性,则可添加更多 Web 和数据库组件。 在此示例中,一半组件(in1、sw1、web1、db1)在一个故障切换组中运行,其余组件(in2、sw2、web2、db2)在另一个故障切换组中,因此当一台服务器崩溃时,应用可以幸免。 该应用以极低的成本提供冗余,因为所有组件(一个 INSSLR 和一个 HALB 组件除外,它们需要的资源极少)都处于活动状态,并且不需要为只在主应用出现故障时运行的备份应用花费资源。

in1

属性

说明

ip_addr

1.2.3.4

应用的公共 IP 地址,主应用和备份应用的该 IP 地址必须相同。

网络掩码

255.255.255.0

应用的公共 IP 地址的网络掩码,主应用和备份应用的该网络掩码必须相同。

网关

1.2.3.254

应用的公共 IP 地址的网关,主应用和备份应用的该网关必须相同。

fover_mode

symmetric

以对称模式运行。

fover_local_ip

192.168.100.1

在两个应用中的 INSSLR 组件之间通信所用的专用 IP 地址。

fover_remote_ip

192.168.100.2

在两个应用中的 INSSLR 组件之间通信所用的远程 IP 地址。

fover_netmask

255.255.255.0

fover_local_ip 的网络掩码。

in2

属性

说明

ip_addr

1.2.3.4

应用的公共 IP 地址,主应用和备份应用的该 IP 地址必须相同。

网络掩码

255.255.255.0

应用的公共 IP 地址的网络掩码,主应用和备份应用的该网络掩码必须相同。

网关

1.2.3.254

应用的公共 IP 地址的网关,主应用和备份应用的该网关必须相同。

fover_mode

symmetric

以对称模式运行。

fover_local_ip

192.168.100.2

在两个应用中的 INSSLR 组件之间通信所用的专用 IP 地址。

fover_remote_ip

192.168.100.1

在两个应用中的 INSSLR 组件之间通信所用的远程 IP 地址。

fover_netmask

255.255.255.0

fover_local_ip 的网络掩码。

db1

属性名

说明

auto_create

1

如果卷为空,则创建数据库。

server_id

1

主服务器 1,在远程应用中应有所不同

rpl_mode

master_and_slave

主服务器和从服务器

db2

属性名

说明

auto_create

1

如果卷为空,则创建数据库。

server_id

2

主服务器 1,在远程应用中应有所不同

rpl_mode

master_and_slave

主服务器和从服务器

冗余 Web 应用(两个相同的应用)

冗余 Web 应用(两个相同的应用)

您可以在同一网格中(但在不同的服务器上,这样一台服务器出现故障只影响一个应用);如果所使用的 IP 地址从两个网格中均可访问,则也可以在不同网格中运行两个相同的应用。 以下示例演示的应用使用一个在冗余模式下也运行的数据库组件,因此如果一个应用出现故障,另一个应用可以接管,且不会丢失数据。

正在使用的组件:

客户端请求到达 in1 网关。 该网关将请求转发给 web_lb 负载均衡器,后者将请求定向到 Web 服务器 web1 和 web2 中的一个。 Web 服务器访问 db 数据库。 db 组件连接到远程应用(这是相同的副本,唯一的差别在于 db 的 server_id 以及网络安装程序),以复制数据库。 远程应用通过 repl_in 网关连接到 db 组件,该网关配置为只允许来自远程应用的 repl_out 网关的连接。 两个应用中的 db 组件以主服务器-主服务器设置运行,因此它们的数据始终相同。

示例属性配置(未列出的属性应保留为默认值):

使用端口 8080 上的 admin 网关可以对 db 进行 Web 访问。

in1

属性

说明

ip_addr

1.2.3.4

应用的公共 IP 地址,两个应用的该 IP 地址必须相同。

网络掩码

255.255.255.0

应用的公共 IP 地址的网络掩码,两个应用的该网络掩码必须相同。

网关

1.2.3.254

应用的公共 IP 地址的网关,两个应用的该网关必须相同。

fover_mode

symmetric

以对称模式运行。

fover_local_ip

192.168.100.1

在两个应用中的 INSSLR 组件之间通信所用的专用 IP 地址。 在远程应用中将此值更改为 192.168.100.2。

fover_remote_ip

192.168.100.2

在两个应用中的 INSSLR 组件之间通信所用的远程 IP 地址。 在远程应用中将此值更改为 192.168.100.1。

fover_netmask

255.255.255.0

fover_local_ip 的网络掩码。

db

属性名

说明

auto_create

1

如果卷为空,则创建数据库。

error_log_filename

db.error

要在日志数据卷上存储的错误日志文件的名称。

error_log_level

error

错误日志记录级别

server_id

1

主服务器 1,在第二个应用中该值应该不同

rpl_mode

master_and_slave

主服务器和从服务器

重要信息! 在任何时候只有一个应用处于活动状态,另一个只为故障切换而运行并在活动应用出现故障时使用。

说明

INSSLR 支持 HTTP 1.0 和 HTTP 1.1,但如果客户端将自身标识为 MSIE,则会对此连接关闭 HTTP 1.1 支持(以避免某些版本的 MSIE 出现缺陷)。

如果客户端不是 MSIE,即使后端服务器只支持 HTTP 1.0,INSSLR 也对客户端支持 HTTP 1.1(包括对每个 TCP 会话支持多个请求的能力)。

INSSLR 支持单个外部 IP,因此只可以使用单个 SSL 证书。

组件内所用的开源和第三方软件

INSSLR 除了使用其基类 LUX5 所用的第三方开源软件包之外,还使用下列第三方/开源软件包。

软件

版本

已修改

许可

说明

PyXML

0.8.4-4

Fourthought

N/A

gnutls

1.4.1-2

LGPLv2.1

N/A

heartbeat

2.1.3-3

LGPLv2.1

N/A

heartbeat-pils

2.1.3-3

LGPLv2.1

N/A

heartbeat-stonith

2.1.3-3

LGPLv2.1

N/A

iptables

1.3.5-4

GPLv2

N/A

libgcrypt

1.2.3-1

GPLv2

N/A

libgpg-error

1.4-2

LGPLv2.1

N/A

lighttpd

1.4.18-1

BSD

N/A

nginx

0.7.62-1

BSD

N/A

sudo

1.6.8p12-10

BSD

N/A

telnet

0.17-38

BSD

N/A