Commit 63ddeff4 authored by Jehonathan's avatar Jehonathan Committed by GitHub

Merge pull request #130 from ilushka85/release

Release
parents 9250384d 7575d89a
...@@ -20,7 +20,7 @@ namespace Titanium.Web.Proxy.UnitTests ...@@ -20,7 +20,7 @@ namespace Titanium.Web.Proxy.UnitTests
{ {
var tasks = new List<Task>(); var tasks = new List<Task>();
var mgr = new CertificateManager("Titanium","Titanium Root Certificate Authority"); var mgr = new CertificateManager("Titanium", "Titanium Root Certificate Authority");
mgr.ClearIdleCertificates(1); mgr.ClearIdleCertificates(1);
...@@ -33,9 +33,9 @@ namespace Titanium.Web.Proxy.UnitTests ...@@ -33,9 +33,9 @@ namespace Titanium.Web.Proxy.UnitTests
await Task.Delay(random.Next(0, 10) * 1000); await Task.Delay(random.Next(0, 10) * 1000);
//get the connection //get the connection
var certificate = await mgr.CreateCertificate(host, false); var certificate = mgr.CreateCertificate(host, false);
Assert.IsNotNull(certificate); Assert.IsNotNull(certificate);
})); }));
......
...@@ -37,29 +37,37 @@ namespace Titanium.Web.Proxy.Network ...@@ -37,29 +37,37 @@ namespace Titanium.Web.Proxy.Network
certificateCache = new ConcurrentDictionary<string, CachedCertificate>(); certificateCache = new ConcurrentDictionary<string, CachedCertificate>();
} }
/// <summary> X509Certificate2 GetRootCertificate()
/// Attempts to move a self-signed certificate to the root store.
/// </summary>
/// <returns>true if succeeded, else false</returns>
internal bool CreateTrustedRootCertificate()
{ {
var fileName = Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location),"rootCert.pfx"); var fileName = Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "rootCert.pfx");
if (File.Exists(fileName)) if (File.Exists(fileName))
{ {
try try
{ {
rootCertificate = new X509Certificate2(fileName, string.Empty, X509KeyStorageFlags.Exportable); return new X509Certificate2(fileName, string.Empty, X509KeyStorageFlags.Exportable);
if (rootCertificate != null)
{
return true;
}
} }
catch(Exception e) catch (Exception e)
{ {
ProxyServer.ExceptionFunc(e); ProxyServer.ExceptionFunc(e);
return null;
} }
} }
return null;
}
/// <summary>
/// Attempts to create a RootCertificate
/// </summary>
/// <returns>true if succeeded, else false</returns>
internal bool CreateTrustedRootCertificate()
{
rootCertificate = GetRootCertificate();
if (rootCertificate != null)
{
return true;
}
try try
{ {
rootCertificate = CreateCertificate(RootCertificateName, true); rootCertificate = CreateCertificate(RootCertificateName, true);
...@@ -72,6 +80,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -72,6 +80,7 @@ namespace Titanium.Web.Proxy.Network
{ {
try try
{ {
var fileName = Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "rootCert.pfx");
File.WriteAllBytes(fileName, rootCertificate.Export(X509ContentType.Pkcs12)); File.WriteAllBytes(fileName, rootCertificate.Export(X509ContentType.Pkcs12));
} }
catch(Exception e) catch(Exception e)
...@@ -177,6 +186,32 @@ namespace Titanium.Web.Proxy.Network ...@@ -177,6 +186,32 @@ namespace Titanium.Web.Proxy.Network
await Task.Delay(1000 * 60); await Task.Delay(1000 * 60);
} }
} }
public bool TrustRootCertificate()
{
if (rootCertificate == null)
{
return false;
}
try
{
X509Store x509Store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
x509Store.Open(OpenFlags.ReadWrite);
try
{
x509Store.Add(rootCertificate);
}
finally
{
x509Store.Close();
}
return true;
}
catch (Exception exception)
{
return false;
}
}
public void Dispose() public void Dispose()
{ {
......
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