Hi,

Yesterday I did a first implementation of HTTPS proxying using HTTP CONNECT 
tunneling for Zn+Zdc, this should now be tested by a wider audience. With this 
new feature it should now be possible to access HTTPS Urls from behind an HTTP 
proxy. This is for all OS platforms. Thanks Nicolai for finding the spec 
reference and Torsten for the push.

In Zn #bleedingEdge

===
Name: Zinc-HTTP-SvenVanCaekenberghe.437
Author: SvenVanCaekenberghe
Time: 6 October 2015, 9:57:35.790306 pm
UUID: 96b9026b-561e-4d6f-88b7-46389b163e99
Ancestors: Zinc-HTTP-SvenVanCaekenberghe.436

Implementation of HTTPS proxying using HTTP CONNECT tunneling

https://en.wikipedia.org/wiki/HTTP_tunnel#HTTP_CONNECT_tunneling
http://www.ietf.org/rfc/rfc2817.txt (section 5)

Rewrite ZnClient>>#newConnectionTo: with delegate to newly added 
ZnClient>>#setupTLSTo: which implements the mechanism described in the links 
above

Change ZnClient>>#readResponse: not to expect a body with a CONNECT request

Change ZnHeaders>>#request: to use #authorityWithPort for the Host header

Add ZnNetworkingUtils [class]>>#secureSocketStreamOn:

Change ZnRequestLine>>#writeOn: to write the correct Request-URI portion of the 
Request-Line in case of CONNECT and/or plain HTTP(S) proxying

Tested with Squid 3 as proxy
===
Name: Zinc-Resource-Meta-Core-SvenVanCaekenberghe.54
Author: SvenVanCaekenberghe
Time: 6 October 2015, 9:58:39.204572 pm
UUID: 134e875c-d2dd-4970-9697-b9d56833d77d
Ancestors: Zinc-Resource-Meta-Core-SvenVanCaekenberghe.53

Add ZnUrl>>#authorityWithPort and ZnUrl>>#hasSecureScheme
===
Name: Zinc-Tests-SvenVanCaekenberghe.234
Author: SvenVanCaekenberghe
Time: 6 October 2015, 9:59:59.387302 pm
UUID: d2831cd8-fa01-4f44-8533-f5045dabbd7d
Ancestors: Zinc-Tests-SvenVanCaekenberghe.233

Modify ZnClientTests>>#testIfFailNonExistingHost because of different behavior 
when a proxy is involved
===

On my machine all Zn+Zdc tests succeed with a proxy set (squid 3). Let's hope 
it works for others too. I did not yet test proxy authorization but I think it 
should work like before.

An HTTP Proxy can be set in World > System > Settings

Here is some code to do a simple test

ZnClient new get: 
'https://s3-eu-west-1.amazonaws.com/public-stfx-eu/test-2050.txt'.

ZnClient new get: 
'https://s3-eu-west-1.amazonaws.com/public-stfx-eu/small.html'.

ZnClient new get: 'http://stfx.eu/small.html'.

ZnNetworkingUtils default isProxySet.

ZnNetworkingUtils shouldProxyUrl: 
'https://s3-eu-west-1.amazonaws.com/public-stfx-eu/small.html' asUrl.

Regards,

Sven  

Reply via email to