加密隧道技术

        在现在的互联网上传输数据,首要考虑的就是安全。这关乎到你的隐私,个人信息,财产安全等等重大问题。如果你的程序本身传输的信息没有加密,也可以通过其他辅助方式让你的通信加密。一些工具的就是为了解决这样的场景的,即数据先通过源端代理,让你的所有通信数据都加密,然后到达目的后再使用目的端代理进行解密后转发给目标进程。即加密隧道的简单示意图如下所示:

       加密隧道的始末即为源端代理和目的端代理。其中数据发送进程和源端代理可以是同在一个主机的不同进程,也可以是分属不同的主机。目的端代理和数据接收进程也一样。如果你也不希望你的数据有任何的明文信息在互联网上传输,你就可以使用加密隧道技术。当然,如果你的数据发送进程和数据接收进程之间的网络通信本身就是加密的,那就不用借助中间的代理环节。

        这种独立于应用本身的加密隧道技术,有一个很明显的优点是它对收发数据的双方完全透明,收发数据的双方不需要任何的变更。另外收发数据的应用因为不用处理加解密数据,应用本身的开发的难度和复杂度也会降低,间接达到解耦的目的。

加密隧道的应用        

        这种加密隧道的一个典型应用是是对http代理的数据进行加密。http代理本身是可以既代理http协议数据,也可以代理https数据的,但是http代理协议的头部还是明文传输的。比如你的浏览器需要通过http代理访问www.bing.com,那么,浏览器发给http代理的协议数据是下面这样的:

Ncat: Connection from 192.168.56.1:51472.
CONNECT www.bing.com:443 HTTP/1.1
Host: www.bing.com:443
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0

        你会发现这完全是明文传输,只要在中间传输的环节截获你这个报文,就知道你要访问的是哪个网址,如果你要访问的地址被认为非法,那么你的报文会直接被丢弃。上面的http头部和普通的http头部有点区别的就是使用的CONNECT方法,这个方法指示代理服务器,让其代理访问目标主机。所以这种也称为CONNECT代理。

        此时就可以使用加密隧道技术,把处于浏览器到代理服务器之间的数据都加密传输。 例如可以在本地局域网的网关部署一个加密隧道源端代理,在http代理服务器机器上或者在其局域网内部署一个加密隧道的目的端代理,目的代理解密后的数据全部转发给http代理服务器。那样我们浏览器的数据就不会在因特网上明文传输了。

加密隧道技术的实现

      这种独立于应用本身的加密隧道技术,还是有不少的。

1、stunnel

        第一种加密隧道技术,当选stunel。stunnel应该能达到企业级的应用标准,stunnel的设计初衷就是为了单纯的建立加密隧道,当然可以覆盖所有场景。stunnel这个我目前还在使用。具体的应用可以参考我的另一篇博文:stunnel 配置(contos7 windows) - 知乎 (zhihu.com)

2、nginx建立加密隧道

        nginx作为网关,我们做IT的一般都知道。完全能满足企业级的应用需求。同时支持高并发和高可靠性。我们用ngixn建立加密隧道也很简单,下面介绍一下使用nginx建立加密隧道的配置

(1)nginx源端代理(客户端)

        配置文件nginx.conf如下:

user root;
worker_processes  4;events {worker_connections  100000;
}stream {server {listen 9999;  # 监听9999端口proxy_pass 2.2.2.2:9999;  # 将流量加密后转发到2.2.2.2:9999proxy_ssl on;  # 启用SSL代理#proxy_ssl_verify on;  # 启用SSL验证,这里不验证上游服务的证书,默认是off不验证#proxy_ssl_trusted_certificate ../certs/ca.crt;  # 指定可信的CA证书,既然不验证服务端证书,这里也就不需要CA证书proxy_ssl_protocols TLSv1.2 TLSv1.3;  # 指定SSL协议版本proxy_ssl_session_reuse on;  # 启用SSL会话复用proxy_ssl_certificate ../certs/client.crt;  # 客户端SSL证书proxy_ssl_certificate_key ../certs/client.key;  # 客户端SSL证书私钥proxy_ssl_verify_depth 2;  # SSL验证深度}
}

        上面的客户端和服务端配置,需要自己生成各种证书,如果有现成的就可以拿来用。上面作为客户端的nginx配置没有校验服务端的证书,如果要更高的安全要求可以加上。 

 (2)nginx目的端代理(服务端)

         服务端的配置nginx.conf如下:

#user  nobody;
user root;
worker_processes  4;events {worker_connections  65535;
}stream {server {listen 9999 ssl;  # 监听8080端口并启用SSLserver_name ssl-tunnel-server;ssl_certificate ../certs/server.crt;  # SSL证书路径ssl_certificate_key ../certs/server.key;  # SSL证书私钥路径ssl_client_certificate ../certs/ca.crt;  # 指定可信的CA证书ssl_verify_client on;  # 启用客户端SSL验证,那么就需要配置ca证书,就是上面的ssl_client_certificate指定的ca证书proxy_pass 127.0.0.1:4433;  # 将流量代理到本地端口}
}

        

3、ssh加密隧道 

        我们常用的ssh命令,很多人都只是用来做远程登录工具的。其实它还有一个作用是给我们建立一条加密隧道,从而让我们通过这条加密隧道,安全的访问远程主机。并且ssh加密隧道的建立不需要我们做任何额外的配置,只需要一条命令就能完成。命令如下:

ssh -f -L 0.0.0.0:9999:113.104.189.18:6379 root@1.1.1.1 -N -g

-f是让ssh命令能在后台运行,直到有连接到来才转入前台运行

-L后面跟本地监听端口以及将数据转发到达的远程主机的ip端口,即两组ip端口,即local_ip:local_port:remote_ip:remote_port的格式,如果本地绑定任意ip,0.0.0.0也可以不写出来,只用9999:113.104.189.18:6379.其中remote_ip:port是想访问的任意远程主机ip和端口,也可以是ssh服务器端所在主机的ip端口

-N 是告诉远程主机,只负责转发隧道数据,不执行任何命令。没有这个参数,ssh对端收到后一般是要执行这个命令的,也就是正常的远程shell的功能。

-g 参数,是为了使当前ssh隧道能被除本机外的进程使用,没有该选项,默认只有本地数据包可以通过该隧道,也是一种安全机制,防止在非授权的情况下被其他主机使用

root@1.1.1.1是远程主机的ip和用户名,也可以在后面用":port"添加端口,默认都是22端口。

假设ssh客户端所在主机的ip是192.169.56.2,则执行完成后建立的加密隧道示意图如下:

        数据发送主机和ssh客户端主机可以是在同一台,数据接收主机和ssh服务端主机也可以是同一台 。图中用***表示的是系统随机分配的端口。这时候你会发现这个ssh隧道还有一个很好的用处,就是能绕过防火墙。假如ssh服务端主机防火墙只开放了22端口(这个是ssh端口,一般服务器都会开放),但是你要访问该主机的其他端口,怎么办,用这个ssh隧道,就能做一个端口转发,将22端口的数据转发给其他端口,比如80端口。

        用ssh建立加密隧道,只是用作暂时的,一旦某个时候连接断开后,就不会重连了,需要重新执行这个命令。这就不能作为提供长久通道的服务,这就是有很大的局限性

        另外VPN也可以作为加密隧道,其实VPN本身和外部的通信就是加密的,我们可以借助这个加密通道做任何事而不用担心被别人窥探到。比如你浏览器访问的任何地址,如果你都是通过VPN服务器作为出口的话,别人即使在中途截获了你的请求数据,只知道是这台VPN服务器访问了某个网址,而无法得知是这个VPN网络中的哪一个用户,因为明文的http头部信息只能在VPN服务器到目标网址之间被截获,而不可能在你的主机到VPN服务器之间被截获。

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

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

相关文章

之前续写抖音开发者接入字节小游戏的缓存一下,现在说一下在 Windows 或者 Mac 如何用终端更换路径?

window: 比方说你的 window 目录下是这个路径: 第一:E:\project\Q1\trunk\client\src,然后你想切换到下一个路径的话,你可以这样子操作: 第二:E:\project\Q1\trunk\client\src> cd .\usersetting 然后回车,这里不会计较大小写 第三:你就可以在这个目录下执行你的脚本:E:…

学习大数据,所必需的java基础(7)

文章目录 File类File 的静态成员File的构造方法File的获取方法相对路径和绝对路径File的创建方法File类中的删除方法File的遍历方法 字节流IO流介绍以及输入输出以及流向的介绍IO流的流向IO流分类IO流分类 OutputStream中的子类FileOutoutStream的介绍以及方法的简单介绍InputS…

服务器中如何检查端口是否开放

有多种方法可以检测服务器端口是否开放。以下是一些常用的方法: 1. Telnet 命令: 使用 Telnet 命令来测试端口的可达性。在命令提示符或终端中执行以下命令: telnet your_server_ip your_port_number 如果连接成功,表示端口是…

C++ //练习 10.22 重写统计长度小于等于6 的单词数量的程序,使用函数代替lambda。

C Primer(第5版) 练习 10.22 练习 10.22 重写统计长度小于等于6 的单词数量的程序,使用函数代替lambda。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /********************************…

PDF标准详解(二)——PDF 对象

上一篇文章我们介绍了一个PDF文档应该包含的最基本的结构,并且手写了一个最简单的 “Hello World” 的PDF文档。后面我们介绍新的PDF标准给出示例时将以这个文档为基础,而不再给出完整的文档示例,小伙伴想自己测试可以根据上一节的文档来进行…

分布式ID选型对比(3)

redis自增 一, 引入依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.6.5</version> </dependency> 二, 配置信息: spring:redis:# 地…

YOLOv8有效涨点,添加GAM注意力机制,使用Wise-IoU有效提升目标检测效果

目录 摘要 基本原理 通道注意力机制 空间注意力机制 GAM代码实现 Wise-IoU WIoU代码实现 yaml文件编写 完整代码分享&#xff08;含多种注意力机制&#xff09; 摘要 人们已经研究了各种注意力机制来提高各种计算机视觉任务的性能。然而&#xff0c;现有方法忽视了…

【C/C++随笔】static 的用法和作用

「前言」所有文章已经分类好&#xff0c;放心食用 「归属专栏」C语言 | C嘎嘎 「主页链接」个人主页 「笔者」枫叶先生(fy) static 的用法和作用&#xff1f;&#xff1f;&#xff1f; static作用&#xff1a; 作用1修改存储方式&#xff1a;用 static 修饰的变量存储在静态区…

项目解决方案: 实时视频拼接方案介绍(中)

目 录 1.实时视频拼接概述 2.适用场景 3.系统介绍 4. 拼接方案介绍 4.1基于4K摄像机的拼接方案 4.2采用1080P平台3.0 横向拼接 4.2.1系统架构 4.2.2系统功能 4.2.3方案特色 4.2.4适用场景 4.2.5设备选型 4.3纵横兼顾&#xff0c;竖屏拼接 4.3.1系统…

如何使用ArcGIS Pro创建最低成本路径

虽然两点之间直线最短&#xff0c;但是在实际运用中&#xff0c;还需要考虑地形、植被和土地利用类型等多种因素&#xff0c;需要加权计算最低成本路径&#xff0c;这里为大家介绍一下计算方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载…

十四、计算机视觉-形态学梯度

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、梯度的概念二、梯度的应用三、梯度如何实现 一、梯度的概念 形态学梯度&#xff08;Morphological Gradient&#xff09;是数字图像处理中的一种基本操作&…

MATLAB中回调定义

目录 指定回调的方法 回调函数语法 传递额外输入参数 将回调定义为默认值 指定回调的方法 要使用回调属性&#xff0c;将回调代码赋予该属性。使用以下技术之一&#xff1a; 引用函数执行的函数句柄。 包含函数句柄和其他参数的元胞数组 计算为有效 MATLAB 表达式的字符向…

pytorch 图像的卷积操作

目录 1.卷积核基本参数说明 2.卷积相关操作说明 3.卷积操作示例 1.卷积核基本参数说明 pytorch进行图像卷积操作之前&#xff0c;需要把图像素格式进行分离&#xff0c;比如一个图像为rgb格式&#xff0c;把R&#xff0c;G,B取出来作为一个ndarray&#xff0c;前文讲过&#…

Linux 下 socket 编程介绍及 TCP 客户端与服务端创建示例

目录 socket 编程接口TCP 服务端TCP 客户端更多内容 本文介绍了 Linux 下的 socket 编程&#xff0c;及总结了使用 socket 接口实现 TCP 服务端和客户端的示例代码。 socket 编程接口 socket() 函数&#xff1a;用于创建一个新的 socket 描述符&#xff1a; int socket(int …

Linux内核MMC框架

1.mmc的概念 1.MMC MultiMedia Card&#xff0c;多媒体存储卡&#xff0c; 但后续泛指一个接口协定&#xff08;一种卡式&#xff09;&#xff0c;能符合这接口的内存器都可称作mmc储存体,工作电压&#xff1a;高电压为2.7&#xff5e;3.6 V&#xff0c;低电压为1.65&#xf…

【微服务】微服务中常用认证加密方案总结

目录 一、前言 二、登录认证安全问题 3.1 认证方式选择 三、常用的加密方案 3.1 MD5加密算法 3.1.1 md5特点 3.1.2 md5原理 3.1.3 md5使用场景 3.2 AES加密算法 3.2.1 AES简介 3.2.2 AES加解原理 3.2.3 AES算法优缺点 3.2.4 AES算法使用场景 3.3 RSA加密算法 3.3…

Flutter Dio进阶:使用Flutter Dio拦截器实现高效的API请求管理和身份验证刷新

Flutter笔记 使用Flutter Dio拦截器实现高效的API请求管理和身份验证刷新 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article…

金融业被网络攻击了怎么办,如何治理和风险控制?

近年来&#xff0c;网络罪犯的人数和复杂程度都在增加&#xff0c;网络罪犯的目标锁定变得更具策略性&#xff0c;更加专注于最大效率和获利。随着有关全球网络犯罪的数据持续涌入&#xff0c;可以看出金融服务企业已然成为头号锁定目标。虽然金融服务企业在网络安全人员、工具…

图论例题解析

1.图论基础概念 概念 &#xff08;注意连通非连通情况&#xff0c;1节点&#xff09; 无向图&#xff1a; 度是边的两倍&#xff08;没有入度和出度的概念&#xff09; 1.完全图&#xff1a; 假设一个图有n个节点&#xff0c;那么任意两个节点都有边则为完全图 2.连通图&…

【MySQL】SQL 优化

MySQL - SQL 优化 1. 在 MySQL 中&#xff0c;如何定位慢查询&#xff1f; 1.1 发现慢查询 现象&#xff1a;页面加载过慢、接口压力测试响应时间过长&#xff08;超过 1s&#xff09; 可能出现慢查询的场景&#xff1a; 聚合查询多表查询表数据过大查询深度分页查询 1.2 通…