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

Nginx实现tcp代理并支持TLS加密实验

Nginx源码编译

        关于nginx的搭建配置具体参考笔者之前的一篇文章:实时流媒体服务器搭建试验(nginx+rtmp)_如何在线测试流媒体rtmp搭建成功了吗-CSDN博客中的前半部分;唯一变化的是编译参数(添加stream模块并添加其对应ssl模块):

./configure --prefix=/usr/local/nginx --with-http_stub_status_module \
--with-http_ssl_module --with-stream --with-stream_ssl_module \
--with-stream_realip_module --with-openssl=../openssl-1.0.1f --without-http_gzip_module

Tcp代理配置实验

          在配置文件nginx.conf中增加stream模块的配置,具体如下:

# lijd add 2023-11-4
stream {upstream backend {server 192.168.97.50:54321;}server {listen 12345 ssl;proxy_connect_timeout 60s;proxy_timeout 60s;proxy_pass backend;}
}
# lijd add end

          说明:真是的tcp服务器为:192.168.97.50,端口:54321;nginx代理服务器地址为:192.168.97.51,端口:12345。实验结果截图如下:

        当本地客户端(192.168.80.67)连接代理服务器192.168.97.51的12345端口时,nginx的代理进程会与真实的后台服务器(192.168.97.50)的54321端口创建一个tcp连接,如下图:

        客户端与服务器之间的通信成功连接并发送数据,演示如下图:

Tcp加密通道配置实验

生成CA

        首先通过系统自带的openssl生成一套自己的CA跟服务器证书、客户端证书,具体命令如下:

==============================生成CA相关内容===============================
# 为CA生成私钥
openssl genrsa -out private/ca.prikey 2048# 为CA机构生成公钥
openssl rsa -in ca.prikey -pubout -out ca.pubkey# 为CA生成自签名证书
openssl req -new -x509 -days 3650 -key private/ca.prikey -out ca.cert===========================生成服务器证书相关内容============================
# 生成服务器私钥
openssl genrsa -out server/ser.prikey 2048# 生成服务器证书申请文件
openssl req -new -key server/ser.prikey -out server/ser.csr# 生成由CA签名过的服务器证书
openssl x509 -req -days 365 -in server/ser.csr -CA ca.cert -CAkey private/ca.prikey -CAcreateserial -out server/ser.cert===========================生成客户端证书相关内容============================
# 生成客户端私钥
openssl genrsa -out client/cli.prikey 2048# 生成客户端证书申请文件
openssl req -new -key client/cli.prikey -out client/cli.csr# 生成由CA签名过的客户端证书
openssl x509 -req -days 365 -in client/cli.csr -CA ca.cert -CAkey private/ca.prikey -CAcreateserial -out client/cli.cert

         生成的所有证书如下:

 TLS代理实验

        实验的环境跟上面的tcp代理配置实验相同,nginx.conf的配置文件添加SSL的一些基本配置,具体如下:

# lijd add 2023-11-4
stream {upstream backend {server 192.168.97.50:54321;}server {listen 12345;proxy_connect_timeout 60s;proxy_timeout 60s;proxy_pass backend;# 设置nginx与后台代理服务直接的tcp通信是否为SSL协议加密proxy_ssl off;# 设置使用的SSL协议版本ssl_protocols       TLSv1 TLSv1.1 TLSv1.2 SSLv2;      ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;# 设置服务端使用的密码套件ssl_certificate      /lijd/CA/server/ser.cert;ssl_certificate_key  /lijd/CA/server/ser.prikey;ssl_session_cache   shared:SSL:10m;		# SSL TCP会话缓存设置共享内存区域名为# SSL,区域大小为10MBssl_session_timeout 10m;				# SSL TCP会话缓存超时时间为10分钟 }
}
# lijd add end

        注意:proxy_ssl参数开关表示:nginx代理与后台真是的tcp服务器直接是否需要SSL加密。

        由于实验需要tcp客户端通道加密,支持tcp客户端TLS加密工具比较难找到,因此用单纯的tcp协议认证测试相对麻烦。笔者在这里想了一个办法:由于http、https协议是基于tcp协议之上的协议,利用浏览器的https的请求特性,模拟一个tcp加密客户端;此时后台的真实服务器用系统自带的IIS服务(http服务器)充当一个tcp服务端。后台的真实服务器如下:

        通过nginx代理的tcp服务去访问后台服务器浏览器页面如下:

         可以看到浏览器能通过nginx代理访问到真实的后台服务器并收到网页回复数据。通过抓两条链路的数据包分析如下:

        1、浏览器(充当tcp客户端)与nginx代理之间的加密链路抓包分析如下:

        2、nginx与后台真实服务器之间的纯tcp链路抓包分析如下:

        至此,通过nginx代理TLS加密通道实验已经完结。本章主要讨论的是如下图结构:

        有兴趣的同学可以研究一下nginx代理与客户端、服务器双向都为TLS加密通道。此时nginx的配置中proxy_ssl参数需要设置成on(默认为on,实验时在这卡了半天),这时就需要后台TCP服务器支持TLS加密。

相关文章:

Nginx实现tcp代理并支持TLS加密实验

Nginx源码编译 关于nginx的搭建配置具体参考笔者之前的一篇文章:实时流媒体服务器搭建试验(nginxrtmp)_如何在线测试流媒体rtmp搭建成功了吗-CSDN博客中的前半部分;唯一变化的是编译参数(添加stream模块并添加其对应ss…...

vue3+setup 解决:this.$refs引用子组件报错 is not a function

一、如果在父组件中以下四步都没问题的话&#xff0c;再看下面步骤 二、如果父组件引用的是index页面 请在 头部加上以下代码 &#xff08;如果是form页面请忽略这一步&#xff09; <template> <a-modalv-model:visible"visible"title"头部名称&…...

189. 轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4…...

com.alibaba:tools:jar com.alibaba:jconsole:jar

com.alibaba:tools:jar com.alibaba:jconsole:jar...

洛谷 P1020 [NOIP1999 普及组] 导弹拦截【一题掌握三种方法:动态规划+贪心+二分】最长上升子序列LIS解法详解

P1020 [NOIP1999 普及组] 导弹拦截 前言题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目分析注意事项 代码动态规划&#xff08;NOIP要求&#xff1a;时间复杂度O(n^2^)&#xff09;贪心二分&#xff08;O(nlgn)&#xff09; 后话额外测试用例样例输入 #1…...

golang的管道阻塞问题

package mainimport ("fmt""sync"//"time" ) var wg sync.WaitGroup func writeData(intchan chan int){defer wg.Done()for i : 1; i < 9; i {intchan<-ifmt.Println("写入的数据为&#xff1a;",i)//time.Sleep(time.Seco…...

用HTML + javaScript快速完成excel表格信息除重并合并

今天突然接到一个工作&#xff0c;要把两个存储在.xls的主体信息表&#xff0c;除重后合并成一个主体信息表&#xff0c;并且补充主体类型和所在县区这两列信息。 完成这项工作的方法有很多&#xff0c;如果信息表中的信息量不大的话&#xff0c;手工处理一下也行&#xff0c;如…...

高性能网络编程 - The C10M problem

文章目录 Pre概述回顾C10K实现C10M的挑战思路总结 Pre 高性能网络编程 - The C10K problem 以及 网络编程技术角度的解决思路 概述 在接下来的10年里&#xff0c;因为IPv6协议下每个服务器的潜在连接数都是数以百万级的&#xff0c;单机服务器处理数百万的并发连接&#xff0…...

java计算机毕业设计SpringBoot在线答疑系统

项目介绍 本文从学生的功能要求出发&#xff0c;建立了在线答疑系统&#xff0c;系统中的功能模块主要是实现管理员权限&#xff1b;首页、个人中心、学生管理、教师管理、问题发布管理、疑难解答管理。教师权限&#xff1a;首页、个人中心、疑难解答管理、试卷管理、试题管理…...

Doc as Code (4):使用Git做版本管理,而不是使用目录做版本管理

▲ 搜索“大龙谈智能内容”关注GongZongHao▲ 在引入版本管理工具之前&#xff0c;文档工程师使用文件系统提供的功能来管理文件。大家是这样工作的&#xff1a; 文件按照分类放在不同的目录里&#xff0c;使用编辑器&#xff08;如&#xff1a;MS Word&#xff09;打开文档进…...

【Codeforces】 CF1870E Another MEX Problem

题目链接 CF方向 Luogu方向 题目解法 解法1 考虑优化 d p dp dp 转移次数&#xff0c;即只转移有用的区间 不难发现&#xff0c; m e x ( l , r ) m e x ( l 1 , r ) mex(l,r)mex(l1,r) mex(l,r)mex(l1,r) 或 m e x ( l , r ) m e x ( l , r − 1 ) mex(l,r)mex(l,r-1…...

【Objective-C】Objective-C汇总

方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

怎么查找性别为女性的不同学历层次不同学位以及所有人不同职务职称的人数

怎么查找性别为女性的不同学历层次不同学位以及所有人不同职务职称的人数 需求分析&#xff1a; 1.统计性别为女性的所获学位下不同学历层次的人数 2.统计不同职务职称的不同学位和学历层次的人数代码 def cal_xuewei_number(self):# 读取表格文件table pd.read_excel("…...

浅谈Elasticsearch查询和搜索

Elasticsearch查询和搜索 Elasticsearch是一个分布式、实时的搜索和分析引擎&#xff0c;广泛应用于全文搜索、日志分析、实时数据分析等场景。Elasticsearch提供了丰富的查询和搜索功能&#xff0c;如查询DSL、过滤、排序、分页、高亮和聚合等。本文将详细介绍如何在Elastics…...

SLAM从入门到精通(被忽视的基础图像处理)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 工业上用激光slam的多&#xff0c;用视觉slam的少&#xff0c;这是大家都知道的常识。毕竟对于工业来说&#xff0c;健壮和稳定是我们必须要考虑的…...

【C++】继承详解

本篇要分享的内容是关于继承的内容哼哼哼啊啊啊啊啊啊啊啊啊啊啊啊啊啊 以下为本篇目录 目录 1.简单了解继承 2.继承的简单定义 3.继承简单使用 4.继承方式 4.1基类的privat 4.2基类的protected 4.3不可见与private的区别 5.父子类对象赋值转换 6.继承的作用域 7.子…...

react:swr接口缓存

useSWR 是一个 React Hooks&#xff0c;是 HTTP 缓存库 SWR 的核心方法之一。SWR 是一个轻量级的 React Hooks 库&#xff0c;通过自动缓存数据来实现 React 的数据获取。 第一个参数是被缓存的数据的 key&#xff0c; 第二个参数是一个函数&#xff0c;该函数返回数据或者一个…...

2023-11 | 短视频批量下载/爬取某个用户的所有视频 | Python

这里以鞠婧祎的个人主页为demo https://www.douyin.com/user/MS4wLjABAAAACV5Em110SiusElwKlIpUd-MRSi8rBYyg0NfpPrqZmykHY8wLPQ8O4pv3wPL6A-oz 【2023-11-4 23:02:52 星期六】可能后面随着XX的调整, 方法不再适用, 请注意 找到接口 找到https://www.douyin.com/aweme/v1/web/…...

【JAVA学习笔记】66 - 本章作业(IO流)

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter19/src/com/yinhai/homework 1.使用File类和FileWriter类 (1)在判断e盘下是否有文件夹mytemp&#xff0c;如果没有就创建mytemp public class Homework01 {public static void main(String…...

vscode中 vue3+ts 项目的提示失效,volar插件失效问题解决方案

文章目录 前情提要bug回顾解决方案最后 前情提要 说起来很耻辱&#xff0c;从mac环境换到window环境&#xff0c;vscode的配置都是云端更新过来的&#xff0c;应该是一切正常才对&#xff0c;奇怪的是我的项目环境出现问题了&#xff0c;关于组件的ts和追踪都没有效果&#xff…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...