示例#1
0
        public CertVaultCertificate(CertVault vault, CertificateStore store, CertVaultCertType certType)
        {
            if (certType != CertVaultCertType.DefaultCert)
            {
                throw new ArgumentException("certType != CertVaultCertType.Default");
            }

            this.Vault    = vault;
            this.Store    = store;
            this.CertType = certType;
        }
示例#2
0
        public CertVaultCertificate(CertVault vault, DirectoryPath dirName, CertVaultCertType certType)
        {
            this.Vault = vault;

            if (certType.EqualsAny(CertVaultCertType.Acme, CertVaultCertType.Static, CertVaultCertType.AutoGenerated) == false)
            {
                throw new ArgumentOutOfRangeException("certType");
            }

            try
            {
                dirName.CreateDirectory();
            }
            catch { }

            CertificateStore?store = null;

            this.CertType = certType;
            this.DirName  = dirName;

            if (certType == CertVaultCertType.Static || certType == CertVaultCertType.AutoGenerated)
            {
                // Static / auto generated cert
                var files = DirName.EnumDirectory().Where(x => x.IsDirectory == false);

                string?p12file = files.Where(x => x.Name._IsExtensionMatch(Consts.Extensions.Filter_Pkcs12s)).SingleOrDefault()?.FullPath;

                string?certfile = files.Where(x => x.Name._IsExtensionMatch(Consts.Extensions.Filter_Certificates)).SingleOrDefault()?.FullPath;
                string?keyfile  = files.Where(x => x.Name._IsExtensionMatch(Consts.Extensions.Filter_Keys)).SingleOrDefault()?.FullPath;

                string?passwordfile = files.Where(x => x.Name._IsSamei(Consts.FileNames.CertVault_Password)).SingleOrDefault()?.FullPath;
                string?password     = null;

                if (passwordfile != null)
                {
                    password = FileSystem !.ReadStringFromFile(passwordfile, oneLine: true);

                    if (password._IsEmpty())
                    {
                        password = null;
                    }
                }

                if (p12file != null)
                {
                    store = new CertificateStore(FileSystem !.ReadDataFromFile(p12file).Span, password);
                }
                else if (certfile != null && keyfile != null)
                {
                    store = new CertificateStore(FileSystem !.ReadDataFromFile(certfile).Span, FileSystem.ReadDataFromFile(keyfile).Span, password);
                }
                else
                {
                    store = null;
                }
            }
            else
            {
                // ACME cert
                FilePath fileName = DirName.Combine(DirName.GetThisDirectoryName() + Consts.Extensions.Certificate_Acme);

                if (fileName.IsFileExists())
                {
                    store = new CertificateStore(fileName.ReadDataFromFile().Span, this.Vault.AcmeCertKey !);
                }
                else
                {
                    store = null;
                }
            }

            Certificate?test = store?.PrimaryContainer.CertificateList[0];

            if (test != null && store != null)
            {
                if (test.PublicKey.Equals(store.PrimaryContainer.PrivateKey.PublicKey) == false)
                {
                    Con.WriteDebug($"CertVault: The public key certificate in the directory '{dirName}' doesn't match to the private key.");
                    store = null;
                }
            }

            this.Store = store;
        }