加密隧道技术

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

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

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

加密隧道的应用        

        这种加密隧道的一个典型应用是是对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:9999
        proxy_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端口并启用SSL
		server_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服务器之间被截获。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (206)-- 算法导论15.4 3题

三、设计 LCS-LENGTH的带备忘的版本,运行时间为O(mn)。需要写代码的时候,请用go语言。 文心一言,代码正常运行: LCS-LENGTH(Longest Common Subsequence Length)问题的带备忘的版本通常指的是使用动态规划…

springboot+vue学生网上请假系统

学生网上请假系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了学生网上请假系统的开发全过程。通过分析学生网上请假系统管理的不足,创建了一个计算机管理学生网上请假系统的方案。文章介绍了…

社区店经营全攻略:为何成为创业者的首选?

在当今的创业环境中,社区店越来越受到创业者的关注和青睐。 作为一名开鲜奶吧5年的创业者,我见证了无数的实体项目,这篇文章,为大家深入解析社区店的优势,以及为何它成为了众多创业者的首选。 社区店的主要优势在于以…

自注意力机制(Self-Attention)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站(【http://www.aideeplearning.cn】) Transformer模型中最关键部分就是自注意力(Self-Attention)机制,正如 Transformer 的论文的标题是“…

ConcurrentHashMap的演进:从Java 8之前到Java 17的实现原理深度剖析

目录 一、引言二、Java 8之前的ConcurrentHashMap1、内部结构与初始化2、Segment类3、并发控制4、扩容与重哈希5、总结 三、Java 8中的ConcurrentHashMap1、数据结构2、并发控制2.1. CAS操作2.2. synchronized同步块 3、哈希计算与定位4、扩容与重哈希5、总结 四、Java 17中的C…

Docker知识点总结

二、Docker基本命令: Docker支持CentOs 6 及以后的版本; CentOs7系统可以直接通过yum进行安装,安装前可以 1、查看一下系统是否已经安装了Docker: yum list installed | grep docker 2、安装docker: yum install docker -y -y 表示自动确认…

安装Realtek Audio Driver失败[Error Code:-0001]

安装Realtek Audio Driver失败[Error Code:-0001] 首先来看一下我们遇到的问题GPT4的推荐解决方法(流水账)笔者自己真实有效的解决办法 首先来看一下我们遇到的问题 描述:在笔记本更新完电脑之后,没有自带声音驱动。然…

【LeetCode】升级打怪之路 Day 11:栈的应用、单调栈

今日题目: Problem 1: 栈的应用 155. 最小栈 | LeetCode20. 有效的括号 | LeetCode150. 逆波兰表达式求值 | LeetCode Problem 2: 单调栈 496. 下一个更大元素 I739. 每日温度503. 下一个更大元素 II 目录 Problem 1:栈 - “先进后出”的应用LC 155. 最…

2024龙年特别篇 -- 魔法指针 之 指针变量

目录 ​编辑 字符指针变量 字符指针 字符数组 关于字符数组的试题 数组指针变量 数组指针 利用指针数组打印数组 打印二维数组 数组作为形参 当形参为指针时(指针数组) 函数指针变量 利用函数实现加法输出的多种方式 字符指针变量 字符指针 char …

[NSSCTF 2nd] web复现

1.php签到 <?phpfunction waf($filename){$black_list array("ph", "htaccess", "ini");$ext pathinfo($filename, PATHINFO_EXTENSION);foreach ($black_list as $value) {if (stristr($ext, $value)){return false;}}return true; }if(i…

CKA考生注意:这些Deployment要点能助你一臂之力!

往期精彩文章 : 提升CKA考试胜算&#xff1a;一文带你全面了解RBAC权限控制&#xff01;揭秘高效运维&#xff1a;如何用kubectl top命令实时监控K8s资源使用情况&#xff1f;CKA认证必备&#xff1a;掌握k8s网络策略的关键要点提高CKA认证成功率&#xff0c;CKA真题中的节点维…

蓝桥杯集训·每日一题2024 (前缀和)

笔记&#xff1a; 例题&#xff1a; #include<bits/stdc.h> using namespace std; const int N 5000010; char str[N]; int s[N]; int main(){int t;cin>>t;for(int a1;a<t;a){int n;cin>>n;scanf("%s",str1);for(int i1;i<n;i){s[i]s[i-1]…

重磅!交通领域顶级会议TRB会议将进行重大改革

美国交通研究委员会年会&#xff08;Transportation Research Board annual meeting,以下简称TRB会议&#xff09;是由美国交通研究委员会举办的交通领域的国际顶级会议。该会议每年举办一次&#xff0c;在华盛顿特区召开。TRB会议是交通研究领域知名度最高的学术会议之一&…

AI又进化了

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 一直想做但没做的板块&#xff0c;整理一段时间内AI领域的前沿动态&#xff08;符合大多粉丝研究领域/感兴趣方向&#xff09;&#xff0c;了解了解外面世界发展成啥样了&#xff0c;一起看看吧~ 谷歌…

跟 AI 学 StarRocks:简介

因为要支持公司的 BI 建设&#xff0c;团队引入了 StarRocks 数据库&#xff0c;此前我没有了解过此项技术&#xff0c;不过因为有架构师引入了此项技术栈&#xff0c;就顺便学习一下。 一、什么是 MPP 数据库&#xff1f; MPP 数据库指的是大规模并行处理&#xff08;Massiv…

Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置(上)

Hololens 2应用开发系列&#xff08;2&#xff09;——MRTK基础知识及配置文件配置 一、前言二、MRTK基础知识2.1 MRTK概述2.2 MRTK运行逻辑2.3 MRTK配置文件介绍2.4 MRTK服务 三、配置文件使用3.1 总配置文件3.2 相机配置3.3 其他配置 参考文献 一、前言 在前面的文章中&…

DDR5 新特性概述

主页&#xff1a; 元存储博客 文章目录 前言1. SDR 与 DDR2. DDR5 的新特点总结 前言 DDR5 带来更快的处理速度和更大的存储空间&#xff0c;为云计算、大数据等领域的发展提供了强有力的支持。 1. SDR 与 DDR single data rate&#xff0c; 1 个时钟周期做一次数据传输 do…

更改elementui的箭头图片以及位置

//更改箭头位置 .el-tree-node__content > .el-tree-node__expand-icon {position: absolute;right: 12px; }//更改箭头图片 .el-tree-node__expand-icon {transform: rotate(-90deg); } .el-tree-node__expand-icon.expanded {transform: rotate(0deg); } // 有子节点 且已…

使用QEMU搭建U-Boot+LinuxKernel+busybox+NFS嵌入式开发环境

目录 0.课程大纲1.为什么要使用QEMU学习嵌入式QEMU简介使用QEMU可以做哪些事情?当前嵌入式行业现状如何适应这种变化使用QEMU学习嵌入式有哪些好处?驱动开发技能为什么要学习Linux 2.搭建嵌入式开发基本环境2.1.安装u-boot-tools2.2.安装交叉编译工具什么是ABI和EABI 3.QEMU安…

DSI2协议之BTA行为理解

概念: DSI协议spec支持总线控制权在master和slave之间发生交换,即通过bus turn around来实现; BUS TURN AROUND: BTA 的实现是通过controller—>cdphy的turnrequest信号来实现; 关于控制器发出turnrequest给phy,phy通过lvds/trio线输出turnaround sequence如下图中…