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; }
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; }