LittleProxy的中间件扩展

・5 分钟阅读

  • 源代码名称: LittleProxy-mitm
  • 源代码网址: https://www.github.com/ganskef/LittleProxy-mitm
  • LittleProxy-mitm的文档
  • LittleProxy-mitm的源代码下载
  • Git URL:
    git://www.github.com/ganskef/LittleProxy-mitm.git
  • Git Clone代码到本地:
    git clone https://www.github.com/ganskef/LittleProxy-mitm
  • Subversion代码到本地:
    $ svn co --depth empty https://www.github.com/ganskef/LittleProxy-mitm
                              Checked out revision 1.
                              $ cd repo
                              $ svn up trunk
              
  • Build StatusPublished Version

    LittleProxy -Man-In-The-Middle

    LittleProxy-mitm是启动并运行

    需要在系统上安装Java,然后执行以下命令:

    $ java -jar littleproxy-mitm-1.1.0-shade.jar
    $ curl --cacert littleproxy-mitm.pem --verbose --proxy localhost:9090 https://github.com/

    第一次运行为你的证书颁发机构创建密钥存储,它用于动态生成服务器证书,必须在浏览器中或在系统证书中导入littleproxy-mitm.pem文件,例如:

    必须将浏览器代理设置设置为9090 ,它在简单的Launcher类中被硬编码。当然你也可以选择另一个实现。

    重要安全注意事项

    Mozilla Firefox和Google Chrome实现了自己的证书处理,原因是,在大多数情况下,在Java中处理安全性在大多数情况下都不太安全,查看获取库

    将此依赖项添加到Maven生成中:

    <dependency>
     <groupId>com.github.ganskef</groupId>
     <artifactId>littleproxy-mitm</artifactId>
     <version>1.1.0</version>
    </dependency>

    这个版本对应于LittleProxy,因为它的目的是将它集成为一个模块。

    连接所有内容

    包含LittleProxy-mitm后,可以使用以下方法启动服务器:

    HttpProxyServer server =DefaultHttpProxyServer.bootstrap()
     .withPort(9090) // for both HTTP and HTTPS .withManInTheMiddle(newCertificateSniffingMitmManager())
     .start();

    请在构造函数中提供一个Authority来个性化你的应用程序,你必须描述出。

    请参考在出现HTTPS时解析URI

    大多数情况下,你需要一个URL来处理过滤器中的内容,使用HTTP,originalRequest.getUri()提供了它,但是使用HTTPS,你必须从启动的CONNECT请求中获取主机名,因此,你必须在FiltersSource实现中执行类似的操作:

    privatestaticfinalAttributeKey<String>CONNECTED_URL=AttributeKey.valueOf("connected_url");
     @OverridepublicHttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerContext clientCtx) {
     String uri = originalRequest.getUri();
     if (originalRequest.getMethod() ==HttpMethod.CONNECT) {
     if (clientCtx !=null) {
     String prefix ="https://"+ uri.replaceFirst(":443$", "");
     clientCtx.channel().attr(CONNECTED_URL).set(prefix);
     }
     returnnewHttpFiltersAdapter(originalRequest, clientCtx);
     }
     String connectedUrl = clientCtx.channel().attr(CONNECTED_URL).get();
     if (connectedUrl ==null) {
     returnnewMyHttpFilters(uri);
     }
     returnnewMyHttpFilters(connectedUrl + uri);
     }
    • CONNECT上,你必须始终返回HttpFiltersAdapter,因为它必须绕过所有的过滤,
    • 在上下文中没有保存的connected_url,它是纯HTTP,没有HTTPS ,
    • 在这个通道上的请求必须将保存的connected_urloriginalRequest中的URI连接起来,

    解决已知问题的方法

    
    387481 2015-05-19 21:34:39,061 WARN [LittleProxy-ProxyToServerWorker-6] impl.ProxyToServerConnection - (HANDSHAKING) [id: 0x7e0de7f2, /192.168.178.30:1475 => www.archlinux.org/66.211.214.131:443]: Caught exception on proxy -> web connection
    
    
    io.netty.handler.codec.DecoderException: java.lang.RuntimeException: Could not generate DH keypair
    
    
     at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:346)
    
    
    ...
    
    
    Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
    
    
     at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DHKeyPairGenerator.java:120)
    
    
    ...
    
    
    
    
    • 如果我是错误的(通常通常),请自由地修复我,并且不会感到伤害。
    讨论
    Fansisi profile image