/// <summary> /// Create an SSL certificate /// </summary> /// <param name="certificateName"></param> /// <param name="isRootCertificate"></param> /// <returns></returns> internal X509Certificate2 CreateCertificate(string certificateName, bool isRootCertificate) { if (certificateCache.ContainsKey(certificateName)) { var cached = certificateCache[certificateName]; cached.LastAccess = DateTime.Now; return(cached.Certificate); } X509Certificate2 certificate = null; // todo: lock in netstandard, too #if NET45 lock (string.Intern(certificateName)) { #endif if (certificateCache.ContainsKey(certificateName) == false) { try { if (!isRootCertificate && RootCertificate == null) { CreateTrustedRootCertificate(); } certificate = certEngine.MakeCertificate(certificateName, isRootCertificate, RootCertificate); } catch (Exception e) { exceptionFunc(e); } if (certificate != null && !certificateCache.ContainsKey(certificateName)) { certificateCache.Add(certificateName, new CachedCertificate { Certificate = certificate }); } } else { if (certificateCache.ContainsKey(certificateName)) { var cached = certificateCache[certificateName]; cached.LastAccess = DateTime.Now; return(cached.Certificate); } } #if NET45 } #endif return(certificate); }
private X509Certificate2 makeCertificate(string certificateName, bool isRootCertificate) { if (!isRootCertificate && RootCertificate == null) { CreateRootCertificate(); } var certificate = certEngine.MakeCertificate(certificateName, isRootCertificate, RootCertificate); if (CertificateEngine == CertificateEngine.DefaultWindows) { Task.Run(() => uninstallCertificate(StoreName.My, StoreLocation.CurrentUser, certificate)); } return(certificate); }
/// <summary> /// Create an SSL certificate /// </summary> /// <param name="certificateName"></param> /// <param name="isRootCertificate"></param> /// <returns></returns> internal virtual X509Certificate2 CreateCertificate(string certificateName, bool isRootCertificate) { if (certificateCache.ContainsKey(certificateName)) { var cached = certificateCache[certificateName]; cached.LastAccess = DateTime.Now; return(cached.Certificate); } X509Certificate2 certificate = null; lock (string.Intern(certificateName)) { if (certificateCache.ContainsKey(certificateName) == false) { try { certificate = certEngine.MakeCertificate(certificateName, isRootCertificate, rootCertificate); } catch (Exception e) { exceptionFunc(e); } if (certificate != null && !certificateCache.ContainsKey(certificateName)) { certificateCache.Add(certificateName, new CachedCertificate() { Certificate = certificate }); } } else { if (certificateCache.ContainsKey(certificateName)) { var cached = certificateCache[certificateName]; cached.LastAccess = DateTime.Now; return(cached.Certificate); } } } return(certificate); }