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); }
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; }
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); }
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"); }