sslTunnel 文档

sslTunnel 是用于保护 TCP 客户端和服务器之间所传输数据的免费软件。它被设计为 SSL 加密管道,使用 TLS/SSL 加密所传输的消息并允许安全地通信,且无需修改 TCP 连接两侧所运行的程序。

ssltunnel 拓扑图

安装

命令行

配置文件

# sslTunnel 配置文件。
# 启动 ssltunnel 的用户必须具有该配置文件的读取权限。下面设置的运行 ssltunnel 的用户不需要拥有该文件的任
# 何权限。通常使用 root 用户启动 ssltunnel,因此应将配置文件的所有者和组设置为 root 用户和组,并将其权限
# 设置为 400。
{

    # 指定运行服务的用户。如果未指定 --foreground 选项,ssltunnel 运行后将派生一个属于该用户的新进程,然
    # 后终止当前进程。该用户不需要拥有该配置文件、证书文件和证书私钥文件的任何权限。
    "user": "ssltunnel",

    # 指定运行服务的用户组。如果未指定 --foreground 选项,ssltunnel 运行后将派生一个属于该用户组的新进程,
    # 然后终止当前进程。
    "group": "ssltunnel",

    # 隧道定义
    "tunnels": [

        # 首个隧道定义
        {

            # 监听设置:
            # - 当用作 SSL 隧道服务器时:监听 SSL 隧道客户端的传入连接。
            # - 当用作 SSL 隧道客户端时:监听下游应用客户端的传入连接。
            "listen": {

                # 隧道监听地址 (包括 IPv4 和 IPv6,空白表示监听所有 IPv4 和 IPv6 地址,IPv6 不需
                # 要方括号)。
                "address": "127.0.0.1",

                # 隧道监听端口。
                "port": 4120,

                # 服务器证书。
                # - 当用作 SSL 隧道服务器时:指定服务器证书以监听 ssltunnel 客户端传入的加密连接。如
                #   果允许使用多个域名连接服务器,则需要为每个域名指定一个证书 (也可以使用泛域名证书和
                #   多域名证书)。
                # - 当用作 SSL 隧道客户端时:不指定服务器证书以便监听应用客户端传入的未加密连接。剩余的
                #   监听设置 ("client-auth""client-verify""ca""custom") 将被忽略。
                "certs": [

                    # 首个证书。
                    {

                        # 证书文件,或者完整的证书链文件的路径 (如果是相对路径,则以该配置文件所在目录
                        # 为基准)。启动 ssltunnel 的用户必须具有该文件的读取权限。前面所设置的运行
                        # ssltunnel 的用户不需要拥有该文件的任何权限。
                        "cert": "...",

                        # 私钥文件路径 (如果是相对路径,则以该配置文件所在目录为基准)。启动 ssltunnel
                        # 的用户必须具有该文件的读取权限。前面所设置的运行 ssltunnel 的用户不需要拥有
                        # 该文件的任何权限。通常使用 root 用户启动 ssltunnel,因此需将证书私钥文件的
                        # 所有者和组设置为 root 用户和组,并将其权限设置为 400。
                        "key": "...",

                        # 如果证书私钥已加密则指定加密短语,否则启动 ssltunnel 时会提示用户输入加密短
                        # 语。
                        "passphrase": "..."

                    },

                    # 其它证书。
                    ...

                ],

                # 指定服务器的 TLS 客户端身份验证策略。
                #  - no:       表示握手期间不请求客户端发送证书,如果发送任何证书,则不会对其进行验证。
                #  - request:  表示握手期间请求客户端发送证书,但不强求客户端发送任何证书。
                #  - any:      表示握手期间请求客户端发送证书,并且客户端至少需要发送一个证书,但不要
                #              求该证书有效。
                #  - optional: 表示握手期间请求客户端发送证书,但不强求客户端发送证书。如果客户端确实
                #              发送了证书,则该证书必须有效。
                #  - verify:   表示握手期间请求客户端发送证书,并且客户端至少需要发送一个有效的证书。
                "client-auth": "verify",

                # 决定服务器如何验证客户端证书:
                #  - cert: 依据下面 "ca" 中指定的证书仅验证客户端证书的末端 (叶) 证书。
                #  - ca:   从根 CA 证书开始验证客户端证书链。
                "client-verify": "ca",

                # 证书颁发机构文件,指定一个或多个证书,用于验证客户端证书。如果使用相对路径,则以该配置
                # 文件所在的目录为基准。如果前面的 "client-auth" 设置为 "optional""verify",
                # 则该项必需指定。启动 ssltunnel 的用户必须具有读取这些文件的权限。前面所设置的运行
                # ssltunnel 的用户不需要这些文件的任何权限。
                # - 如果前面 "client-verify" 设置为 "cert":此处指定所有客户端的客户端证书,仅需末端
                #   (叶) 证书。可以指定多个证书文件,每个文件可以包含多个末端 (叶) 客户端证书。
                # - 如果前面 "client-verify" 设置为 "ca":此处指定所有客户端证书从根 CA 证书开始的颁
                #   发证书链。可以指定多个证书链文件。
                "ca": [

                    # 首个证书或证书链文件。
                    "...",

                    # 其它证书或证书链文件。
                    ...

                ],

                # 定制配置。参见 定制配置
                "custom": "..."

            },

            # 连接设置:
            # - 当用作 SSL 隧道服务器时:连接到上游的应用服务器。
            # - 当用作 SSL 隧道客户端时:连接到 SSL 隧道服务器。
            "connect": {

                # 要连接的目标地址,可以是 IP 地址(包括 IPv4 和 IPv6,IPv6 不需要方括号),也可以是
                # 域名。如果要连接目标服务器是 TLS/SSL 服务器,通常需要在这里指定域名,否则需要在下面
                # 的 "server-name" 中指定域名,以便服务器提供合适的证书。
                "address": "domain.com",

                # 要连接的目标端口。
                "port": 3690,

                # 连接超时 (秒),默认值为 10 秒。
                "timeout": 10,

                # 指定所连接的服务器是否是 TLS/SSL 加密服务器。如果设置为 false,则剩余的连接设置
                # ("server-name""certs""server-verify""ca""custom") 将被忽略。
                # - 当用作 SSL 隧道服务器时:设置为 false 以便连接上游的应用服务器。
                # - 当用作 SSL 隧道客户端时:设置为 true 以便连接 SSL 隧道服务器。
                "tls": true,

                # 指定客户端所发送的服务器名称标识。如果未设置,则使用前面 "address" 的设置值。如果
                # "address" 设置为 IP 地址,则该项是必需的,且值必须与服务器最少一个证书相匹配。
                "server-name": "domain.com",

                # 如果服务器需要验证客户端证书,则指定客户端证书。
                "certs": [

                    # 首个证书。
                    {

                        # 证书文件,或者完整的证书链文件的路径 (如果是相对路径,则以该配置文件所在目录
                        # 为基准)。启动 ssltunnel 的用户必须具有该文件的读取权限。前面所设置的运行
                        # ssltunnel 的用户不需要拥有该文件的任何权限。
                        "cert": "...",

                        # 私钥文件路径 (如果是相对路径,则以该配置文件所在目录为基准)。启动 ssltunnel
                        # 的用户必须具有该文件的读取权限。前面所设置的运行 ssltunnel 的用户不需要拥有
                        # 该文件的任何权限。通常使用 root 用户启动 ssltunnel,因此需将证书私钥文件的
                        # 所有者和组设置为 root 用户和组,并将其权限设置为 400。
                        "key": "...",

                        # 如果证书私钥已加密则指定加密短语,否则启动 ssltunnel 时会提示用户输入加密短
                        # 语。
                        "passphrase": "..."

                    },

                    # 其它证书。
                    ...

                ],

                # 确定客户端如何验证服务器证书:
                #  - skip: 不验证服务器证书,下面的 "ca" 设置将被忽略。
                #  - cert: 仅依据下面 "ca" 设置中所指定的证书验证服务器证书的末端 (叶) 证书。
                #  - ca:   从根 CA 证书开始验证服务器证书链。
                "server-verify": "ca",

                # 证书颁发机构文件,指定一个或多个证书,用于验证服务器证书。如果使用相对路径,则以该配置
                # 文件所在的目录为基准。如果前面的 "server-verify" 设置为 "cert""ca",则该项必
                # 需指定。启动 ssltunnel 的用户必须具有读取这些文件的权限。前面所设置的运行 ssltunnel
                # 的用户不需要这些文件的任何权限。
                # - 当前面的 "server-verify" 设置为 "cert":此处指定服务器证书的末端 (叶) 证书。
                # - 当前面的 "server-verify" 设置为 "ca":此处指定服务器证书的签发证书链文件 (从根
                #   CA 证书开始)。
                "ca": [

                    # 首个证书或证书链文件。
                    "...",

                    # 其它证书或证书链文件。
                    ...

                ],

                # 定制配置。参见 定制配置
                "custom": "..."

            }

        },

        # 其它隧道定义
        ...

    ]

}

定制配置

在配置文件中,可选的,可以为每个隧道的侦听设置和连接设置分别指定一个自定义配置。 自定义配置的值是一个字符串,可以包含多个以分号分隔的设置项。每个设置项都包含以冒号分隔的名称和值。 例如:

"custom": "MinVersion: tls1.2; CipherSuites: RSA-RC4_128_SHA,ECDHE_RSA-RC4_128_SHA; CurvePreferences: P256; SessionTicketsDisabled: true"

可用的设置项目包括:


macSvn

支持

政策