Commit 5c24d9cb authored by Anton Ryzhov's avatar Anton Ryzhov

Adding lock to CreateRootCertificate method

parent f2b2ce52
...@@ -48,6 +48,8 @@ namespace Titanium.Web.Proxy.Network ...@@ -48,6 +48,8 @@ namespace Titanium.Web.Proxy.Network
private readonly CancellationTokenSource clearCertificatesTokenSource; private readonly CancellationTokenSource clearCertificatesTokenSource;
private readonly object rootCertCreationLock;
private ICertificateMaker certEngine; private ICertificateMaker certEngine;
private CertificateEngine engine; private CertificateEngine engine;
...@@ -103,6 +105,8 @@ namespace Titanium.Web.Proxy.Network ...@@ -103,6 +105,8 @@ namespace Titanium.Web.Proxy.Network
clearCertificatesTokenSource = new CancellationTokenSource(); clearCertificatesTokenSource = new CancellationTokenSource();
certificateCache = new DefaultCertificateDiskCache(); certificateCache = new DefaultCertificateDiskCache();
rootCertCreationLock = new object();
} }
/// <summary> /// <summary>
...@@ -514,6 +518,8 @@ namespace Titanium.Web.Proxy.Network ...@@ -514,6 +518,8 @@ namespace Titanium.Web.Proxy.Network
/// true if succeeded, else false. /// true if succeeded, else false.
/// </returns> /// </returns>
public bool CreateRootCertificate(bool persistToFile = true) public bool CreateRootCertificate(bool persistToFile = true)
{
lock (rootCertCreationLock)
{ {
if (persistToFile && RootCertificate == null) if (persistToFile && RootCertificate == null)
{ {
...@@ -529,7 +535,9 @@ namespace Titanium.Web.Proxy.Network ...@@ -529,7 +535,9 @@ namespace Titanium.Web.Proxy.Network
{ {
try try
{ {
var rootCert = certificateCache.LoadRootCertificate(PfxFilePath, PfxPassword, X509KeyStorageFlags.Exportable); var rootCert = certificateCache.LoadRootCertificate(PfxFilePath, PfxPassword,
X509KeyStorageFlags.Exportable);
if (rootCert != null) if (rootCert != null)
{ {
return false; return false;
...@@ -573,6 +581,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -573,6 +581,7 @@ namespace Titanium.Web.Proxy.Network
return RootCertificate != null; return RootCertificate != null;
} }
}
/// <summary> /// <summary>
/// Loads root certificate from current executing assembly location with expected name rootCert.pfx. /// Loads root certificate from current executing assembly location with expected name rootCert.pfx.
...@@ -600,7 +609,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -600,7 +609,7 @@ namespace Titanium.Web.Proxy.Network
/// </param> /// </param>
/// <param name="password">Set a password for the .pfx file.</param> /// <param name="password">Set a password for the .pfx file.</param>
/// <param name="overwritePfXFile"> /// <param name="overwritePfXFile">
/// true : replace an existing .pfx file if password is incorect or if /// true : replace an existing .pfx file if password is incorrect or if
/// RootCertificate==null. /// RootCertificate==null.
/// </param> /// </param>
/// <param name="storageFlag"></param> /// <param name="storageFlag"></param>
......
...@@ -43,10 +43,14 @@ namespace Titanium.Web.Proxy.Network ...@@ -43,10 +43,14 @@ namespace Titanium.Web.Proxy.Network
public void Clear() public void Clear()
{ {
if (Directory.Exists(getCertificatePath())) try
{ {
Directory.Delete(getCertificatePath(), true); Directory.Delete(getCertificatePath(), true);
} }
catch (DirectoryNotFoundException)
{
// do nothing
}
certificatePath = null; certificatePath = null;
} }
......
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