Nginx加密与上游服务器的TCP网络通信
Nginx加密与上游服务器的TCP网络通信
本文介绍了如何保护NGINX和TCP上游服务器或TCP服务器上游组之间的TCP通信。
先决条件
- NGINX Plus R6和更高版本或使用
--with-stream
和with-stream_ssl_module
配置参数编译的最新NGINX开源 - 代理TCP服务器或TCP服务器的上游组
- SSL证书和私钥
获取SSL服务器证书
首先,您将需要获取服务器证书和私钥,并将它们放在上游服务器或上游组中的每台服务器上。可以从可信证书颁发机构(CA)获得证书,也可以使用SSL库(例如OpenSSL)生成证书。
当需要加密NGINX与上游服务器之间的连接时,将使用自签名服务器证书。但是,这些连接很容易受到中间人攻击:冒名顶替者可以冒充上游服务器,而NGINX不会知道它正在与假服务器通信。如果获得了由可信CA签名的服务器证书(可以使用OpenSSL创建自己的内部CA),则可以将NGINX配置为仅信任由该CA签名的证书。这使攻击者更难模仿上游服务器。
获取SSL客户端证书
NGINX可以使用SSL客户端证书向上游服务器标识自己。此客户端证书必须由受信任的CA签名,并与相应的私钥一起存储在NGINX上。
您将需要配置上游服务器,以要求所有传入的SSL连接都需要客户端证书,并信任将客户端证书颁发给NGINX的CA。然后,当NGINX连接到上游时,它将提供其客户端证书,而上游服务器将接受它。
配置NGINX
在NGINX配置文件中,将该proxy_ssl
指令包括server
在该stream
级别的块中:
stream {server {...proxy_pass backend;proxy_ssl on;}
}
然后指定上游服务器所需的SSL客户端证书的路径以及证书的私钥:
server {...proxy_ssl_certificate /etc/ssl/certs/backend.crt;proxy_ssl_certificate_key /etc/ssl/certs/backend.key;
}
(可选)您可以指定使用哪些SSL协议和密码:
server {...proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;proxy_ssl_ciphers HIGH:!aNULL:!MD5;
}
如果您使用由CA颁发的证书,则还应包含该proxy_ssl_trusted_certificate
指令,以将该文件命名为包含用于验证上游安全证书的受信任CA证书的文件。该文件必须为PEM格式。(可选)包括proxy_ssl_verify
和proxy_ssl_verfiy_depth
指令,以使NGINX检查安全证书的有效性:
server {...proxy_ssl_trusted_certificate /etc/ssl/certs/trusted_ca_cert.crt;proxy_ssl_verify on;proxy_ssl_verify_depth 2;
}
每个新的SSL连接都需要在客户端和服务器之间进行完整的SSL握手,这会占用大量CPU。要让NGINX代理先前协商过连接参数并使用所谓的缩写握手,请包含以下proxy_ssl_session_reuse
指令:
proxy_ssl_session_reuse on;
完整的例子
stream {upstream backend {server backend1.example.com:12345;server backend2.example.com:12345;server backend3.example.com:12345;}server {listen 12345;proxy_pass backend;proxy_ssl on;proxy_ssl_certificate /etc/ssl/certs/backend.crt;proxy_ssl_certificate_key /etc/ssl/certs/backend.key;proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;proxy_ssl_ciphers HIGH:!aNULL:!MD5;proxy_ssl_trusted_certificate /etc/ssl/certs/trusted_ca_cert.crt;proxy_ssl_verify on;proxy_ssl_verify_depth 2;proxy_ssl_session_reuse on;}
}
在此示例中,proxy_ssl
伪指令指定了NGINX转发到上游服务器的TCP通信的安全。
当安全的TCP连接第一次从NGINX传递到上游服务器时,将执行完整的握手过程。上游服务器要求NGINX出示proxy_ssl_certificate
指令中指定的安全证书。的proxy_ssl_protocols
和proxy_ssl_ciphers
,其协议和密码被用于指令控制。
下次NGINX将连接传递到上游时,由于该proxy_ssl_session_reuse
指令,会话参数将被重用,并且安全的TCP连接建立得更快。
proxy_ssl_trusted_certificate
指令命名的文件中的受信任CA证书用于在上游服务器上验证证书。该proxy_ssl_verify_depth
伪指令指定检查证书链中的两个证书,并且该proxy_ssl_verify
伪指令验证证书的有效性。
要了解有关NGINX Plus的更多信息,请参阅我们的商业订阅。
Nginx加密与上游服务器的TCP网络通信相关推荐
- Nginx配置与上游服务器的长链接
可以通过keep-alive指令配置长链接数量 upstream backend{server 192.168.61.1:9080 weight=1;server 192.168.61.1:9090 ...
- Linux:Nginx高并发之服务器最大TCP连接数及调优汇总(转载)
Linux TCP连接数优化及调优 启动线程数: 启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数 最佳启动线程数和CPU内核数量成正比,和IO阻塞时间成反比.如果任务都是C ...
- Nginx使用HTTPS建立与上游服务器的网络通信
Nginx使用HTTPS建立与上游服务器的网络通信 本文介绍了如何加密NGINX与上游组或代理服务器之间的HTTP通信. 先决条件 NGINX开源或NGINX Plus 甲代理服务器或服务器的上游组 ...
- 基于TCP网络通信的自动升级程序源码分析-客户端接收文件
升级程序客户端接收文件 /// <summary>/// 文件数据缓存 索引是 ConnectionInfo对象 数据包的顺序号 值是数据/// </summary>Dicti ...
- Nginx设置TCP上游服务器的SSL配置
Nginx设置TCP上游服务器的SSL配置 本文介绍了如何为NGINX Plus和接受TCP连接的负载均衡的服务器组设置SSL 什么是SSL终端 SSL终端意味着NGINX Plus充当与客户端连接的 ...
- Nginx:12---反向代理之(代理模块,代理单个上游服务器)
一.反向代理介绍 反向代理应该是 Nginx 做的最多的一件事了,什么是反向代理呢,反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网 ...
- 上游服务器响应无效怎么办,Nginx 当上游服务器返回失败时的处理办法
95 Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 |ht ...
- Nginx网络配置当中的备份上游服务器以及不可用上游服务器
备份上游服务器 upstream backend{server 192.168.61.1:9080 weight=1;server 192.168.61.1:9090 weight=2 backup; ...
- NGINX怎样隐藏上游错误?
原文作者:陶辉 原文链接: NGINX怎样隐藏上游错误? 转载来源:NGINX开源社区 当上游出错时,作为负载均衡的NGINX可以实时更换Server,在客户端无感知的情况下重新转发HTTP请求.这一 ...
最新文章
- Linux01-基本操作与Shell
- winform 界面 xml化_FlinkSQL 1.11 on Zeppelin平台化实践
- oracle 常用sql
- s5pv210启动debian出错提示bash: cannot set terminal process group (-1): Inappropriate ioctl for device...
- 使用阿里云CentOS安装LAMP时,安装PHP扩展需要注意的事情
- 从小白到大神程序员必读15本经典电子书免费送第三季(先到先得)
- 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享)
- JMM和底层实现原理
- leetcode647. 回文子串(动态规划)
- Python天天美味(21) - httplib,smtplib
- .NET BackgroundWorker的一般使用方式
- 一元三次方程重根判别式_一元四次方程的常规解法
- main在c语言中的作用,main函数在C语言中是怎么定义的?有什么作用?
- 云之讯-》返回码105147
- ESlint 配置从0到1 (二)
- Chrome 的人都需要知道的「神器」扩展:「油猴」使用详解
- 自定义控件属性英文类别
- 【5G手机漏接电话问题解决方式】
- DBeaver 连接 人大金仓以及其他国产数据库
- 怎么把磁盘合并成一个?两个硬盘分区合并,如何硬盘分区合并