Exemplo n.º 1
0
        async public static Task <ProxySslRequest> For(ProxyRequest wrapperRequest, IRequestInspector wrapperRequestInspector)
        {
            if (_certProvider == null)
            {
                _certProvider = new CertificateProvider(MakeCertPath);
                _certProvider.EnsureRootCertificate();
            }

            var sslRequest = new ProxySslRequest
            {
                WrapperRequest = wrapperRequest,
                ClientPid      = wrapperRequest.ClientPid,
                ClientSocket   = wrapperRequest.ClientSocket,
                ClientStream   = wrapperRequest.ClientStream
            };

            if (wrapperRequestInspector != null)
            {
                wrapperRequestInspector.OnTransferredToSecureRequest(sslRequest);
            }

            var hostName = sslRequest.GetHostName();

            sslRequest._hostCert = _certProvider.GetCertificateForHost(hostName);

            var clientSsslStream = new SslStream(wrapperRequest.ClientStream, true, RemoteCertificateValidator, sslRequest.LocalCertificateSelector);
            await clientSsslStream.AuthenticateAsServerAsync(sslRequest._hostCert);

            sslRequest.SecureClientStream = clientSsslStream;

            sslRequest.ReadPrologue();

            return(sslRequest);
        }
Exemplo n.º 2
0
        async public static Task<ProxySslRequest> For(ProxyRequest wrapperRequest, IRequestInspector wrapperRequestInspector)
        {
            if (_certProvider == null)
            {
                _certProvider = new CertificateProvider(MakeCertPath);
                _certProvider.EnsureRootCertificate();
            }

            var sslRequest = new ProxySslRequest
                {
                    WrapperRequest = wrapperRequest,
                    ClientPid = wrapperRequest.ClientPid,
                    ClientSocket = wrapperRequest.ClientSocket,
                    ClientStream = wrapperRequest.ClientStream
                };

            if (wrapperRequestInspector != null)
                wrapperRequestInspector.OnTransferredToSecureRequest(sslRequest);

            var hostName = sslRequest.GetHostName();
            sslRequest._hostCert = _certProvider.GetCertificateForHost(hostName);

            var clientSsslStream = new SslStream(wrapperRequest.ClientStream, true, RemoteCertificateValidator, sslRequest.LocalCertificateSelector);
            await clientSsslStream.AuthenticateAsServerAsync(sslRequest._hostCert);
            sslRequest.SecureClientStream = clientSsslStream;

            sslRequest.ReadPrologue();

            return sslRequest;
        }
Exemplo n.º 3
0
        void IRequestInspector.OnTransferredToSecureRequest(ProxySslRequest secureRequest)
        {
            //var secureEntry = new Entry();
            //var secureRequestInspector = new HarRequestInspector(secureRequest, new Entry())
            var secureRequestInspector = new HarRequestInspector(secureRequest, _log);

            secureRequest.RegisterInspector(secureRequestInspector);
        }
Exemplo n.º 4
0
        async public Task Process()
        {
            Debug.Write("Request: ");
            if (Prologue.Method == "CONNECT")
            {
                Debug.Write("SSL: ");

                var proxySslResponse = new ProxySslResponse(Prologue.Version, HttpStatusCode.OK, "Connection Established");
                proxySslResponse.Prologue.WriteTo(ClientStream);

                var sslRequest = await ProxySslRequest.For(this, _requestInspector);

                await sslRequest.Process();

                return;
            }

            await InitRemoteSocket();
            await InitRemoteStream();

            await WritePrologueToRemote();

            await CopyContentFromClientToServer();

            await GetResponse();

            await WriteResponseToClient();

            //End();

            if (RemoteSocket != null && Response.Prologue.Headers.ContainsIgnoreCase("Connection", "Keep-Alive"))
            {
                RemoteSocketProvider.Return(RemoteEndPoint, RemoteSocket);
            }
            else
            {
                End();
            }

            Debug.WriteLine("Done");
        }
Exemplo n.º 5
0
 void IRequestInspector.OnTransferredToSecureRequest(ProxySslRequest secureRequest)
 {
     //var secureEntry = new Entry();
     //var secureRequestInspector = new HarRequestInspector(secureRequest, new Entry())
     var secureRequestInspector = new HarRequestInspector(secureRequest, _log);
     secureRequest.RegisterInspector(secureRequestInspector);
 }