当前位置: 首页 > news >正文

Nginx基于SSL的TCP代理

Nginx可以通过代理模块实现上游服务器SSL/TLS协议的连接,同时Nginx 还通过模块 ngx_stream_ssl_module 提供了基于 SSL/TLS 协议的 TCP 连接监听。

Nginx 还可以把 SSL 证书部署在 Nginx 服务器上,这就减轻了后端上游服务器的 CPU 运算量并实现 SSL 证书的统一管理和维护。

ngx_stream_ssl_module 模块默认不会被构建,这就需要在编译的时候通过--with-stream_ssl_module参数进行启用。

ngx_stream_ssl_module模块相关配置参数

指令名称指令值格式默认值指令说明
ssl_protocolsSSLv2TLSv1TLSv1.2TLSv1 TLSv1.1 TLSv1.2设置使用的 SSL 协议版本
ssl_certificatefile--PEM 格式的 SSL 证书文件,可自建或由 CA 机构颁发
ssl_certificate_keyfile--PEM 格式的 SSL 证书私钥文件,可自建或由 CA 机构颁发
ssl_password_filefile--存放 SSL 证书私钥文件的密码文件,一个密码一行,有多个密码时,Nginx 会依次尝试
ssl_ciphersciphersHIGH:!aNULL:!MD5设置 SSL TCP 建立连接时用于协商使用的加密算法组合,也称为密码套件。指令值内容为 openssl 的密码套件名称,多个套件名称由":" 分隔
ssl_prefer_server_cipherson 或 offoff是否启用 SSLv3 和 TLSv1 协议在 SSL TCP 连接时优先使用服务端设置的密码套件
ssl_dhparamfile--DH 密钥交换的 Diffie-Hellman 参数文件
ssl_ecdh_curvecurveauto配置 SSL 加密时使用椭圆曲线 DH 密钥交换的曲线参数,多个参数使用 ":" 分隔,ecdh 是 Elliptic-Curve 和 Diffie-Hellman 的缩写,指令值为 auto 时,配置的曲线参数是 prime256v1
ssl_session_cacheoff 或 none 或 builtin[size]noneSSL TCP 会话缓存设置
ssl_session_ticketson 或 offon是否启用 SSL TCP 会话缓存 session ticket 机制,指令值为 off 时,使用 session ID 会话缓存机制
ssl_session_ticket_keyfile--指定会话凭证密钥文件,用以签名 Nginx 间共现 session ticket 共享,否则 Nginx 会随机生成一个会话凭证密钥
ssl_session_timeouttime5m设置客户端可用会话缓存的超时时间
ssl_verify_clienton 或 off 或 optional 或 optional_no_caoff设置是否启用对客户端证书验证功能,指令值为 on 时,启用验证;指令值为 optional 时,如果接收到客户端证书则进行验证;指令值为 optional_no_ca 时,若接收到客户端证书,则仍用其做客户端验证,但不进行证书链验证,验证结果将存储在在 $ssl_client_verify 变量中
ssl_crlfile--证书吊销列表文件,用以验证客户端 SSL 证书有效性的 PEM 格式文件
ssl_client_certificatefile--指定一个 PEM 格式的 CA 证书(根或中间证书)文件,该证书用作客户端的证书验证,该证书列表会被发送给客户端
ssl_trusted_certificatefile--指定一个 PEM 格式的 CA 证书(根或中间证书)文件,该证书用作客户端的证书验证,该证书列表不会被发送给客户端
ssl_verify_depthnumber1设置客户端验证证书链验证深度

配置示例

该模块指令值使用的指令域范围为 stream、server。

1、Nginx 建立 SSL TCP 监听,用户发送 SSL TCP 连接时,由 Nginx 实现 SSL 终止并把 TCP 会话代理到上游服务器,部署方式为客户端 - Nginx 服务器(SSL TCP)→ 上游服务器(TCP)。配置样例如下:

stream {
	server {
		listen              636 ssl;                    # 设置监听端口为636
		access_log logs/ldap_access.log tcp;

		ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;      # 设置使用的SSL协议版本
		ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
			# 设置服务端使用的密码套件
		ssl_certificate     ssl/www_nginxbar_org.pem;   # 主机名www.nginxbar.org证书文件
		ssl_certificate_key ssl/www_nginxbar_org.key;   # 主机名www.nginxbar.org证书密钥文件
		ssl_session_cache   shared:SSL:10m;             # SSL TCP会话缓存设置共享内存区域名为
														# SSL,区域大小为10MB
		ssl_session_timeout 10m;                        # SSL TCP会话缓存超时时间为10分钟
		proxy_pass                    192.168.2.100:389;
	}
}

2、也可以通过代理模块的 proxy_ssl 指令配置与上游服务器实现全链路的安全数据通信。部署方式为客户端 → Nginx 服务器(SSL TCP)→ 被代理服务器(SSL TCP)。配置样例如下:

stream {
	server {
		listen              636 ssl;                   # 设置监听端口为636
		access_log logs/ldap_access.log tcp;

		ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;     # 设置使用的SSL协议版本
		ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
			# 设置服务端使用的密码套件
		ssl_certificate     ssl/www_nginxbar_org.pem;  # 主机名www.nginxbar.org证书文件
		ssl_certificate_key ssl/www_nginxbar_org.key;  # 主机名www.nginxbar.org证书密钥文件
		ssl_session_cache   shared:SSL:10m;  # SSL TCP会话缓存设置共享内存区域名为SSL,区域大小为10MB
		ssl_session_timeout 10m;             # SSL TCP会话缓存超时时间为10分钟

		proxy_ssl   on;                      # 启用SSL/TLS协议,与被代理服务器建立连接
		proxy_ssl_session_reuse on;          # 与被代理服务器SSL TCP连接的SSL会话重用功能
	}
}

相关文章:

  • Vue3.如何把一个对象内的键值变成响应式变量
  • Bigemap Pro 拾取CAD地形图教程
  • uniapp工程中解析markdown文件
  • 在 JIT 编译的函数中调用非 JAX 函数
  • OpenAI Agents SDK 使用自定义的 OpenAI-Compatible API
  • 将对象内的键值转换为响应式变量后,在setup函数中用这些属性的时候为什么不用像ref那样加value
  • 冯・诺依曼架构深度解析
  • WPF-实现按钮的动态变化
  • OMRON Corporation Programming Contest 2025 (AtCoder Beginner Contest 397)题解
  • 对接豆包大模型
  • SvelteKit 最新中文文档教程(6)—— 状态管理
  • 【微服务】基于Lambda ESM的预留模式调整Kafka ESM吞吐量的实战
  • 【海螺AI视频】蓝耘智算 | AI视频新浪潮:蓝耘MaaS与海螺AI视频创作体验
  • leetcode33.搜索旋转排序数组-medium
  • 【八股文】volatile关键字的底层原理是什么
  • 实现搜索功能:第一部分
  • 穿越是时空之门(java)
  • Ubuntu安装TensorFlow 2.13-GPU版全流程指南(anaconda)
  • golang中的接口
  • 【Java进阶学习 第九篇】常用API(Array、冒泡选择排序、二分查找、正则表达式)
  • 布局50多个国家和地区,我国科技型企业孵化器数量全球第一
  • 联合国第二届运动会闭幕,刘国梁受邀成为“联合国运动会大使”
  • 微软将裁员3%,减少管理层
  • 中美是否计划讨论美方以芬太尼为由对华征收的特别关税?外交部回应
  • 山东枣庄同一站点两名饿了么骑手先后猝死,当地热线:职能部门正调查
  • 新造古镇丨乌镇的水太包容了,可以托举住任何一种艺术