From bde0798a91e32524485c4e1652aab057a29ed2da Mon Sep 17 00:00:00 2001 From: caoliuyi Date: Fri, 14 Aug 2020 14:46:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 8 ++ README.md | 112 +++++++++++++++++- certs/ca/ca.crt | 19 +++ certs/ca/ca.key | 27 +++++ certs/server/server.crt | 67 +++++++++++ certs/server/server.key | 27 +++++ certs/server/server.pk8 | 29 +++++ certs/users/client.crt | 68 +++++++++++ certs/users/client.key | 30 +++++ certs/users/client.pk8 | 29 +++++ entrypoint.sh | 15 +++ img/intro.png | Bin 0 -> 11453 bytes logback.xml | 20 ++++ pom.xml | 11 +- run_fakeserver.sh | 12 ++ run_sslendpoint.sh | 11 ++ .../ChannelUtils.java | 2 +- .../Configuration.java | 2 +- .../Connection.java | 4 +- .../ConnectionFromClient.java | 2 +- .../ConnectionFromClientHandler.java | 3 +- .../ConnectionToProxy.java | 6 +- .../ConnectionToSslEndPoint.java | 13 +- .../ConnectionToSslEndPointHandler.java | 2 +- .../Constants.java | 2 +- .../DataTransferHandler.java | 4 +- .../EnvProConfiguration.java | 8 +- .../FakeProxyServer.java} | 14 +-- .../FakeProxyServerLauncher.java} | 8 +- .../java/com/fd/proxytunnel/Launcher.java | 20 ++++ .../SslEndPointServer.java | 2 +- .../SslEndPointServerLauncher.java | 3 +- .../StateHandler.java | 2 +- .../java/com/fd/httpproxytunnel/AppTest.java | 38 ------ 34 files changed, 535 insertions(+), 85 deletions(-) create mode 100644 Dockerfile create mode 100644 certs/ca/ca.crt create mode 100644 certs/ca/ca.key create mode 100644 certs/server/server.crt create mode 100644 certs/server/server.key create mode 100644 certs/server/server.pk8 create mode 100644 certs/users/client.crt create mode 100644 certs/users/client.key create mode 100644 certs/users/client.pk8 create mode 100644 entrypoint.sh create mode 100644 img/intro.png create mode 100644 logback.xml create mode 100644 run_fakeserver.sh create mode 100644 run_sslendpoint.sh rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/ChannelUtils.java (94%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/Configuration.java (98%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/Connection.java (89%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/ConnectionFromClient.java (98%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/ConnectionFromClientHandler.java (94%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/ConnectionToProxy.java (97%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/ConnectionToSslEndPoint.java (94%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/ConnectionToSslEndPointHandler.java (91%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/Constants.java (97%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/DataTransferHandler.java (93%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/EnvProConfiguration.java (96%) rename src/main/java/com/fd/{httpproxytunnel/FakeHttpProxyServer.java => proxytunnel/FakeProxyServer.java} (87%) rename src/main/java/com/fd/{httpproxytunnel/FakeHttpProxyServerLauncher.java => proxytunnel/FakeProxyServerLauncher.java} (55%) create mode 100644 src/main/java/com/fd/proxytunnel/Launcher.java rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/SslEndPointServer.java (99%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/SslEndPointServerLauncher.java (93%) rename src/main/java/com/fd/{httpproxytunnel => proxytunnel}/StateHandler.java (96%) delete mode 100644 src/test/java/com/fd/httpproxytunnel/AppTest.java diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ac1491d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM openjdk:8 +LABEL MAINTAINER anexplore@github.com + +ADD run_fakeserver.sh run_sslendpoint.sh entrypoint.sh logback.xml proxytunnel-jar-with-dependencies.jar certs /home/proxytunnel/ +WORKDIR /home/proxytunnel +RUN chmod 755 run_fakeserver.sh run_sslendpoint.sh entrypoint.sh +ENTRYPOINT ["./entrypoint.sh"] +CMD ["fakeserver"] diff --git a/README.md b/README.md index 5b2a800..0f90939 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,111 @@ -# Http Proxy Tunnel +# Proxy Tunnel -建立流量加密转发通道 -浏览器 -------FakeHttpProxy------加密流量------ FakeHttpProxy------解密流量------ 最终目标 HttpProxy \ No newline at end of file +### 建立TCP流量加密转发通道从而可以更安全的使用Proxy + +![intro](img/intro.png) + +Fake Proxy 与 Ssl Endpoint 之间使用SSL的双向认证。 + +* Browser: 想要使用Real Proxy的客户端 +* Fake Proxy: 假代理,这个代理只是接收browser(其它使用代理的客户端)的TCP流量,并将流量加密转发给ssl endpoint或者将ssl endpoint的加密流量解密传递给brwoser +* Ssl Endpoint: 流量转发中继,其负责接收fake proxy的加密流量解密后传送给最终Real Proxy 或者将real proxy的流量加密后传送给Fake proxy +* Real Proxy: 最终要使用的Proxy + +## 使用说明 +### Fake Proxy 与 Ssl Endpoint证书 +Fake Proxy 与 Ssl EndPoint 之间需要进行证书的双向认证,因此需要分别为其生成证书以及密钥文件; + +建议使用自签发的CA证书,分别生成Fake Proxy 与 Ssl Endpoint的证书与密钥 + +> certs文件夹里已经生成了一套自签发证书 偷懒可以直接使用 + +### 配置 + +|配置项|是否必须|默认值|说明| +|:---:|:----:|:---:|:---:| +|proxyHost|ssl endpoint必须配置|-|real proxy的host| +|proxyPort|ssl endpoint必须配置|-|real proxy的port| +|serverBindLocalAddress|false|0.0.0.0|fake server 和ssl endpoint的绑定地址| +|serverBindLocalPort|false|80|fake server和ssl endpoint的绑定端口| +|maxConnectionBacklog|false|1000|fake server 和 ssl endpoint的tcp backlog| +|workerEventGroupNumber|false|cpu逻辑核数|io worker thread number| +|idleTimeoutForClient|false|60000|idle timeout when no io, ms| +|connectionTimeoutToProxyServer|false|10000|fake proxy 与 ssl endpoint连接超时时间| +|openNettyLoggingHandler|false|0|是否开启netty LoggingHandler, 1打开| +|sslEndPointHost|fake proxy必须配置|-|ssl endpoint地址| +|sslEndPointPort|fake proxy必须配置|-|ssl endpoint端口| +|keyCertChainFile|必须|-|fake proxy或者 ssl endpoint的证书| +|keyFile|必须|-|fake proxy或者 ssl endpoint的证书密钥| +|keyPassword|否|-|密钥密码| +|trustCertFile|必须|-|签发证书的根证书CA| + + +### 启动 + +* Fake Proxy: 127.0.0.1:8080 +* Ssl Endpoint: sslendpoint.com:3389 +* Real Proxy: http proxy (realproxy.com:3128) 账号密码 user:password + +#### Browser +在Browser中配置代理地址为 127.0.0.1:8080 账号密码: user:password + +#### Fake Proxy +修改run_fakeserver.sh + +~~~shell script +-DserverBindLocalAddress=127.0.0.1 -DserverBindLocalPort=8080 +-DsslEndPointHost=sslendpoint.com -DsslEndPointPort=3389 +-DkeyCertChainFile=certs/users/client.crt -DkeyFile=certs/users/client.pk8 -DkeyPassword=123456 +-DtrustCertFile=certs/ca/ca.crt +~~~ + +~~~shell script +sh run_fakeserver.sh & +~~~ + + +### Ssl EndPoint +修改 run_sslendpoint.sh + +~~~shell script +-DserverBindLocalAddress=0.0.0.0 -DserverBindLocalPort=3389 +-DproxyHost=realproxy.com -DproxyPort=3128 +-DkeyCertChainFile=certs/server/server.crt -DkeyFile=certs/server/server.pk8 -DkeyPassword=123456 +-DtrustCertFile=certs/ca/ca.crt" +~~~ + +~~~shell script +sh run_sslendpoint.sh +~~~ + +### Docker 模式 +拉取镜像 + +~~~shell script +docker pull blueoom/proxytunnel +~~~ + +> 通 -e 传递环境变量来设置serverBindLocalAddress等配置项 + +启动fake server + +~~~shell script +docker run -d --rm -e DOCKER_MODE=1 -e serverBindLocalAddress=0.0.0.0 -e sslEndPointHost=xxxx -e xxx=xxx -p 8080:8080 blueoom/proxytunnel fakeserver +~~~ + +启动ssl endpoint + +~~~shell script +docker run -d --rm -e DOCKER_MODE=1 -e serverBindLocalAddress=0.0.0.0 -e proxyHost=xxxx -e xxx=xxx -p 3389:3389 blueoom/proxytunnel sslendpoint +~~~ + + +### 没有做的 +* test测试用例未上传 +* browser与fake proxy,fake proxy 与 ssl endpoint , ssl endpoint 与 real proxy之间,没有对整条链路上各个节点进行流量发送控制,在各个网络传输速度不对等的情况下可能会有问题 +* fake proxy 与 ssl endpoint之间的流量可以加以混淆 + + +### 注意 +* 如果real proxy是为了越过gfw且real proxy是http类型,那么fake proxy与browser一定要在一个内网里 \ No newline at end of file diff --git a/certs/ca/ca.crt b/certs/ca/ca.crt new file mode 100644 index 0000000..753afdc --- /dev/null +++ b/certs/ca/ca.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDBjCCAe4CCQD7hJvZGf30AzANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJV +UzELMAkGA1UECAwCVVMxCzAJBgNVBAcMAldDMRwwGgYDVQQKDBNEZWZhdWx0IENv +bXBhbnkgTHRkMB4XDTIwMDgxMTAzNDM1NFoXDTMwMDgwOTAzNDM1NFowRTELMAkG +A1UEBhMCVVMxCzAJBgNVBAgMAlVTMQswCQYDVQQHDAJXQzEcMBoGA1UECgwTRGVm +YXVsdCBDb21wYW55IEx0ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AOQIfbhl+SlVn89FkK5hzJ3oVlYadq2IUZMlCfwoVCqnZJyQNTEMWZWIPhjkoR/Y +WDg9SKoDFmCOrixOYR+QRoqaVwtQbw56U7A/sJPUsaQyek34toY/nJutOpsoworb +IhrrHDaP9+Z8FsgbsVcQApucZiLomiIlevtTiHptaUj9AtVxpjpGKctYYhkwsK+d +g3MafFQkInrb3aUZEJVWUYxkf2Qgpx2oq9y2/R6Y33nf+BRfCoI3XkbLyeJeUrVZ +bdw0MSpRZFOKExSIrq8K5yWkn2JbPB/QgXjJmHdI/cNNjDeQ63hO4uuZ1qaxWhEC +5RQhrCinLN20CumitVg2FxECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAreS0BcsZ +txvpW2J/ku/Zrm5VGSuvtHRVIJqxCDVHzneg1WMYPZNjY9RCs4NrKS+MveeocYSZ +nuqYs4YZyisY0+eAWJjsZm4Igzrrc675EqeuLTx69NVCHJW0huNeWc236dL7y4o/ +wKnDteFgZm/r7/5WcTV+di4kgAhca1ppK8ybX2ktNGO0uk2cZMHSQQSCT1/qR1wg +9ufhiIaWMzgcmFUzw/PG1Cu6SnynwfwVJGxP0PDFtttO55cSKaP7z+icko/ce3p9 +AKtY+fjtCEpA6ylHo4oQojuB8ZzYW19kvNOlu9EoaFrSDQvr3LalWb7s7v3K2hsk +6CSGekaiX/DnWA== +-----END CERTIFICATE----- diff --git a/certs/ca/ca.key b/certs/ca/ca.key new file mode 100644 index 0000000..f45b433 --- /dev/null +++ b/certs/ca/ca.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA5Ah9uGX5KVWfz0WQrmHMnehWVhp2rYhRkyUJ/ChUKqdknJA1 +MQxZlYg+GOShH9hYOD1IqgMWYI6uLE5hH5BGippXC1BvDnpTsD+wk9SxpDJ6Tfi2 +hj+cm606myjCitsiGuscNo/35nwWyBuxVxACm5xmIuiaIiV6+1OIem1pSP0C1XGm +OkYpy1hiGTCwr52Dcxp8VCQietvdpRkQlVZRjGR/ZCCnHair3Lb9Hpjfed/4FF8K +gjdeRsvJ4l5StVlt3DQxKlFkU4oTFIiurwrnJaSfYls8H9CBeMmYd0j9w02MN5Dr +eE7i65nWprFaEQLlFCGsKKcs3bQK6aK1WDYXEQIDAQABAoIBACzWFpIpSsJ72X5R +uU7wX+E0i7VGYstgIFoEUGBKNbJlU30NRcgtG3gxX7RZT+0JBt+X/S+gh8fYhhqk +Fqi0H4qlKjRJTmzUVJw1Ca0nhv44BqBKJOlknJBnkTxs2UOgLqaIT/XSfPXOtFQI +TehGd5zNNa/reFL6d6HvHMiltqvo5IjU5W14h19LjFdb4eUjOQidyIJ2+Zd6zk9a +o/cDXI1tZIhuKaMJx3fXTsdVI1h+DQrbj5zjNzPdeLy3s71zMD1lPAAg6c3WgrNI +U1U+cQ/yEyShr7aXKSg0G59IPg9vywqX1euZ1XP9Fz0ia00RiVIMZkZwIqrotQRg +461ncYECgYEA/G9NOqzpsEqtNRPIBFwthEyolZxo1tzHuTmaMrdLri7pqf3NOSMQ +7e5DhedjyBJX+9OigH4Iolvj5mtBD9uKYkGb2F1uW9Mo/H9rgbAXEjkYdpHnIZ3c +BRk6L/VbaD+jy1l8laEF/EIbd+10Of0P9/6IluGrwpy4u20TdsNDkekCgYEA50D2 +pHt7cxvtVq7dqXwP6zUXFsABnyrD9xTRpOWk2cikE8i7F370gi41CGMxiq1k1LNQ +iQ3ID+RL9s+//6OshgKB6OKQHJdrDO50BRzL5Nlpzva9XUsbJq6GO72R7tcvU43h +d4GLtghJLs0ShdgsfdcQUMfeMHYT08ap3U87uukCgYBZ4auG8+B1Y/GOT4/NdaDD +VaRFOR7fOldm7UqpOjiZOZz7aSI0cPbrMQYb3IrbxyRKx006ISYj4UIhXhkZc1sv +pxq9jG7qBSK33QrDb5aXZ3r9ZO/+OT4JFrVwNBWq5dYFZsSEZoRCEKvFJOhYaXHR +JHEwAARvU+w22ByxEc+yWQKBgQCp1qhN/PKZg7U3qI3bX+ZBFGi0qKeIQlxSJtQh +ixcba6Q1c4MUqoTg5xbD5jYIZ3haTqejQJ/iLAUuaz3Tfl3Cviyy4VJ97ScOBELp +TlDg7lwrSEOjNPnn2t1zGrMG+rsjXlxs7JOzSTqWSL6F1lI2ybCN43xnkxDUxF8U +zpBLoQKBgQDsCsaM2Q9p/xz8YyZ7VjmzCkNyNShSTgO/vxtGOy4i/atUUnMGAAez +qX2TsmNynul4Q8+cfFyEz3mXooh3SQFTJkwjhdEbbZErj1YeWvJbptbxyoOcG+wJ +OmpBqXoDJw3qg5v/ID6glZva9tdwahu6It4mFbUVtuDtXUxFR4jX4A== +-----END RSA PRIVATE KEY----- diff --git a/certs/server/server.crt b/certs/server/server.crt new file mode 100644 index 0000000..1534db7 --- /dev/null +++ b/certs/server/server.crt @@ -0,0 +1,67 @@ +Certificate: + Data: + Version: 1 (0x0) + Serial Number: 43981 (0xabcd) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, ST=US, L=WC, O=Default Company Ltd + Validity + Not Before: Aug 11 03:52:51 2020 GMT + Not After : Aug 9 03:52:51 2030 GMT + Subject: C=US, ST=US, L=US + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:ea:a4:3d:fb:36:d9:f4:1a:aa:85:43:23:04:a6: + 2a:bc:35:40:d5:f4:46:a9:7e:49:b8:48:93:c2:ca: + 6c:e6:66:6e:06:f4:19:ee:80:85:24:d5:08:ec:f4: + 78:e0:db:69:ab:f9:80:ae:02:25:29:e3:76:8c:c1: + 64:00:92:91:22:b9:4d:8c:aa:70:b7:91:d7:5c:13: + c0:81:7f:c8:16:c5:e3:4f:35:18:3e:8e:dd:7c:8d: + 3e:41:a7:90:10:1c:39:b8:3d:53:89:08:ea:ed:9f: + 34:60:6e:e4:48:6f:7c:da:f6:2d:07:c1:af:01:6c: + af:f4:61:b8:37:6c:08:87:4d:19:22:2c:68:38:1c: + f2:f0:07:6c:ea:f4:e3:fa:04:1f:99:91:d2:00:74: + eb:fc:e1:4e:3f:fd:06:4f:f5:99:89:54:51:73:09: + 9f:48:dc:26:c8:df:d7:db:cf:5c:af:58:54:20:14: + 64:0c:db:e4:bd:bf:ee:de:b9:6c:f0:57:be:03:ed: + 6d:d3:5d:aa:59:d2:f4:e8:34:5f:53:73:2a:6b:0e: + 69:f9:21:3a:e4:1a:29:24:86:e7:50:90:86:8e:96: + 09:d1:39:09:ef:49:f8:ae:64:48:d9:88:53:6e:9a: + aa:2d:57:e7:4e:db:33:37:1f:ac:03:ac:2a:19:d5: + b8:bb + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 77:55:db:cc:1d:f5:28:4d:dd:01:c6:06:39:3f:36:19:6f:7b: + 1e:01:6e:67:30:d9:10:eb:f3:7d:cb:fd:6a:e7:79:ac:e4:65: + 94:01:95:98:96:68:f2:81:55:21:e8:c2:82:09:9a:d0:92:7b: + 42:86:26:8d:74:68:66:d1:f5:cb:07:0b:93:5a:63:8c:b5:9e: + 43:62:19:08:1c:35:ad:c8:56:da:9c:c0:ca:29:96:56:49:ad: + 97:2d:a0:1d:ca:bb:bc:95:e7:28:6d:13:3b:3f:c5:05:df:f9: + 54:64:ec:6a:0c:7b:30:f6:43:5a:d2:46:be:da:f1:81:11:20: + 59:1a:8a:8a:1d:cf:a9:c9:fc:99:f4:62:8a:1f:65:e5:cf:d9: + 4f:e7:b8:6f:7d:03:a1:97:6f:b5:77:cd:91:75:07:d0:b4:3a: + e8:93:67:ad:ed:79:ce:7a:4e:8a:69:6c:54:f8:be:a6:91:ad: + 0c:9f:43:33:46:16:73:3b:b0:1a:85:f9:65:82:fb:8a:2e:27: + 84:d8:64:90:9c:9b:64:21:85:69:3d:69:54:cf:5e:a9:42:8b: + 32:a5:4b:96:d2:26:24:35:75:66:2b:e5:73:73:b9:81:2e:1b: + 1b:37:fa:75:49:2d:bc:05:93:a6:32:5e:87:4f:d1:7e:c5:9d: + b5:ea:0a:c3 +-----BEGIN CERTIFICATE----- +MIIC4jCCAcoCAwCrzTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzELMAkG +A1UECAwCVVMxCzAJBgNVBAcMAldDMRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkg +THRkMB4XDTIwMDgxMTAzNTI1MVoXDTMwMDgwOTAzNTI1MVowJzELMAkGA1UEBhMC +VVMxCzAJBgNVBAgMAlVTMQswCQYDVQQHDAJVUzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAOqkPfs22fQaqoVDIwSmKrw1QNX0Rql+SbhIk8LKbOZmbgb0 +Ge6AhSTVCOz0eODbaav5gK4CJSnjdozBZACSkSK5TYyqcLeR11wTwIF/yBbF4081 +GD6O3XyNPkGnkBAcObg9U4kI6u2fNGBu5EhvfNr2LQfBrwFsr/RhuDdsCIdNGSIs +aDgc8vAHbOr04/oEH5mR0gB06/zhTj/9Bk/1mYlUUXMJn0jcJsjf19vPXK9YVCAU +ZAzb5L2/7t65bPBXvgPtbdNdqlnS9Og0X1NzKmsOafkhOuQaKSSG51CQho6WCdE5 +Ce9J+K5kSNmIU26aqi1X507bMzcfrAOsKhnVuLsCAwEAATANBgkqhkiG9w0BAQUF +AAOCAQEAd1XbzB31KE3dAcYGOT82GW97HgFuZzDZEOvzfcv9aud5rORllAGVmJZo +8oFVIejCggma0JJ7QoYmjXRoZtH1ywcLk1pjjLWeQ2IZCBw1rchW2pzAyimWVkmt +ly2gHcq7vJXnKG0TOz/FBd/5VGTsagx7MPZDWtJGvtrxgREgWRqKih3Pqcn8mfRi +ih9l5c/ZT+e4b30DoZdvtXfNkXUH0LQ66JNnre15znpOimlsVPi+ppGtDJ9DM0YW +czuwGoX5ZYL7ii4nhNhkkJybZCGFaT1pVM9eqUKLMqVLltImJDV1Zivlc3O5gS4b +Gzf6dUktvAWTpjJeh0/RfsWdteoKww== +-----END CERTIFICATE----- diff --git a/certs/server/server.key b/certs/server/server.key new file mode 100644 index 0000000..142daf3 --- /dev/null +++ b/certs/server/server.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEA6qQ9+zbZ9BqqhUMjBKYqvDVA1fRGqX5JuEiTwsps5mZuBvQZ +7oCFJNUI7PR44Ntpq/mArgIlKeN2jMFkAJKRIrlNjKpwt5HXXBPAgX/IFsXjTzUY +Po7dfI0+QaeQEBw5uD1TiQjq7Z80YG7kSG982vYtB8GvAWyv9GG4N2wIh00ZIixo +OBzy8Ads6vTj+gQfmZHSAHTr/OFOP/0GT/WZiVRRcwmfSNwmyN/X289cr1hUIBRk +DNvkvb/u3rls8Fe+A+1t012qWdL06DRfU3Mqaw5p+SE65BopJIbnUJCGjpYJ0TkJ +70n4rmRI2YhTbpqqLVfnTtszNx+sA6wqGdW4uwIDAQABAoIBAB8x8M+aTkXG2c7X +yysOEHZvOgx36oEUOibW91YZZXsIOS6Re3Ua/xiTfhlKs1tpsFXd2P7JaDl2dUdn +Wq08zzDno+jErDGroQ8rzRcqbuagLoVUUMHYapfpi1JdPaj2p7HX7Wg1mE45MVR0 +ycLbl6Tgv8HdPTAaTBZYe45avZOHKlCqbqbgZ4GuzTLq+O4i8CFPFwKCyFGqv6sZ +OfiGJ/aKDvBcuneXw9xanT37lNDng7wIQ6IBKjrvQWArpnvuagVsQzPe2XeiQTcW +Gr25c+mv6YjrMb3NTXfiBDFzI6lwT/BZwy5eQpINDTJPlWG9FmSRHcCAc5Xdn/0V +b4iXQNkCgYEA/W+kNzA4Bcyiz6Cz+/lIn/KODdx3L2wSao+d3KusIaVHYfL5sPsz +Bevf0EUnx3cA8HWqFPKP4OQWbqvSBKO0mFBySWRrUoag0jh8sWZypifINkUsp+Hh +3Dg5dJhJNewlqLhBB3U/WLYbBNwa909bPYITnBlfLVd5Sv/BaaNKxJUCgYEA7QPt +BOQToaeosc52+PPliRsfnECdXuJ1AHy467aO+Gn4Ykfslw+DH/p0p/5JtxynheEB +g/OyG8OGDsYxKjMMka62gPOSm8yfYUI7qmexZzrYzv0QcBMGWBymaagb6ldIO7R2 +vs68LarKCXObBw2xeqoqKhP0Tsn11Jw3toCCZA8CgYBBHxbLN5CtrM+JGnolHQEU +WHc4CJZ3kQWKbCzcLyCj5JxbBtwyJdoOg3WXRq3aCzIql5GEoG9oEjPRbEUi/A3D +tagoQ61wHzfjzK/9xZ1gJIjFqTC4Usp+k9PvqdHmES/8EpxjFjWYzfJTZVtogPOo +8muniL10IS4Bn4ZLZrInoQKBgBxGHZ45vwXHxF4BrTuhjL5AWBMBukQ5a4+1UTH9 +QyzrJ1BCGD0lApVsAUKRGSYY6vsTjmS5S4P4XSOiDPdlw5gVaXwUkma3kEO/7PI1 +EHqqEHcQxUc5XcZhFJECFuJrqxhEPO4iJ1yjRRq/ibzbq1Jgvkrqungzq3nDcPn6 +dpONAoGAHmft/wccg4yMMQE82nO877CDmh7nTvD3hTE+9Sp9NAhMRmMOnsEX0ETX +w3TgJW6zCkuHvQeKMQJsidDnBWKZYiHOXa2SM4L+4lRA6KjA+Hank+C/eBsNeyT3 +rghcb8r717BtX5ELjjoLeyXAdp9mPdZUKwj1+4SsbszrBn+8aGw= +-----END RSA PRIVATE KEY----- diff --git a/certs/server/server.pk8 b/certs/server/server.pk8 new file mode 100644 index 0000000..aa0602f --- /dev/null +++ b/certs/server/server.pk8 @@ -0,0 +1,29 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIE6TAbBgkqhkiG9w0BBQMwDgQIigW5WF9gEpECAggABIIEyPAcor34Y1xRo+18 +bwAIHVW6FW5wdpoK6bQ3Bo7OGA074pMvJSjua3ylLni/YC0bqXRdKNLXVoPHrqqt +a8ITk6NsZK5FU6RNhJfejIS69/DnHuYhBj2kS+DW++KvvUyVeQldGay9j11smLQ7 +ryBfHCnetVn9UjbJ1jlPvqBWa5FqPYPUVd5ArfJfc3ZNWyH6t11vq9VYK+oxJSRj +Ynswh/7pf/dBQtFy6mOyIo/qX12iCWg6e/J9azeJbS4XtpP6lzDqfAtcgR+7WznL +AEJ+xwsJSGnJMYJcObDe3O32fTnLcoub8+qvZn8T+anrG9tzcGWgmUsukwm58rrB +Nvrf9Yv4tdhTehDPKmHLMourxdGM+q1o5yhl0Ak101J5P/t2vVNkO+UerCoRNFSK +KFtQuSDu/EbhbzWrnQYO4LoXrj8t1Dffjdhh+jQWuwyTU/E5qI/9WCVfWhEwod7/ +avIGZMWjwJ9JHAiILeJ2Xo6e7yI27IJZrLWXZYF9Bkijj9FCW46tQHL6mxQmPt4v +hn9nFrtADKOU29tI+fJEMu6/PnoxlKcIewkDCDurZcHL62/IZIipyhovW488Iuhk +8LVomDgPfV+HQ00AFOPF19OFQx0s81K0b/K9oe2WzGFqzfRaiv3UztnSeDX1vp3P +6jg9AzKWexZGJnV2mmdP9IeWRQe92nsCquxScJrUlwtI5n0xaU76pCce7EgJTZUH +dDcn6HILjpEwrO415z00HwPwkvRrENNHbigPIeZ0t6ZIhHuBSlS840sWijWJ50jC +3SkTfYSzvN/LlSWve4LATRc61KP/gE65A4mBfe4Q/PtX2hhypu4Qt/2XS6zFc1WR +KlKySch0RuUlR3sYFhs9YHfY14T1PbyoX+jKXnNe4jFwVdlWV6F7GCgn+V3YaewS +lmGFUvidmDgcVHHK2hwlcsjHssS58r2PdI42LTEZBTfHz/tPYRqpHHL4uvJSTlQs +WQISwDSDm0fdIdioMKj6ZZdovUnOTCh1qCWpbopbARm1X/qr6nPF0W3ZTwYDN2N4 +vB9oVpJOov5Oe/fsFM+QI7w1PjRRYY1VlKQv/z6UQUUF4zndjmyZiL88diWKdRMl +oAgleE4E2WUYJV2PHa0mkPCz08qNZTEvtmFaqJ72k4mP9XWuJ183k8HVTg4Ovvzc +bvEC5ABuSNGs4CIoYvGzGST1W8NcPugv1KCtZW0rFHluBH35vr0XHvLcYV9KbWIp +BC1c1rdp6qy2Sa/CTNO35Q/LVOBv1yjJANLV93gTvmcLRkPH+S57q1hyqUC0QkeD +CDwMVQdl0TWAIIzO6irK36OuHnuzKVYe6nJKq1QoXAwjWiaBfNGKqyPYZGAC6OQv +dv+IF9gGsBpEYdohRgkQt+MwHwR0XozLfOJtIQBRZnjUqayQAt1Kz5MDlDELaGgj +rZeyIptKYxXJ2OxI1QEtx8jSwtz6LIAMYr4fot88LxQD0d2FY9nQVmTm5gC90ODh +2IcDEGzddj91a71cMNQuoQEx4VbDVcpf31ldFSWOccQnwffUCFOZUzrlgSAIdZ62 +ZfKk1JK8CH4DhAI5Cy+ILJsEzdqt2VKTqDsC28NtNeRLJUg8aUdwIGrzJTW35hdT +VA4ebCCO+o8ZCCtSgg== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/certs/users/client.crt b/certs/users/client.crt new file mode 100644 index 0000000..fad84d7 --- /dev/null +++ b/certs/users/client.crt @@ -0,0 +1,68 @@ +Certificate: + Data: + Version: 1 (0x0) + Serial Number: 43982 (0xabce) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=US, ST=US, L=WC, O=Default Company Ltd + Validity + Not Before: Aug 11 03:58:22 2020 GMT + Not After : Aug 9 03:58:22 2030 GMT + Subject: C=US, O=Default Company Ltd, L=Default City + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:bc:53:10:0c:c6:a5:62:84:98:8d:e6:6b:24:71: + 9a:12:ab:3e:77:4c:44:6b:e5:ee:d4:03:d3:0e:21: + a9:32:60:9c:27:50:5f:d9:da:48:1e:4f:28:ab:fa: + 3c:0c:58:3c:6a:e2:ea:cc:fc:cf:34:d4:56:6b:b7: + 29:05:3a:6b:44:fd:64:31:42:13:25:a5:4e:eb:b4: + 63:45:de:5f:3e:5c:91:cf:08:6e:43:94:1a:14:19: + e6:cb:1f:f1:d4:3c:98:92:14:3a:ab:40:3e:a4:67: + 99:11:26:f0:4f:c1:81:e3:bb:73:35:a4:eb:18:aa: + 73:22:c6:e1:a5:c9:05:9c:27:b9:10:44:8c:db:c7: + 1e:f3:ab:96:37:4f:9d:60:a6:9c:f4:10:e0:4c:4c: + 49:34:aa:f4:c7:0b:56:48:50:35:11:0c:44:06:71: + 1c:d2:c4:9e:2f:0b:d1:0c:7f:ab:67:38:d4:7d:c0: + 6e:49:87:95:db:77:95:40:5e:81:08:b0:54:f8:69: + 3d:89:fa:61:bc:83:75:2b:ec:44:08:c8:5d:2a:f5: + f8:67:41:38:91:30:f1:87:27:19:2e:bf:c0:d0:41: + da:b1:05:cf:8b:0b:06:a5:a4:42:50:90:1c:f9:42: + df:ba:a0:0b:d6:c0:57:bf:c6:44:05:9c:e5:a7:29: + 33:1f + Exponent: 65537 (0x10001) + Signature Algorithm: sha1WithRSAEncryption + 3f:8e:d0:17:f5:f7:98:eb:14:d1:07:ee:ea:ba:5d:6d:e3:5f: + 6a:0d:9b:df:f1:6d:7e:36:2a:b4:10:00:42:56:ca:41:fa:58: + e4:13:f5:4c:4e:58:b4:be:b2:e4:2a:7d:ca:e3:74:2e:f1:fd: + 48:98:b7:ad:6d:dc:80:cf:62:af:d5:e9:06:a6:e1:72:20:17: + d5:c5:62:54:19:f9:6a:8f:a2:26:34:d8:59:c8:88:37:57:17: + e2:73:6d:eb:83:7e:98:9e:9d:df:ee:46:64:27:ec:91:8d:3c: + 1e:bd:96:39:d2:ed:65:66:c2:8d:0e:2d:1c:af:43:ab:b4:0c: + fc:44:d4:7e:98:77:65:a6:74:51:2e:73:0c:5d:36:22:c5:6b: + 53:55:3c:c9:ef:ee:f8:3e:fa:02:71:ef:51:a3:73:fb:e3:3d: + f7:f7:e5:87:98:c5:0f:47:a8:90:a8:4a:75:56:3a:57:bc:a5: + 3d:30:d9:8c:34:57:65:33:98:eb:9c:e9:8a:95:34:99:9e:58: + 43:f4:2e:b5:c8:2b:a7:31:9c:fa:b4:32:d1:32:0f:59:0e:b8: + 6e:f0:b5:ab:58:d2:95:67:9f:7b:5f:b2:16:23:ff:19:50:19: + c9:2d:96:64:71:75:db:2f:29:d4:27:b3:b4:27:ce:8d:08:bc: + 6b:3f:40:92 +-----BEGIN CERTIFICATE----- +MIIC/TCCAeUCAwCrzjANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzELMAkG +A1UECAwCVVMxCzAJBgNVBAcMAldDMRwwGgYDVQQKDBNEZWZhdWx0IENvbXBhbnkg +THRkMB4XDTIwMDgxMTAzNTgyMloXDTMwMDgwOTAzNTgyMlowQjELMAkGA1UEBhMC +VVMxHDAaBgNVBAoME0RlZmF1bHQgQ29tcGFueSBMdGQxFTATBgNVBAcMDERlZmF1 +bHQgQ2l0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALxTEAzGpWKE +mI3mayRxmhKrPndMRGvl7tQD0w4hqTJgnCdQX9naSB5PKKv6PAxYPGri6sz8zzTU +Vmu3KQU6a0T9ZDFCEyWlTuu0Y0XeXz5ckc8IbkOUGhQZ5ssf8dQ8mJIUOqtAPqRn +mREm8E/BgeO7czWk6xiqcyLG4aXJBZwnuRBEjNvHHvOrljdPnWCmnPQQ4ExMSTSq +9McLVkhQNREMRAZxHNLEni8L0Qx/q2c41H3AbkmHldt3lUBegQiwVPhpPYn6YbyD +dSvsRAjIXSr1+GdBOJEw8YcnGS6/wNBB2rEFz4sLBqWkQlCQHPlC37qgC9bAV7/G +RAWc5acpMx8CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAP47QF/X3mOsU0Qfu6rpd +beNfag2b3/FtfjYqtBAAQlbKQfpY5BP1TE5YtL6y5Cp9yuN0LvH9SJi3rW3cgM9i +r9XpBqbhciAX1cViVBn5ao+iJjTYWciIN1cX4nNt64N+mJ6d3+5GZCfskY08Hr2W +OdLtZWbCjQ4tHK9Dq7QM/ETUfph3ZaZ0US5zDF02IsVrU1U8ye/u+D76AnHvUaNz +++M99/flh5jFD0eokKhKdVY6V7ylPTDZjDRXZTOY65zpipU0mZ5YQ/QutcgrpzGc ++rQy0TIPWQ64bvC1q1jSlWefe1+yFiP/GVAZyS2WZHF12y8p1CeztCfOjQi8az9A +kg== +-----END CERTIFICATE----- diff --git a/certs/users/client.key b/certs/users/client.key new file mode 100644 index 0000000..20d5224 --- /dev/null +++ b/certs/users/client.key @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,8F49349DD07FF225 + +Ec+G7R2Z7WZmuNGasGREtms8uFGQjmz1uPah76+NDoHh8WIJ9NMCZ+nvImbKpAbj +FBT4zCfKwg/W9gwF4rsLffYzT6WV/VBxp7P547PRQ+miwpxQH5T/rTOoLHq6/zzD +N7/iTBtbkXcLRwXzlZvdxQ9RvU+rWydnnGd5L0HEsIZMt9al8CEvaYzuXo+1j2nl +EwTnFOJNDlYKsfOojXQII1xAyTNEhr5cY33axlDi/AksMpBLsvHWQvcB0uOh5YcG +9vC7FNRQ0vh234iGW6yf8jQ8jcYjr8qNyViFN8ReJ5Bk4TbGCZetpIPQGuZAzc50 +PW0iCPPkQto2SMHP2/WCFG1xRnbLWVfUYS/SDhHar3bM8pl3onTdu8uNiloowfJ0 +O3vzUPsKl7TrwCqLymgCdHtdcW0KUuM5pBR2iKr33w+QR1YjPkZPapC4Yi96C/Oi +YKHfjvWpEuT3cgqNIe+brr6dRd4l1P22imKFO/SmI3OaVIGLK34uAhxbeollH4iM +nNMgM13K2oY0bHgcYY/cgrz5/z3C/PImpeYARf6QuUl9ccbjmD+aADDEWs42AdOn +PYJPC+xYl6czHfkj4VH7n06ZSIQiY1JkC0FQzUkxCzMKpbfD8AlwzhYdYYsND45b +Ya5V75GzIJr+r1/yOQxln+J0yomrL4snc/git4R90dZ2ny7V4qkanSt5JmZvlt95 +kPetRvUxHtwJFfgf3EZc+iaynOokdyCqSJxVMm942rnt597t/KsrlFfhF7Ysco4+ +2AtWkU46GKdQRxYVRmyVpPR/l4y9KSyC3jDc2QaHlnom1ASniczj7bSVEwoMcK7c +VkiYOycbu6hnkr36YObEwUqBZVHdlG+R33b00Ti9b2mkaYJgD9noJwcDZgKttwyt +zwj/Sq3nTXQJ24MJvY7GxKUa98zSYnwqkTzQSKbzz1Ob6Gb9Pxg531qqhMLaIoAN +AgL1523X/un3HXazpcLQK7lXLhPxfcv9WXNbf3pQ/5nwfYltm+/UH37TMF+uZPor ++IiwgHXkxEKwLluGx45+8nPqJ4bzczEVpAesL43jsqy0keEDtBVHtibaapcgeaj+ +5hGXDVpNu4++FBpcgFgaOE8oHBS1bqPLkVW7GFEx2GEMjZ3HopFPqov8OVP8NP/q +uGWT0n2OYOvx5CeSpy+pMzJZV39R83khI+hea6BbQYE31wKYDjF4nWi+fVKv8tN4 +h8G9cZ4BposucAGABINnSDBZjTCbFXCrSfRDdubqQu0FPwMA8dIB93iFPupTRybp +Qhd8tKWJOhSXwfhCqtozrVSYCBCUkPbMpimARaXu1Z5S1YDxIXoO7Zy0Hmm1juhg +Os5eVZguiagrdgUaBpKvodNMVBxussgZqLSJF7tth1mfiFH8JgGre1rhu42nlRoO +minV5kTPcNWvkxFmKm1j7r/3Ywp1BrMnY6/M9a7hb+6Fvr7RH2X2GY5uEmyUt/0v +k4kvvmcvy8n/9qoVFE6P97ppwPpEQH7TSUXp29ucjmfoHlhLNK9hIAMgBU2phu9N +Z/D7AJwtQSEy1WAOKDQQJVB4bK8gvA2IwOLnO9c8h8pdoN8vzonIB4I0mGYR7+WY +-----END RSA PRIVATE KEY----- diff --git a/certs/users/client.pk8 b/certs/users/client.pk8 new file mode 100644 index 0000000..115b7c6 --- /dev/null +++ b/certs/users/client.pk8 @@ -0,0 +1,29 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIE6TAbBgkqhkiG9w0BBQMwDgQIhu4puZwm6YICAggABIIEyLGJJ6JthVZDX9rL +Ec4MJMDxQ4tbq1fPTq0rXtEbxXu6p4DuKGBxvD+lfUIApvWQzmeojxnrkHgBaeuA +b80eit9Rn1j7Q2hpyIcOob3fufGbE6HLQUr35o7eLGuBipNFwO9CwNXvWjw/rVeJ +1sfMt9R4Vg2gbFrVoEZm2zJWpyHRsHx6G5CnKnZPbjwEbxJvMfciK4evYadc39PG +yUVNOYondnaUTNXkjik+XXjiUGw2uKgBn2SiLehGQbrbGYf9F+gr+aROH5bKUbNr +PEm3uFXtC1itSL4PeY6F6tT0y14Vz2wiFFwkVwdaDTU9HyRSX4CyDigfvNtFFEda +lC8B8bLbMurg3OhB+xjDOf9eoS5NAHX/RnSs3Vq/ePD9y2/Wh95ryg9EB4FCCQt7 +Nh3eI1oH4O+v5248SQRmoZ7yAlskaA6Ej9bmeYRwdwvE05dumxB1Ge/HQ5XZZIaD +m3p6U8f8P5VQwUXnAGlKj9oUc+4MzUnR0GLtEvGchKfMp2TvgBNG+4B8pp5W4ABT +TfJlfREBSNjpSTuM/tz2hl5K9ZO7UMvjJaWsry06ymNf+gGHokXL8USg874ypZ8d +yOikG9WCvoMV7x8QXcKE04PK7Ot4D77L6k7taLFhWoEF9taWALwrIf2U7PwnhD4l +ah3/o3sjkH/zvq8xaxqwgYUBLo+HhD/R+CkzZ3f8mc9XL/WDdspY0+R4D5kgnSjk +doGlBVeYZPsqfVFabx/fQ3XtOZEYdwlYssVgMZQUWlewTnu9IryZruRzITqjH1KX +QMFMtq+xpuDSZcychoE6mayLxgdXyetyTxtANXnQH8bmc/ICD2uHKKUvvNONCIZl +iVoHNlFcXprAf1+laBCXRbEDmu/oBF5LKAMELgXUUgPlnt6Cx/bj3LcNGzlRGZnq +hwwX7KwiflKpqWM+ecRp3mq6NSWBr4lHTtDhiCdXobz4irzoEnyR13JvHQq923jZ +zuhWj2mPs6RZqWuqXqiFh1GxRU30SBycUdbTEFQCtPBYQmzAov3MPQNAGruLKNCh +lrHpHpH/uGcE6rcEVhudv06IzaVw5+q2P1B5qUn4AtGlUNUXLmmc5d8X0y/s/q7K +KkGA46+IUlXkrmyCR6f1EnHpI0bEW0vrvmdo5Pi1T/uf2H/AF4jY7bxtFiwCIQZU +hc8IvusVGmOnx2LAVNW0nA6xnFxKPpkH2gMSvH3Tj9c9F5v4K4d7RpVhCdrQtO8l +BcbSjCxv7CsNR3KbWHR8yl6fn7btIzL54vIxzYIaabes0Bpb5kzaTQlf9OLItXvl +huO9eFZtmkRbaAv+qN42EwZZd+xtCusC3SI1y8sGjKTDwRPKZTFwLmf3jM3rqPpz +7ak1RLqkHSSvWiCcqQAiHSiw16YdihMNLIQrHdtnRt+rIWG9jEsaBlkO9pC8jWoL +ftw4CYmhCVvDhBmWxo0vNuMHkSN5ofkXeIaQqKyP/C4CYgNYrRCAkrR9KfyDhBNI +ETspXWHJVEFIKv8TtW7dPZPSKa9xoZnyMLqD8D1cF9NWZ/vCS7tBttyUPyWDKjBV +uQVmNE2L18llOm4IcU1B4EEWssn3s29ioO4yIuVaAZXoiRZ2nv1UjaOGZdLtax7G +h7vcP24vj1kEoMyMWw== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..acdb38d --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/bash +CMD=$1 + +case $CMD in + fakeserver) + ./run_fakeserver.sh + ;; + + sslendpoint) + ./run_sslendpoint.sh + ;; + *) + exec $@ + ;; +esac diff --git a/img/intro.png b/img/intro.png new file mode 100644 index 0000000000000000000000000000000000000000..b6248d725a15fa8feb8e4056d5e5207a6046ee72 GIT binary patch literal 11453 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 DCvu#i literal 0 HcmV?d00001 diff --git a/logback.xml b/logback.xml new file mode 100644 index 0000000..4bcb0ef --- /dev/null +++ b/logback.xml @@ -0,0 +1,20 @@ + + + logs/proxytunnel.log + true + + logs/proxytunnel.%d{yyyy-MM-dd}.log + 30 + 3GB + + + true + + %date{yyyy-MM-dd HH:mm:ss,SSS} %level [%thread] [%logger\(%line\)] - %msg%n + + + + + + + diff --git a/pom.xml b/pom.xml index ab9fc25..0410aa6 100644 --- a/pom.xml +++ b/pom.xml @@ -2,15 +2,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.fd - httpproxytunnel + proxytunnel jar - 1.0-SNAPSHOT - httpproxytunnel + 1.0 + proxytunnel UTF-8 4.1.50.Final - 29.0-jre 4.13 1.7.30 1.2.3 @@ -68,7 +67,7 @@ - com.fd.httpproxytunnel.FakeHttpProxyServerLauncher + com.fd.proxytunnel.FakeProxyServerLauncher ${project.artifactId} @@ -86,7 +85,7 @@ - com.fd.httpproxytunnel.SslEndPointServerLauncher + com.fd.proxytunnel.SslEndPointServerLauncher ${project.artifactId}-sslendpoint diff --git a/run_fakeserver.sh b/run_fakeserver.sh new file mode 100644 index 0000000..4564de5 --- /dev/null +++ b/run_fakeserver.sh @@ -0,0 +1,12 @@ +#!/bin/bash +DOCKER_MODE=$DOCKER_MODE +if [[ ""$JVM_ARGS == "" ]]; then + JVM_ARGS="-Xmx512m " +fi + +if [[ $DOCKER_MODE == "" && ""$PROS == "" ]]; then + PROS="-DserverBindLocalAddress=0.0.0.0 -DserverBindLocalPort=8080" + PROS=$PROS" -DsslEndPointHost=127.0.0.1 -DsslEndPointPort=8081" + PROS=$PROS" -DkeyCertChainFile=certs/users/client.crt -DkeyFile=certs/users/client.pk8 -DkeyPassword=123456 -DtrustCertFile=certs/ca/ca.crt" +fi +java $JVM_ARGS $PROS -cp .:* com.fd.proxytunnel.Launcher "fakeserver" diff --git a/run_sslendpoint.sh b/run_sslendpoint.sh new file mode 100644 index 0000000..0c58498 --- /dev/null +++ b/run_sslendpoint.sh @@ -0,0 +1,11 @@ +#!/bin/bash +DOCKER_MODE=$DOCKER_MODE +if [[ ""$JVM_ARGS == "" ]]; then + JVM_ARGS="-Xmx512m " +fi +if [[ $DOCKER_MODE == "" && ""$PROS == "" ]]; then + PROS="-DserverBindLocalAddress=0.0.0.0 -DserverBindLocalPort=8081" + PROS=$PROS" -DproxyHost=targetproxy -DproxyPort=targetproxyport" + PROS=$PROS" -DkeyCertChainFile=certs/server/server.crt -DkeyFile=certs/server/server.pk8 -DkeyPassword=123456 -DtrustCertFile=certs/ca/ca.crt" +fi +java $JVM_ARGS $PROS -cp .:* com.fd.proxytunnel.Launcher "sslendpoint" diff --git a/src/main/java/com/fd/httpproxytunnel/ChannelUtils.java b/src/main/java/com/fd/proxytunnel/ChannelUtils.java similarity index 94% rename from src/main/java/com/fd/httpproxytunnel/ChannelUtils.java rename to src/main/java/com/fd/proxytunnel/ChannelUtils.java index 4d2b7a7..ebd749b 100644 --- a/src/main/java/com/fd/httpproxytunnel/ChannelUtils.java +++ b/src/main/java/com/fd/proxytunnel/ChannelUtils.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; diff --git a/src/main/java/com/fd/httpproxytunnel/Configuration.java b/src/main/java/com/fd/proxytunnel/Configuration.java similarity index 98% rename from src/main/java/com/fd/httpproxytunnel/Configuration.java rename to src/main/java/com/fd/proxytunnel/Configuration.java index 10e48a3..cad4678 100644 --- a/src/main/java/com/fd/httpproxytunnel/Configuration.java +++ b/src/main/java/com/fd/proxytunnel/Configuration.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; public interface Configuration { diff --git a/src/main/java/com/fd/httpproxytunnel/Connection.java b/src/main/java/com/fd/proxytunnel/Connection.java similarity index 89% rename from src/main/java/com/fd/httpproxytunnel/Connection.java rename to src/main/java/com/fd/proxytunnel/Connection.java index ae11304..4685669 100644 --- a/src/main/java/com/fd/httpproxytunnel/Connection.java +++ b/src/main/java/com/fd/proxytunnel/Connection.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -32,7 +32,7 @@ public interface Connection { * Connect * * @return {@link ChannelFuture} channel future - * @throws {@link IOException} io exception + * @exception {@link IOException} io exception */ ChannelFuture connect() throws IOException; } diff --git a/src/main/java/com/fd/httpproxytunnel/ConnectionFromClient.java b/src/main/java/com/fd/proxytunnel/ConnectionFromClient.java similarity index 98% rename from src/main/java/com/fd/httpproxytunnel/ConnectionFromClient.java rename to src/main/java/com/fd/proxytunnel/ConnectionFromClient.java index bbf0c3d..59e35b2 100644 --- a/src/main/java/com/fd/httpproxytunnel/ConnectionFromClient.java +++ b/src/main/java/com/fd/proxytunnel/ConnectionFromClient.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; diff --git a/src/main/java/com/fd/httpproxytunnel/ConnectionFromClientHandler.java b/src/main/java/com/fd/proxytunnel/ConnectionFromClientHandler.java similarity index 94% rename from src/main/java/com/fd/httpproxytunnel/ConnectionFromClientHandler.java rename to src/main/java/com/fd/proxytunnel/ConnectionFromClientHandler.java index fb3456f..6d5edd0 100644 --- a/src/main/java/com/fd/httpproxytunnel/ConnectionFromClientHandler.java +++ b/src/main/java/com/fd/proxytunnel/ConnectionFromClientHandler.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; @@ -53,6 +53,7 @@ public void channelRead(final ChannelHandlerContext ctx, final Object msg) throw connectionOut.connect(); } } + // this handler must be remove after connect to ssl endpoint established, because we do not trigger fire channel read } public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { diff --git a/src/main/java/com/fd/httpproxytunnel/ConnectionToProxy.java b/src/main/java/com/fd/proxytunnel/ConnectionToProxy.java similarity index 97% rename from src/main/java/com/fd/httpproxytunnel/ConnectionToProxy.java rename to src/main/java/com/fd/proxytunnel/ConnectionToProxy.java index 8d24918..28bfa8d 100644 --- a/src/main/java/com/fd/httpproxytunnel/ConnectionToProxy.java +++ b/src/main/java/com/fd/proxytunnel/ConnectionToProxy.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.bootstrap.Bootstrap; import io.netty.channel.*; @@ -86,7 +86,7 @@ public void closeConnection() { } private void sendPendingMessageFailed(Channel channel) { - LOG.debug("send pending message failed"); + LOG.debug("send pending message to proxy failed"); channel.close().addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture channelFuture) throws Exception { @@ -99,7 +99,7 @@ private void sendPendingMessages(Channel channel) { ChannelFutureListener pendingMessageProcessFinishedListener = new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture channelFuture) throws Exception { - LOG.debug("send pending messages finished with success: {}", channelFuture.isSuccess()); + LOG.debug("send pending messages finished with success state: {}", channelFuture.isSuccess()); if (channelFuture.isSuccess()) { connectionFromClient.channel().pipeline().remove(Constants.MAIN_HANDLER); connectionFromClient.channel().pipeline().addLast(Constants.MAIN_HANDLER, new DataTransferHandler(ConnectionToProxy.this)); diff --git a/src/main/java/com/fd/httpproxytunnel/ConnectionToSslEndPoint.java b/src/main/java/com/fd/proxytunnel/ConnectionToSslEndPoint.java similarity index 94% rename from src/main/java/com/fd/httpproxytunnel/ConnectionToSslEndPoint.java rename to src/main/java/com/fd/proxytunnel/ConnectionToSslEndPoint.java index 3c16716..a81b468 100644 --- a/src/main/java/com/fd/httpproxytunnel/ConnectionToSslEndPoint.java +++ b/src/main/java/com/fd/proxytunnel/ConnectionToSslEndPoint.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBufAllocator; @@ -43,15 +43,14 @@ public ChannelFuture connect() throws SSLException { SslContext context = sslContextBuilder.build(); SslHandler sslHandler = new SslHandler(context.newEngine(ByteBufAllocator.DEFAULT)); sslHandler.setHandshakeTimeout(configuration.connectionTimeoutToProxyServer(), TimeUnit.MILLISECONDS); - sslHandler.handshakeFuture().addListener(new GenericFutureListener>() { + sslHandler.handshakeFuture().addListener(new GenericFutureListener>() { @Override - public void operationComplete(Future future) throws Exception { + public void operationComplete(Future future) throws Exception { if (future.isSuccess()) { LOG.debug("tcp connect to ssl endpoint handshake success, try to send pending messages"); - Channel channel = (Channel) future.get(); - sendPendingMessages(channel); + sendPendingMessages(future.get()); } else { - LOG.error("tcp connect to ssl endpoint handshake failed, {}", future.getNow()); + LOG.error("tcp connect to ssl endpoint handshake failed", future.cause()); } } }); @@ -114,7 +113,7 @@ public void closeConnection() { } private void sendPendingMessageFailed(Channel channel) { - LOG.debug("send pending message failed"); + LOG.debug("send pending message failed to ssl endpoint"); channel.close().addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture channelFuture) throws Exception { diff --git a/src/main/java/com/fd/httpproxytunnel/ConnectionToSslEndPointHandler.java b/src/main/java/com/fd/proxytunnel/ConnectionToSslEndPointHandler.java similarity index 91% rename from src/main/java/com/fd/httpproxytunnel/ConnectionToSslEndPointHandler.java rename to src/main/java/com/fd/proxytunnel/ConnectionToSslEndPointHandler.java index e987eb6..84d1788 100644 --- a/src/main/java/com/fd/httpproxytunnel/ConnectionToSslEndPointHandler.java +++ b/src/main/java/com/fd/proxytunnel/ConnectionToSslEndPointHandler.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; diff --git a/src/main/java/com/fd/httpproxytunnel/Constants.java b/src/main/java/com/fd/proxytunnel/Constants.java similarity index 97% rename from src/main/java/com/fd/httpproxytunnel/Constants.java rename to src/main/java/com/fd/proxytunnel/Constants.java index 0b910af..1192335 100644 --- a/src/main/java/com/fd/httpproxytunnel/Constants.java +++ b/src/main/java/com/fd/proxytunnel/Constants.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; diff --git a/src/main/java/com/fd/httpproxytunnel/DataTransferHandler.java b/src/main/java/com/fd/proxytunnel/DataTransferHandler.java similarity index 93% rename from src/main/java/com/fd/httpproxytunnel/DataTransferHandler.java rename to src/main/java/com/fd/proxytunnel/DataTransferHandler.java index 56757ce..619f8d9 100644 --- a/src/main/java/com/fd/httpproxytunnel/DataTransferHandler.java +++ b/src/main/java/com/fd/proxytunnel/DataTransferHandler.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; @@ -8,7 +8,7 @@ import org.slf4j.LoggerFactory; /** - * data transfer between client channel and proxy channel + * data transfer between channels */ public final class DataTransferHandler extends ChannelInboundHandlerAdapter { private static final Logger LOG = LoggerFactory.getLogger(DataTransferHandler.class); diff --git a/src/main/java/com/fd/httpproxytunnel/EnvProConfiguration.java b/src/main/java/com/fd/proxytunnel/EnvProConfiguration.java similarity index 96% rename from src/main/java/com/fd/httpproxytunnel/EnvProConfiguration.java rename to src/main/java/com/fd/proxytunnel/EnvProConfiguration.java index 08c1106..4e6d7ad 100644 --- a/src/main/java/com/fd/httpproxytunnel/EnvProConfiguration.java +++ b/src/main/java/com/fd/proxytunnel/EnvProConfiguration.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; public class EnvProConfiguration implements Configuration { @@ -30,12 +30,12 @@ public boolean channelAutoRead() { @Override public int timeoutToProxyServer() { - return Integer.parseInt(getFromEnvOrPro("timeoutToProxyServer", "10000")); + return Integer.parseInt(getFromEnvOrPro("timeoutToProxyServer", "30000")); } @Override public int connectionTimeoutToProxyServer() { - return Integer.parseInt(getFromEnvOrPro("connectionTimeoutToProxyServer", "5000")); + return Integer.parseInt(getFromEnvOrPro("connectionTimeoutToProxyServer", "10000")); } @Override @@ -55,7 +55,7 @@ public int maxConnectionBacklog() { @Override public int idleTimeoutForClient() { - return Integer.parseInt(getFromEnvOrPro("idleTimeoutForClient", "10000")); + return Integer.parseInt(getFromEnvOrPro("idleTimeoutForClient", "60000")); } @Override diff --git a/src/main/java/com/fd/httpproxytunnel/FakeHttpProxyServer.java b/src/main/java/com/fd/proxytunnel/FakeProxyServer.java similarity index 87% rename from src/main/java/com/fd/httpproxytunnel/FakeHttpProxyServer.java rename to src/main/java/com/fd/proxytunnel/FakeProxyServer.java index d600fc1..2e07054 100644 --- a/src/main/java/com/fd/httpproxytunnel/FakeHttpProxyServer.java +++ b/src/main/java/com/fd/proxytunnel/FakeProxyServer.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; @@ -11,14 +11,14 @@ import java.util.concurrent.TimeUnit; -public class FakeHttpProxyServer { - private static final Logger LOG = LoggerFactory.getLogger(FakeHttpProxyServer.class); +public class FakeProxyServer { + private static final Logger LOG = LoggerFactory.getLogger(FakeProxyServer.class); private final Configuration configuration; private volatile EventLoopGroup bossGroup; private volatile EventLoopGroup workerGroup; private volatile Channel channel; - public FakeHttpProxyServer(Configuration configuration) { + public FakeProxyServer(Configuration configuration) { this.configuration = configuration; } @@ -50,9 +50,9 @@ protected void initChannel(SocketChannel socketChannel) throws Exception { b.handler(Constants.DEBUG_LOGGING_HANDLER); } channel = b.bind(configuration.serverBindLocalAddress(), configuration.serverBindLocalPort()).sync().channel(); - LOG.info("fake http proxy server success bind on: {}:{}", configuration.serverBindLocalAddress(), configuration.serverBindLocalPort()); + LOG.info("fake proxy server success bind on: {}:{}", configuration.serverBindLocalAddress(), configuration.serverBindLocalPort()); } catch (Exception error){ - LOG.error("fake http proxy server occurs error", error); + LOG.error("fake proxy server occurs error", error); shutdown(); } } @@ -70,7 +70,7 @@ public void shutdown() { ChannelUtils.closeOnFlush(channel); channel = null; } - LOG.info("fake http server shutdown"); + LOG.info("fake server shutdown"); } } diff --git a/src/main/java/com/fd/httpproxytunnel/FakeHttpProxyServerLauncher.java b/src/main/java/com/fd/proxytunnel/FakeProxyServerLauncher.java similarity index 55% rename from src/main/java/com/fd/httpproxytunnel/FakeHttpProxyServerLauncher.java rename to src/main/java/com/fd/proxytunnel/FakeProxyServerLauncher.java index 38cf0a9..5393228 100644 --- a/src/main/java/com/fd/httpproxytunnel/FakeHttpProxyServerLauncher.java +++ b/src/main/java/com/fd/proxytunnel/FakeProxyServerLauncher.java @@ -1,9 +1,9 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; -public class FakeHttpProxyServerLauncher { +public class FakeProxyServerLauncher { public void run() { - FakeHttpProxyServer server = new FakeHttpProxyServer(new EnvProConfiguration()); + FakeProxyServer server = new FakeProxyServer(new EnvProConfiguration()); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { server.shutdown(); @@ -13,6 +13,6 @@ public void run() { } public static void main(String[] args) { - new FakeHttpProxyServerLauncher().run(); + new FakeProxyServerLauncher().run(); } } diff --git a/src/main/java/com/fd/proxytunnel/Launcher.java b/src/main/java/com/fd/proxytunnel/Launcher.java new file mode 100644 index 0000000..1be56c2 --- /dev/null +++ b/src/main/java/com/fd/proxytunnel/Launcher.java @@ -0,0 +1,20 @@ +package com.fd.proxytunnel; + +public class Launcher { + public static void main(String[] args) { + if (args.length > 0) { + switch (args[0].toLowerCase()) { + case "fakeserver": + new FakeProxyServerLauncher().run(); + break; + case "sslendpoint": + new SslEndPointServerLauncher().run(); + break; + default: + throw new RuntimeException("unknown args, must be fakeserver or sslendpoint"); + } + } else { + new FakeProxyServerLauncher().run(); + } + } +} diff --git a/src/main/java/com/fd/httpproxytunnel/SslEndPointServer.java b/src/main/java/com/fd/proxytunnel/SslEndPointServer.java similarity index 99% rename from src/main/java/com/fd/httpproxytunnel/SslEndPointServer.java rename to src/main/java/com/fd/proxytunnel/SslEndPointServer.java index e11dad3..54685d2 100644 --- a/src/main/java/com/fd/httpproxytunnel/SslEndPointServer.java +++ b/src/main/java/com/fd/proxytunnel/SslEndPointServer.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBufAllocator; diff --git a/src/main/java/com/fd/httpproxytunnel/SslEndPointServerLauncher.java b/src/main/java/com/fd/proxytunnel/SslEndPointServerLauncher.java similarity index 93% rename from src/main/java/com/fd/httpproxytunnel/SslEndPointServerLauncher.java rename to src/main/java/com/fd/proxytunnel/SslEndPointServerLauncher.java index 59513ef..77cea19 100644 --- a/src/main/java/com/fd/httpproxytunnel/SslEndPointServerLauncher.java +++ b/src/main/java/com/fd/proxytunnel/SslEndPointServerLauncher.java @@ -1,6 +1,7 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; public class SslEndPointServerLauncher { + public void run() { SslEndPointServer server = new SslEndPointServer(new EnvProConfiguration()); Runtime.getRuntime().addShutdownHook(new Thread() { diff --git a/src/main/java/com/fd/httpproxytunnel/StateHandler.java b/src/main/java/com/fd/proxytunnel/StateHandler.java similarity index 96% rename from src/main/java/com/fd/httpproxytunnel/StateHandler.java rename to src/main/java/com/fd/proxytunnel/StateHandler.java index 7c4991a..6132562 100644 --- a/src/main/java/com/fd/httpproxytunnel/StateHandler.java +++ b/src/main/java/com/fd/proxytunnel/StateHandler.java @@ -1,4 +1,4 @@ -package com.fd.httpproxytunnel; +package com.fd.proxytunnel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; diff --git a/src/test/java/com/fd/httpproxytunnel/AppTest.java b/src/test/java/com/fd/httpproxytunnel/AppTest.java deleted file mode 100644 index 3e1267d..0000000 --- a/src/test/java/com/fd/httpproxytunnel/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.fd.httpproxytunnel; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -}