Commit ada0269f authored by ilushka85's avatar ilushka85

Add Support for Trusting Root certificate

parent f9091d97
...@@ -39,28 +39,36 @@ namespace Titanium.Web.Proxy.Network ...@@ -39,28 +39,36 @@ 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 move a self-signed certificate to the root store.
/// </summary>
/// <returns>true if succeeded, else false</returns>
internal bool CreateTrustedRootCertificate()
{
rootCertificate = GetRootCertificate();
if (rootCertificate != null)
{
return true;
} }
try try
{ {
...@@ -74,6 +82,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -74,6 +82,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)
...@@ -180,6 +189,32 @@ namespace Titanium.Web.Proxy.Network ...@@ -180,6 +189,32 @@ namespace Titanium.Web.Proxy.Network
} }
} }
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