Commit e53c1662 authored by Honfika's avatar Honfika

decrypt ssl in transparent endpoint + using case insensitive hashset

parent f90e356a
......@@ -17,11 +17,6 @@ namespace Titanium.Web.Proxy.Models
internal bool IsSystemHttpsProxy { get; set; }
/// <summary>
/// Enable SSL?
/// </summary>
public bool DecryptSsl { get; }
/// <summary>
/// Generic certificate to use for SSL decryption.
/// </summary>
......@@ -46,9 +41,8 @@ namespace Titanium.Web.Proxy.Models
/// <param name="ipAddress"></param>
/// <param name="port"></param>
/// <param name="decryptSsl"></param>
public ExplicitProxyEndPoint(IPAddress ipAddress, int port, bool decryptSsl = true) : base(ipAddress, port)
public ExplicitProxyEndPoint(IPAddress ipAddress, int port, bool decryptSsl = true) : base(ipAddress, port, decryptSsl)
{
this.DecryptSsl = decryptSsl;
}
internal async Task InvokeBeforeTunnelConnectRequest(ProxyServer proxyServer, TunnelConnectSessionEventArgs connectArgs, ExceptionHandler exceptionFunc)
......
......@@ -16,13 +16,14 @@ namespace Titanium.Web.Proxy.Models
/// </summary>
/// <param name="ipAddress"></param>
/// <param name="port"></param>
/// <param name="enableSsl"></param>
protected ProxyEndPoint(IPAddress ipAddress, int port)
/// <param name="decryptSsl"></param>
protected ProxyEndPoint(IPAddress ipAddress, int port, bool decryptSsl)
{
IpAddress = ipAddress;
Port = port;
DecryptSsl = decryptSsl;
}
/// <summary>
/// underlying TCP Listener object
/// </summary>
......@@ -38,6 +39,10 @@ namespace Titanium.Web.Proxy.Models
/// </summary>
public int Port { get; internal set; }
/// <summary>
/// Enable SSL?
/// </summary>
public bool DecryptSsl { get; }
/// <summary>
/// Is IPv6 enabled?
......
......@@ -19,8 +19,8 @@ namespace Titanium.Web.Proxy.Models
/// </summary>
/// <param name="ipAddress"></param>
/// <param name="port"></param>
/// <param name="enableSsl"></param>
public TransparentProxyEndPoint(IPAddress ipAddress, int port) : base(ipAddress, port)
/// <param name="decryptSsl"></param>
public TransparentProxyEndPoint(IPAddress ipAddress, int port, bool decryptSsl = true) : base(ipAddress, port, decryptSsl)
{
GenericCertificateName = "localhost";
}
......
......@@ -232,7 +232,7 @@ namespace Titanium.Web.Proxy
{
var clientHelloInfo = await SslTools.PeekClientHello(clientStream);
var isHttps = clientHelloInfo != null;
var isHttps = endPoint.DecryptSsl && clientHelloInfo != null;
string httpsHostName = null;
if (isHttps)
......
......@@ -14,14 +14,14 @@ namespace Titanium.Web.Proxy
public partial class ProxyServer
{
//possible header names
private static readonly HashSet<string> authHeaderNames = new HashSet<string>
private static readonly HashSet<string> authHeaderNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
"WWW-Authenticate".ToLower(),
"WWW-Authenticate",
//IIS 6.0 messed up names below
"WWWAuthenticate".ToLower(),
"NTLMAuthorization".ToLower(),
"NegotiateAuthorization".ToLower(),
"KerberosAuthorization".ToLower()
"WWWAuthenticate",
"NTLMAuthorization",
"NegotiateAuthorization",
"KerberosAuthorization"
};
private static readonly HashSet<string> authSchemes = new HashSet<string>
......@@ -48,8 +48,7 @@ namespace Titanium.Web.Proxy
var response = args.WebSession.Response;
//check in non-unique headers first
var header = response.Headers.NonUniqueHeaders.FirstOrDefault(
x => authHeaderNames.Contains(x.Key.ToLower()));
var header = response.Headers.NonUniqueHeaders.FirstOrDefault(x => authHeaderNames.Contains(x.Key));
if (!header.Equals(new KeyValuePair<string, List<HttpHeader>>()))
{
......@@ -68,7 +67,7 @@ namespace Titanium.Web.Proxy
headerName = null;
//check in non-unique headers first
var uHeader = response.Headers.Headers.FirstOrDefault(x => authHeaderNames.Contains(x.Key.ToLower()));
var uHeader = response.Headers.Headers.FirstOrDefault(x => authHeaderNames.Contains(x.Key));
if (!uHeader.Equals(new KeyValuePair<string, HttpHeader>()))
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment