internal CertificateManager(CertificateEngine engine,
                                    string issuer,
                                    string rootCertificateName,
                                    Action <Exception> exceptionFunc)
        {
            this.exceptionFunc = exceptionFunc;

            //For Mono only Bouncy Castle is supported
            if (RunTime.IsRunningOnMono() ||
                engine == CertificateEngine.BouncyCastle)
            {
                certEngine = new BCCertificateMaker();
            }
            else
            {
                certEngine = new WinCertificateMaker();
            }

            Issuer = issuer;
            RootCertificateName = rootCertificateName;

            certificateCache = new ConcurrentDictionary <string, CachedCertificate>();
        }