Skip to content

模拟实现TLS1.3全部主要加密认证流程的Java HTTP代理服务器🗝️A Java HTTP proxy server with demonstration-only TLSv1.3 encryption&authentication

License

Notifications You must be signed in to change notification settings

ErnestThePoet/TLS-Proxy

Repository files navigation

TLS-Proxy

使用Java编写的HTTP代理服务器,实现了TLS1.3中的全部主要加密认证流程,可为HTTP请求的数据传输提供安全保障。

概览

客户端TLS-Proxy工作在请求数据进入传输层之前的最后一个环节,服务端TLS-Proxy工作在接收到传输层数据后的第一个环节。
TLS-Proxy的典型部署模式如下图所示:

使用方法

编辑配置文件

在开始使用前,需要编辑配置文件来设置代理服务器的运行选项。configs目录下的configs_client.jsonconfigs_server.json分别是客户端和服务端的配置文件。

客户端设置选项说明如下:

  • port: number,客户端代理服务器监听的端口号;
  • timeout: number,客户端代理服务器最大超时时间,单位为毫秒;
  • targetHostPatterns: Array<string>,正则表达式字符串数组,指定了所有需要被加密代理的主机名匹配规则。所有发往其余主机的请求都会被代理服务器丢弃。

服务端设置选项说明如下:

  • port: number,服务端代理服务器监听的端口号;
  • timeout: number,服务端代理服务器最大超时时间,单位为毫秒;
  • proxyPass: string,代理转发目的主机名。对于每一个发送到服务端代理服务器的请求,其请求头中的Host字段都会被改写为此主机名,然后该请求会被转发到此主机。

编写证书提供与校验类

本项目不提供统一的证书格式标准,您需要自行实现handshake.certificate包中的CertificateProviderCertificateValidator接口,实现您自己的证书提供和校验规则。实现后,请相应地修改两个接口的getInstance方法使其返回您的实现类对象。请注意TLS1.3中的传输信息签名校验(见文档顶部链接中的Server Certificate Verify部分)也是证书校验的一部分。

启动程序

本代理服务器需要在客户端和服务端同时运行。客户端运行时需要添加命令行参数CLIENT,服务端则添加SERVER。 客户端代理服务器运行后需要在系统中设置全局代理。在服务端运行一个纯HTTP后端服务,如果您的配置文件正确,那么您就可以在客户端通过服务端IP:服务端代理服务器监听端口号正常访问服务端的HTTP服务。

在同一台电脑上调试的说明

本项目也可以在同一台电脑上同时运行客户端与服务端进行调试。为了确保所有的请求都通过客户端代理服务器,而不会被意外地直接发送给服务端代理服务器,请在Windows系统的代理服务器设置中,清空“请勿对以下列条目开头的地址使用代理服务器”输入框的所有内容,并取消“请勿将代理服务器用于本地(Intranet)地址”的勾选。同时,发起HTTP请求时,主机名请使用本机IPv4地址:服务端代理服务器监听端口号而不要使用localhost:服务端代理服务器监听端口号127.0.0.1:服务端代理服务器监听端口号

对前端的说明

要使用此代理服务器,请确保前端页面引用的所有资源的URL全部在被代理的主机名下。所有从第三方CDN引用的资源都不会被成功加载。

About

模拟实现TLS1.3全部主要加密认证流程的Java HTTP代理服务器🗝️A Java HTTP proxy server with demonstration-only TLSv1.3 encryption&authentication

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published