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

news2024/11/24 0:34:39

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,区域大小为10MB
        ssl_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加密。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1187285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机组 指令系统

机器指令 机器指令:每一条机器语言的语句 指令系统:全部机器指令的集合 指令的一般格式 指令由操作码和地址码两部分组成 操作码 作用:指明该指令要完成的操作 位数:反映机器的操作种类,即机器允许的指令条数 …

redisTemplate不支持zpopmax,解决方案使用reverseRangeWithScore

在redis客户端可以使用zpopmax redisTemplate不支持zpopmax 解决方案 使用reverseRangeWithScore 接下来我们进行测试 我们要返回最大的value,应该是c import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.a…

挑战100天 AI In LeetCode Day06(热题+面试经典150题)

挑战100天 AI In LeetCode Day06(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-82.1 题目2.2 题解 三、面试经典 150 题-83.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&am…

Python爬虫实战-批量爬取美女图片网下载图片

大家好,我是python222小锋老师。 近日锋哥又卷了一波Python实战课程-批量爬取美女图片网下载图片,主要是巩固下Python爬虫基础 视频版教程: Python爬虫实战-批量爬取美女图片网下载图片 视频教程_哔哩哔哩_bilibiliPython爬虫实战-批量爬取…

本地数据库迁移到云端服务器

工具迁移xtrabackup 创建云服务器——通过云服务器提供的公网地址远程连接XShell——利用迁移工具将数据库从本地迁移到云服务器 (1)创建云服务器 (2)远程连接XShell (3)yum安装mysql (4&…

spider-node-初识

spider-node spider想解决的问题1:业务架构层面2:代码层面3:业务,产品,研发,测试之间4: 系统迭代成本高 spider-node 配置讲解spider-node启动 spider想解决的问题 1:业务架构层面 帮助研发团队…

给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一

题目描述&#xff1a;给定 n 个整数&#xff0c;求里面出现次数最多的数&#xff0c;如果有多个重复出现的数&#xff0c;求值最大的那个 输入格式 第一行输入一个整数n(1<n100000)&#xff0c;接下来一行输入n个int 范围内的整数 输出格式 输出出现次数最多的数和出现的…

https证书免费申请

JoySSL是一个提供免费HTTPS证书的权威证书颁发机构&#xff08;CA&#xff09;&#xff0c;其证书广泛应用于网站安全领域。JoySSL致力于提供高质量、安全、可靠的HTTPS证书&#xff0c;以满足各种规模网站的需求。 首先&#xff0c;您需要访问JoySSL的官方网站&#xff0c;并…

【C++】stack | queue | priority_queue | deque

一、stack栈 介绍 1.栈是一种特殊的线性表&#xff0c;其元素遵循“后进先出”的原则&#xff0c;即仅允许在在表的一端进行插入、删除操作&#xff0c;这一模式被称为“后进先出”或LIFO&#xff08;last in fisrt out&#xff09;。 2.从底层实现来看&#xff0c;stack是作…

07-MySQL-进阶-锁InnoDB引擎MySQL管理

涉及资料 链接&#xff1a;https://pan.baidu.com/s/1M1oXN_pH3RGADx90ZFbfLQ?pwdCoke 提取码&#xff1a;Coke 一、锁 ①&#xff1a;概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xf…

【AI编程】ai编程插件汇总iFlyCode、codegeex

1、iFlyCode 开发公司&#xff1a;讯飞 支持IDE: VS Code、IntelliJ IDEA、CLion、PyCharm、WebStorm 支持语言: Python、JavaScript、C、Java 下载地址&#xff1a;https://iflycode.xfyun.cn/ iFlyCode 快捷键列表&#xff1a;  Tab 采纳建议  Esc 拒绝建议  Alt\ 主动…

【NetCore】企业微信你消息推送

前言 慢慢脱离一线开发工作,突然接到一个改善提案需要增加类似短信业务消息提醒。考虑到目前已开通企业微信且短信服务一般需要收费,决定采用企业微信消息提醒。 流程 微信等相关的第三方开发大致流程都类似,如下 注册账号账号认证(为了权限,当然企业微信内部应用不需要…

【数据结构与算法】DFA算法-关键词匹配-java案例实现

该算法往往是用于匹配一些敏感词、绝对词等&#xff0c;从一篇文章中快速找到其中包含的关键词。 实现思路&#xff1a; 先读取所有关键词并存入set集合中。再将set中的关键词存入HashMap中&#xff0c;是以每个关键词字顺序存储&#xff0c;key为一个字、value为一个HashMap。…

机器视觉人体跌倒检测系统 - opencv python 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…

frida hook(深入浅出)

Andrax搭建Android渗透测试环境 编译官方frida源码 APP基于Frida脱壳 Frida Hook的使用方法 Frida逆向分析APP实战 魔改frida到绕过检测的思路 配置fridaserver为后台进程 使用frida-net玩转frida-rpc 内置frida hook到Android系统 内置frida-inject工具到手机系统 三…

I/O控制器

一、概述 I/O设备管理-机械部件(I/O硬件设备)电子部件(I/O控制器)接口(设备与控制器间通信媒介) 二、组成 各寄存器间的编址方式&#xff1a; 三、控制方式 1.轮询程序控制 2.中断程序控制 3.直接存储器访问(DMA)

漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标

在百度地图中&#xff0c;多边形覆盖物表示地图上的多边形区域。这些区域可以是封闭的&#xff0c;也可以是开放的。多边形覆盖物通常用于表示地图上的行政区划、地标或任何需要强调的区域。 多边形覆盖物拥有自己的地理坐标&#xff0c;并能随着地图的拖动或缩放而相应地移动…

2023最新最全【Adobe After Effection 2023】下载安装零基础教程【附安装包】

AE2023下载点这里 教学 1.鼠标右击【Ae2023(64bit)】压缩包选择&#xff08;win11系统需先点击“显示更多选项”&#xff09;【解压到 Ae2023(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【Set-up】选择【以管理员身份运行】。 3.点击【文件夹图标】&#xff0c;…

Scala爬虫如何实时采集天气数据?

这是一个基本的Scala爬虫程序&#xff0c;使用了Scala的http library来发送HTTP请求和获取网页内容。在爬取天气预报信息时&#xff0c;我们首先需要创建一个代理对象proxy&#xff0c;并将其用于发送HTTP请求。然后&#xff0c;我们使用http库的GET方法获取网页内容&#xff0…

Leetcode-LCR 021 删除链表的倒数第 N 个结点

快慢指针&#xff0c;快指针先移动n-1个节点后&#xff0c;慢指针从虚拟头结点出发&#xff08;相当于快慢指针相隔n个节点&#xff09;&#xff0c;快慢指针一起向链表尾依次移动一个结点&#xff0c;当快指针移动到表位时&#xff0c;慢指针正好移到被删除元素的前一个结点&a…