sslTunnel 文档

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

ssltunnel 拓扑图

安装

命令行

配置文件

# sslTunnel 2 配置文件。

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

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

    # 指定运行服务的用户组。默认为空,表示使用 "user" 指定的用户 (如果不为空) 所属的组,或者当前用户
    # (如果 "user" 为空) 所属的组。如果未指定 --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:表示握手期间请求客户端发送证书,但不强求客户端发送证书。如果客户端确
                #              实发送了证书,则该证书必须有效。
                #  - required:表示握手期间请求客户端发送证书,并且客户端至少需要发送一个有效的证书。
                "client-auth": "required",

                # 决定服务器如何验证客户端证书:
                #  - cert:依据下面 "ca" 中指定的证书仅验证客户端证书的末端 (叶) 证书。
                #  - 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" 中指定的根 CA 证书开始验证服务器证书链。
                "server-verify": "ca",

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

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

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

                ],

                # 可选的定制配置。参见 定制配置
                "custom": ""

            }

        },

        # 其它隧道定义。
        ...

    ],

    # 日志定义。
    "log": {

        # 指定日志文件,如果是相对路径,则以该配置文件所在目录为基准。可指定为 "stderr""stdout"。
        # 此外,可在日志文件名中使用 "%y""%m""%d""%w" 占位符,以实现日志轮转功能。
        # - %y:4 位数年份 (例如: 2026)
        # - %m:两位数月份,带前导零 (例如:01-12)
        # - %d:两位数日期,带前导零 (例如:01-31)
        # - %w:两位数年内周数,带前导零 (例如:01-53)
        "file": "stderr",

        # 日志级别,用于决定哪些日志会被写入日志文件。当设定特定的日志级别时,该级别将作为最低阈值,
        # 这意味着该级别及其之上 (即更严重) 的所有级别均会被记录下来,而低于该级别的所有日志内容则会
        # 被丢弃或过滤掉。
        # - 0:关键 (最高/最严重级别)
        # - 1:错误
        # - 2:警告
        # - 3:消息
        # - 4:调试 (最低/最详细级别)
        "level": 3,

        # 指定日志条目中时间戳所使用的时区,例如 "+0800", "-0300"。默认为空表示使用本地时区。
        "timezone": "+0000",

        # 日志格式, 定义每个日志条目的结构,具体涵盖了应包含哪些数据,呈现的顺序以及所使用的分隔符.
        # 在格式字符串中,可以使用以下以 "%" 开头的指令:
        # - %p:日志级别描述 (关键, 错误, 警告, 消息, 调试)
        # - %t{.....}:日志条目的时间戳。花括号内的字符串用于指定时间格式,遵循 Go 语言的时间格式化
        #   规范 (例如:"%t{2006-01-02 15:04:05}")
        # - %e:指定以显示错误信息(如果有的话,它将在新的一行从 %e 所在的列开始显示)
        # - %m:日志消息
        "format": "%p %e[%t{2006-01-02 15:04:05}] %m",

        # 日志的最大缓存大小,决定程序在必须写入日志文件之前,能够在临时内存中存储多少条日志条目。
        "max-cache": 10,

        # 指定在轮转日志时,是否压缩旧日志文件以节省空间 (采用 gzip 格式)。
        "compress": true,

        # 指定日志消息的语言 (例如,"en-us""zh-cn"), 默认为空,表示使用命令行 "--language" 选项的
        # 值。
        "language": ""

    }

}

定制配置

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

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

可用的设置项目包括:


macSvn

支持

政策

📊 访问报告   📈 访问曲线   🧾 许可信息   🔑 创建许可