## 一、概述
一套基于平台的代理服务器,与平台无缝整合,可以使用平台所有基础设施,并提供二次开发接口,以实现特定的业务逻辑;
![](https://img.kancloud.cn/f0/ac/f0ac2b1a4adcb7017cc23dc104944437_839x566.png)
支持级联代理服务器,更方便业务的场景规划设计,实现更复杂的业务逻辑;
![](https://img.kancloud.cn/c0/58/c05843fcd8c82ccd44f44bd4f61c3f14_1029x568.png)
## 二、应用场景
这里实现了自己的网络服务中间容器,那么,所有的需要通过网络协议实现的业务监控,报文监控和行为监控等都可以实现了;
例如,流量统计、限速、安全行为审计、数据抓包分析、网络安全监控等,都可以在这个容器中实现;
## 三、二次开发
平台提供了一个定制业务干预的接口UniFullResponseIntercept,只要实现它,并将实现类配置到配置文件中server.proxyserver.logic.clazz即可;
下面举实际例子(也是平台内置的默认实现)来说,
```
public class DefaultLogic extends UniFullResponseIntercept
{
@Override
public boolean match(HttpRequest httpRequest, HttpResponse httpResponse, HttpProxyInterceptPipeline pipeline)
{
return ProxyServerUtil.isCurrentResponseJson(httpResponse);// HttpUtil.checkUrl(pipeline.getHttpRequest(), ".*jinritemai.com.*") && HttpUtil.isHtml(httpRequest, httpResponse);
}
@Override
public void handleResponse(HttpRequest httpRequest, FullHttpResponse httpResponse, HttpProxyInterceptPipeline pipeline)
{
ProxyLog log = new ProxyLog();
log.setGENERATE_TIME(DateUtil.getDateStr(100));
log.setRESPONSE_BODY(httpResponse.content().toString(Charset.defaultCharset()));
log.setRESPONSE_HEADER(httpResponse.headers().toString());
log.setRQEUST_ADDR(httpRequest.uri());
log.setRQEUST_HEADER(httpRequest.headers().toString());
serviceLocator.getTransactionalDao().add(log);
}
}
```
纳入配置:
```
server.proxyserver.logic.clazz=org.wbase.framework.server.proxy.logic.DefaultLogic
```
>[info] 上述默认实现,就是把代理服务器中,所有客户端请求的目标服务器网站的数据包记录下来到日志表中;
## 四、配置项
平台对代理服务器,设定了如下配置项;
```
server.proxyserver.loadedctx=
server.proxyserver.loglevel=warn
server.proxyserver.port=9999
server.proxyserver.cert.download.enable=false
server.proxyserver.catch.content.type=json
server.proxyserver.logic.clazz=org.wbase.framework.server.proxy.logic.DefaultLogic
server.proxyserver.log.keep.timelimit=5
server.proxyserver.preproxy.enable=false
server.proxyserver.preproxy.type=http
server.proxyserver.preproxy.host=127.0.0.1
server.proxyserver.preproxy.port=3309
```
server.proxyserver.port,设定当前代理服务器运行的端口;
>[danger]
> 1、支持前置代理,就是代理服务器自身,使用另外一个代理服务器;
> 2、基于前置代理,可以实现代理级联(理论上支持无限级级联,但实际支持一级就能解决集群问题),实现代理集群了;
## 五、PC浏览器使用代理服务器
首先、浏览器共享代理设置,如
![](../../../images/screenshot_1624850814061.png)
地址填写当前您运行代理服务器的计算机外网IP地址,端口为您上面配置项中配置的端口地址;
然后、要把证书导入到客户端的浏览器中受信任机构证书中去;
![](https://img.kancloud.cn/7a/0d/7a0deb2a3218bcb47031b15b5516311f_1361x697.png)
![](https://img.kancloud.cn/64/b7/64b7806deba2467bb4ff383f6495030c_592x603.png)
![](https://img.kancloud.cn/45/34/45344e76e64cc49dd536456e02d1962a_618x635.png)
![](https://img.kancloud.cn/0e/ae/0eaecb26994ab22d95c2ca00354b1045_618x635.png)
这里,需要导入证书,那么这个证书从哪里获取呢?
```
http://代理服务器IP:代理服务器端口
```
![](https://img.kancloud.cn/9b/31/9b31ea6b0283ed52f98e71337df756be_1366x736.png)
即可下载该证书了;
到这里,就完成了完整的使用流程,当您的浏览器配置好代理服务器之后,访问的所有数据,都会留下记录了;
## 六、手机应用使用代理服务器
### **快速开始**
![](https://img.kancloud.cn/15/de/15de023204b68647f6fa99f0503a878e_296x487.png)
下载证书:访问PC端部署的Fiddler,通过手机浏览器,访问地址:
http://【fiddler电脑IP地址】:【fiddler设置的端口号】,例如本例中的http://192.168.253.1:8888;
![](https://img.kancloud.cn/e1/6b/e16bb5451c334e41bcd93704e4cfd8f6_291x503.png)
![](https://img.kancloud.cn/b3/27/b32783aba701b8f698f1bf3c3ad677eb_300x502.png)
安装证书:
手机打开设置—安全和隐私—凭据存储—从SD卡安装,选择步骤4中下载的证书,进行安装,完成;或者是直接点击证书,命名,即可;
设置完毕,通过手机打开应用,就能被抓包了;
> 特别注意:
> Android 7以及以上,系统不再信任用户安装的证书,Android 7之前的版本把CA安装到用户证书下即可,所以为了能正常抓包,需要把ca证书安装到系统证书下;
### **SSL PINNING**
SSL PINNING技术在开发时就将服务端证书一块打包到客户端里。这样在HTTPS建立时与服务端返回的证书比对一致性,进而识别出中间人攻击后直接在客户端侧中止连接;
实际上,即使是这样,也是有办法解决的;
> 如:root安卓机,然后安装Xposed和其JustTrustMe,再进行代理设置抓包即可,相对来说,麻烦一点;参考:[SSLPinning](%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1/SSLPinning.md)
## 七、其他
证书及https的知识,可以参考:
[https](%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1/https.md)
- 前言
- 01、系统平台
- 系统管理
- 组织类型
- 单位管理
- 基本功能
- SAAS功能
- 组织管理
- 角色管理
- 人员管理
- 账号管理
- 账户体系
- 账号绑定
- 账号锁定
- 团队管理
- 模板管理
- 补丁管理
- 字段管理
- 静态字典
- 动态字典
- 系统配置
- 菜单配置
- 路由配置
- 编码规则
- 访问控制
- 系统参数
- 字典配置
- 参数定义
- 参数配置
- 属性定义
- 属性设置
- 树形定义
- 树形设置
- 系统监控
- 业务维护
- 工作监控
- 调度监控
- 导入监控
- 日志管理
- 在线监控
- 附件管理
- 附件监控
- 附件应用
- 附件授权
- 上传监控
- 字段监控
- 系统提醒
- 场景配置
- 事件监控
- 提醒记录
- 事件历史
- 日期设置
- 节假日期
- 工作时间
- 日历编制
- 工作日历
- 开放平台
- 微信应用
- 配置信息
- 更新菜单
- 钉钉应用
- 配置信息
- 开放服务
- 应用设置
- 服务管理
- 请求监控
- 请求跟踪
- 移动应用
- 发布管理
- 导航菜单
- 个人管理
- 个人资料
- 内部消息
- 短信中心
- 流程管理
- 流程定义
- 流程环节
- 处理人
- 流程提醒
- 流程签收
- 流程目录
- 流程微调
- 转移动作
- 定义校验
- 流程绑定
- 流程实体设定
- 单业务多流程
- 动态表单绑定
- 环节字段设定
- 转移路由设定
- 流程监控
- 流程催办
- 流程会话
- 流程启动
- 通用待办
- 流程驱动
- 通用已办
- 示范实例
- 流程启动
- 流程待办
- 流程已办
- 常见问题
- 表单管理
- 预留字段
- 字段定义
- 业务应用
- 动态辅表
- 辅表定义
- 辅表应用
- 辅表监控
- 动态主表
- 主表定义
- 业务定义
- 元数据
- 产生机制
- 应用场景
- 02、技术平台
- 重要组件
- 表单引擎
- 流程引擎
- 基础设施
- 系统安全
- 服务集成
- 核心组件
- 核心平台
- 调度容器
- 代码调试
- 相关配置
- 常见问题
- 多线程
- 工作容器
- 开放服务
- 富客户端
- 代理容器
- https
- SSLPinning
- 03、手机应用
- 参数配置
- 技术平台
- 功能设计
- 系统功能
- 应用升级
- 业务模块
- 04、微信应用
- 参数配置
- 多公众号
- 技术平台
- 业务功能
- 平台功能
- 微信客服
- 微信公号
- 05、开放服务
- 接入示例
- 实施方案
- nginx安装
- nginx配置
- nginx运行
- nginx限流
- 实现方案
- 业务操作
- 代码示意
- 06、常见问题
- 性能优化
- 启动优化
- 解决方案
- 实体操作冲突
- 算法说明
- 检验算法
- 注意事项
- 浏览器
- 插件
- 邮箱配置
- 系统维护
- 维护日志
- 维护脚本
- 开发环境
- 07、版权信息
- 平台版权
- 产品版权
- 后记