@@ -79,7 +79,7 @@ private async Task HandleClient(ExplicitProxyEndPoint endPoint, TcpClient tcpCli
7979 await endPoint . InvokeBeforeTunnelConnectRequest ( this , connectArgs , ExceptionFunc ) ;
8080
8181 //filter out excluded host names
82- bool excluded = connectArgs . Excluded ;
82+ bool excluded = ! endPoint . DecryptSsl || connectArgs . Excluded ;
8383
8484 if ( await CheckAuthorization ( connectArgs ) == false )
8585 {
@@ -92,17 +92,15 @@ private async Task HandleClient(ExplicitProxyEndPoint endPoint, TcpClient tcpCli
9292
9393 //write back successfull CONNECT response
9494 var response = ConnectResponse . CreateSuccessfullConnectResponse ( version ) ;
95+ // Set ContentLength explicitly to properly handle HTTP 1.0
96+ response . ContentLength = 0 ;
9597 response . Headers . FixProxyHeaders ( ) ;
9698 connectArgs . WebSession . Response = response ;
9799
98100 await clientStreamWriter . WriteResponseAsync ( response ) ;
99101
100- ClientHelloInfo clientHelloInfo = null ;
101- if ( endPoint . EnableSsl )
102- {
103- clientHelloInfo = await SslTools . PeekClientHello ( clientStream ) ;
104- }
105-
102+ var clientHelloInfo = await SslTools . PeekClientHello ( clientStream ) ;
103+
106104 bool isClientHello = clientHelloInfo != null ;
107105 if ( isClientHello )
108106 {
@@ -232,48 +230,46 @@ private async Task HandleClient(TransparentProxyEndPoint endPoint, TcpClient tcp
232230
233231 try
234232 {
235- if ( endPoint . EnableSsl )
236- {
237- var clientHelloInfo = await SslTools . PeekClientHello ( clientStream ) ;
233+ var clientHelloInfo = await SslTools . PeekClientHello ( clientStream ) ;
238234
239- if ( clientHelloInfo != null )
240- {
241- SslStream sslStream = null ;
242- string sniHostName = null ;
235+ var isHttps = clientHelloInfo != null ;
236+ string httpsHostName = null ;
243237
244- try
245- {
246- sslStream = new SslStream ( clientStream ) ;
238+ if ( isHttps )
239+ {
240+ SslStream sslStream = null ;
241+
242+ try
243+ {
244+ sslStream = new SslStream ( clientStream ) ;
247245
248- sniHostName = clientHelloInfo . GetServerName ( ) ?? endPoint . GenericCertificateName ;
246+ httpsHostName = clientHelloInfo . GetServerName ( ) ?? endPoint . GenericCertificateName ;
249247
250- string certName = HttpHelper . GetWildCardDomainName ( sniHostName ) ;
251- var certificate = await CertificateManager . CreateCertificateAsync ( certName ) ;
248+ string certName = HttpHelper . GetWildCardDomainName ( httpsHostName ) ;
249+ var certificate = await CertificateManager . CreateCertificateAsync ( certName ) ;
252250
253- //Successfully managed to authenticate the client using the fake certificate
254- await sslStream . AuthenticateAsServerAsync ( certificate , false , SslProtocols . Tls , false ) ;
251+ //Successfully managed to authenticate the client using the fake certificate
252+ await sslStream . AuthenticateAsServerAsync ( certificate , false , SslProtocols . Tls , false ) ;
255253
256- //HTTPS server created - we can now decrypt the client's traffic
257- clientStream = new CustomBufferedStream ( sslStream , BufferSize ) ;
254+ //HTTPS server created - we can now decrypt the client's traffic
255+ clientStream = new CustomBufferedStream ( sslStream , BufferSize ) ;
258256
259- clientStreamReader . Dispose ( ) ;
260- clientStreamReader = new CustomBinaryReader ( clientStream , BufferSize ) ;
261- clientStreamWriter = new HttpResponseWriter ( clientStream , BufferSize ) ;
262- }
263- catch ( Exception e )
264- {
265- ExceptionFunc ( new Exception ( $ "Could'nt authenticate client '{ sniHostName } ' with fake certificate.", e ) ) ;
266- sslStream ? . Dispose ( ) ;
267- return ;
268- }
257+ clientStreamReader . Dispose ( ) ;
258+ clientStreamReader = new CustomBinaryReader ( clientStream , BufferSize ) ;
259+ clientStreamWriter = new HttpResponseWriter ( clientStream , BufferSize ) ;
260+ }
261+ catch ( Exception e )
262+ {
263+ ExceptionFunc ( new Exception ( $ "Could'nt authenticate client '{ httpsHostName } ' with fake certificate.", e ) ) ;
264+ sslStream ? . Dispose ( ) ;
265+ return ;
269266 }
270-
271- //HTTPS server created - we can now decrypt the client's traffic
272267 }
273268
269+ //HTTPS server created - we can now decrypt the client's traffic
274270 //Now create the request
275271 await HandleHttpSessionRequest ( tcpClient , clientStream , clientStreamReader , clientStreamWriter ,
276- endPoint . EnableSsl ? endPoint . GenericCertificateName : null , endPoint , null , true ) ;
272+ isHttps ? httpsHostName : null , endPoint , null , true ) ;
277273 }
278274 finally
279275 {
@@ -621,7 +617,7 @@ private async Task<TcpConnection> GetServerConnection(SessionEventArgs args, boo
621617 /// <param name="requestHeaders"></param>
622618 private void PrepareRequestHeaders ( HeaderCollection requestHeaders )
623619 {
624- if ( requestHeaders . HeaderExists ( KnownHeaders . AcceptEncoding ) )
620+ if ( requestHeaders . HeaderExists ( KnownHeaders . AcceptEncoding ) )
625621 {
626622 requestHeaders . SetOrAddHeaderValue ( KnownHeaders . AcceptEncoding , "gzip,deflate" ) ;
627623 }
0 commit comments