예제 #1
0
        public void Populate(CertificateInfo item)
        {
            this.item = item;

            lblID.Text    = item.Id.ToString();
            lblAlias.Text = item.Alias;
            if (item.CertificateRequest != null)
            {
                CertificateManager certManager    = new CertificateManager();
                string             certPath       = parentApp.VaultManager.GetCertificateFilePath(item.Id);
                string             crtDerFilePath = certPath + "\\" + item.CrtDerFile;
                lblFilePath.Text = crtDerFilePath;

                if (File.Exists(crtDerFilePath))
                {
                    var cert = certManager.GetCertificate(crtDerFilePath);
                    lblExpiryDate.Text = cert.GetExpirationDateString();
                    lblIssuer.Text     = cert.Issuer;
                    lblSubject.Text    = cert.Subject;

                    foreach (System.Security.Cryptography.X509Certificates.X509Extension extension in cert.Extensions)
                    {
                        if (extension.Oid.FriendlyName == "Subject Alternative Name")
                        {
                            var asndata = new System.Security.Cryptography.AsnEncodedData(extension.Oid, extension.RawData);
                            txtSAN.Text = asndata.Format(true);
                        }
                    }

                    /*
                     * //http://stackoverflow.com/questions/16698307/how-do-you-parse-the-subject-alternate-names-from-an-x509certificate2
                     * foreach (System.Security.Cryptography.X509Certificates.X509Extension extension in cert.Extensions)
                     * {
                     *   // Create an AsnEncodedData object using the extensions information.
                     *   System.Security.Cryptography.AsnEncodedData asndata = new System.Security.Cryptography.AsnEncodedData(extension.Oid, extension.RawData);
                     *   Console.WriteLine("Extension type: {0}", extension.Oid.FriendlyName);
                     *   Console.WriteLine("Oid value: {0}", asndata.Oid.Value);
                     *   Console.WriteLine("Raw data length: {0} {1}", asndata.RawData.Length, Environment.NewLine);
                     *   Console.WriteLine);
                     * }*/
                    DateTime expiryDate = DateTime.Parse(cert.GetExpirationDateString());
                    TimeSpan timeLeft   = expiryDate - DateTime.Now;
                    lblDaysRemaining.Text = timeLeft.Days.ToString();
                    if (timeLeft.Days < 7)
                    {
                        lblDaysRemaining.ForeColor = Color.Red;
                    }
                    else
                    {
                        lblDaysRemaining.ForeColor = Color.Black;
                    }
                }
                else
                {
                    lblFilePath.Text = "[Not Found] " + lblFilePath.Text;
                }
            }
        }
예제 #2
0
        private void X509Certificate_Changed(X509Certificate2 certificate)
        {
            this.labDates.Text = certificate == null
                ? ""
                : $"Valid from {certificate.NotBefore} to {certificate.NotAfter}";

            if (certificate == null)
            {
                this.ToolTipFor(this.labDates, null);
            }
            else
            {
                List <string> domains = new List <string>();
                Debug.WriteLine("");
                for (var it = 0; it < certificate.Extensions.Count; it++)
                {
                    var extension = certificate.Extensions[it];
                    // Create an AsnEncodedData object using the extensions information.
                    var asndata = new System.Security.Cryptography.AsnEncodedData(extension.Oid, extension.RawData);
                    //Debug.WriteLine("======== {0} ========", it);
                    //Debug.WriteLine($"Extension type: {extension.Oid.FriendlyName}");
                    //Debug.WriteLine($"Oid value: {asndata.Oid.Value}");
                    //Debug.WriteLine("Raw data length: {0} {1}", asndata.RawData.Length, Environment.NewLine);
                    //Debug.WriteLine(asndata.Format(true));

                    if (asndata.Oid.Value == "2.5.29.17")
                    {
                        domains.AddRange(asndata.Format(true).Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                                         .Select(x => x.Split(new[] { '=' }, 2).Skip(1).SingleOrDefault()?.Trim()));
                    }
                }

                var main = certificate.GetNameInfo(X509NameType.SimpleName, false);
                var alt  = certificate.GetNameInfo(X509NameType.DnsFromAlternativeName, false);
                if (!string.IsNullOrWhiteSpace(main))
                {
                    domains.Add(main);
                }
                if (!string.IsNullOrWhiteSpace(alt))
                {
                    domains.Add(alt);
                }
                this.ToolTipFor(this.labDates, string.Join("\n", domains.Distinct()));
            }
        }