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

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会话重用功能
	}
}


http://www.kler.cn/a/597526.html

相关文章:

  • 数据结构-----哈希表和内核链表
  • Unity热更新方案HybridCLR+YooAsset,从零开始,保姆级教程,纯c#开发热更
  • 2024年十大开源SLAM算法整理
  • 点亮STM32最小系统板LED灯
  • 从零开始:使用 Cython + JNI 在 Android 上运行 Python 算法
  • 内网渗透(CSMSF) 构建内网代理的全面指南:Cobalt Strike 与 Metasploit Framework 深度解析
  • pfsense部署三(snort各版块使用)
  • 渗透测试工具推荐 | BurpSuite的常用功能——抓包
  • centos7安装单机zookeeper
  • WEB攻防- PHP反序列化属性权限特征原生类 TIPS字符串逃逸CVE 绕过漏洞
  • 「JavaScript深入」WebSocket:高效的双向实时通信技术
  • Java 用二维数组输出三角形排列的字母
  • 盘泰UV种植体:抗老化新科技,焕发种植牙新活力
  • 当科技业成为系统性压榨的绞肉机
  • 【鸿蒙开发】Hi3861学习笔记- WIFI应用STA连接网络
  • nvm 安装某个node.js版本后不能使用或者报错,或不能使用npm的问题
  • 【IDEA】IDEA常用快捷键(适应包括xml所有类型文件)
  • stm32f103 boot引脚
  • 【java面试】线程篇
  • Java——Random库