代理(proxy)服务器原理

代理(proxy)服务器原理,第1张

[toc]

基于原文截取修改:

原文链接: 让代理服务器支持HTTPS很难吗?

我们开展稳定高匿名HTTP代理业务以来,我听到客户咨询最多的问题之一就是“你们的代理支持HTTPS协议吗?”。我觉得很多人对HTTPS代理存在理解上的误区,所以我写了这篇文章。目的就是想说明“实现支持HTTPS的代理一点都不难!”。

说到HTTPS代理很多人瞬间就会联想到HTTPS的各种证书和各种加密,觉得很高端很复杂的样子。其实不然,代理服务器不需要配置证书、也不需要处理任何加密。因为HTTPS代理是通过Web隧道(Web tunnel)工作的。

Web隧道允许用户通过HTTP连接发送非HTTP流量(例如FTP,Telnet,SMTP),这就使得那些使用非HTTP协议的应用程序可以通过HTTP代理工作了。你现在应该就明白了为什么QQ可用设置使用HTTP代理工作。Web隧道这么强大,但它并不复杂。

Web隧道是用HTTP协议的CONNECT方法建立起来的。CONNECT方法不是HTTP/1.1核心规范的一部分,但确是一种得到广泛应用的扩展。客户端通过CONNECT方法请求代理服务器创建一条到达任意目的服务器和端口的TCP链接,代理服务器仅对客户端和服务器之间的后续数据进行盲转发(只是转发,不关心、也不懂发送的内容是什么)。

1) 客户端通过HTTP协议发送一条CONNECT方法的请求给代理服务器,告知代理服务器需要连接的主机和端口。

例如:

在本例中客户端通过CONNECT方法请求代理服务器打开一条到 www.alipay.com 主机443端口的TCP链接。

2) 代理服务器一旦建立了和目标主机(上例中的 www.alipay.com:443 )TCP连接,就会回送一条HTTP 200 Connection Established应答给客户端。

例如:

3) 此时隧道就建立起来了。客户端通过该HTTP隧道发送的所有数据都会被代理服务器(通过之前建立起来的与目标主机的TCP连接)原封不动的转发给目标服务器。目标服务器发送的所有数据也会被代理服务器原封不动的转发给客户端。注意:是原封不动的转发,代理服务器并不需要知道内容的含义,也不会尝试去对内容进行解析。

PS:上面这张插图是我引用《HTTP权威指南》一书的,做了修改。

这下你应该明白了Web隧道的工作原理。所以对代理服务器来说只要其支持Web隧道就支持HTTPS协议(和其它非HTTP协议),与证书、加密没有任何直接的关系。从上面的过程可以看出,实现Web隧道并不难,只要代理服务器能够正确处理CONNECT请求,然后对数据进行盲转发即可。从难度上看这比标准的HTTP协议代理还要简单(标准HTTP协议代理需要对客户端和服务端双方的HTTP报文先进行解析,修改后再进行转发)。

我能说

哈哈,没写,你来

在HTTP通信链上,客户端和目标服务器之间通常存在某些中转代理服务器,它们提供对目标资源的中转访问。一个HTTP请求可能被多个代理服务器转发,后面的服务器称为前面服务器的上游服务器。代理服务器按照其使用方式和作用,分为正向代理服务器,反向代理服务器和透明代理服务器。

正向代理要求客户端自己设置代理服务器的地址。客户的每次请求都将直接发送到该代理服务器,并由代理服务器来请求目标资源。比如处于防火墙内的局域网机器要访问Internet,或者要访问一些被屏蔽掉的国外网站,就需要使用正向代理服务器。

反向代理则被设置在服务器端,因而客户端无需进行任何设置。反向代理是指用代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端。这种情况下,代理服务器对外就表现为一个真实的服务器。各大网站通常分区域设置了多个代理服务器,所以在不同的地方同一个域名可能得到不同的IP地址,因为这些IP地址实际上是代理服务器的IP地址。

HTTP代理服务器的工作原理

如图所示,正向代理服务器和客户端主机处于同一个逻辑网络中。该逻辑网络可以是一个本地LAN,也可以是一个更大的网络。反向代理服务器和真正的Web服务器也位于同一个逻辑网络中,这通常由提供网站的公司来配置和管理。

透明代理只能设置在网关上。用户访问Internet的数据报必然都经过网关,如果在网关上设置代理,则该代理对用户来说显然是透明的。透明代理可以看作正向代理的一种特殊情况。

代理服务器通常还提供缓存目标资源的功能,这样用户下次访问同一资源时速度将很快。优秀的开源软件squid,varnish都是提供了缓存能力的代理服务器软件,其中squid支持所有代理方式,而varnish仅能用作反向代理。

在这里整理一下最近这两天整理的https的相关知识。

大家都知道要使用https,需要在网站的服务器上配置https证书(一般是nginx,或者tomcat),证书可以使用自己生成,也可以向专门的https证书提供商进行购买。这两种的区别是自己生成的证书是不被浏览器信任的,所以当访问的时候回提示不安全的网站,需要点击信任之后才能继续访问

而购买的https证书会提示安全

这是因为浏览器中预置了一些https证书提供商的证书,在浏览器获取到服务器的https证书进行验证的时候就知道这个https证书是可信的;而自己生成的证书,浏览器获取到之后无法进行验证是否可信,所以就给出不安全的提示。

下面对具体的一些知识点进行介绍

https简单的说就是安全版的http,因为http协议的数据都是明文进行传输的,所以对于一些敏感信息的传输就很不安全,为了安全传输敏感数据,网景公司设计了SSL(Secure Socket Layer),在http的基础上添加了一个安全传输层,对所有的数据都加密后再进行传输,客户端和服务器端收到加密数据后按照之前约定好的秘钥解密。

Https的发展和密码学的发展是分不开的。大家应该知道加密方式可以大体分为对称加密和非对称加密(反正我就知道这两种)

1 在服务器上生成CSR文件(证书申请文件,内容包括证书公钥、使用的Hash算法、申请的域名、公司名称、职位等信息)

可以使用命令在服务器上生成;也可以使用线上的工具进行生成,线上的工具会把公钥加入到CSR文件中,并同时生成私钥。

2 把CSR文件和其他可能的证件上传到CA认证机构,CA机构收到证书申请之后,使用申请中的Hash算法,对部分内容进行摘要,然后 使用CA机构自己的私钥对这段摘要信息进行签名 ,

3 然后CA机构把签名过的证书通过邮件形式发送到申请者手中。

4 申请者收到证书之后部署到自己的web服务器中。下面会在写一篇关于部署的文章

当然这是不通过CA代理机构进行申请的流程,现在网上有好多CA的代理机构,像腾讯云,阿里云都可以申请https证书,流程都差不多。

阿里云申请证书流程

PreMaster secret


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/380117.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存