Example #1
0
        /// <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);
        }
Example #2
0
        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);
        }