Пример #1
0
        /// <summary>
        /// Show a dialog and have the user select a certificate to sign.
        /// </summary>
        /// <returns></returns>
        public static X509Certificate2 GetByDialog(StoreName storeName = StoreName.My, StoreLocation storeLocation = StoreLocation.CurrentUser, bool validOnly = false, bool requirePrivateKey = false)
        {
            X509Store        store = null;
            X509Certificate2 result;

            try
            {
                store = new X509Store(storeName, storeLocation);
                store.Open(OpenFlags.ReadOnly);
                var selections = store.Certificates;
                if (requirePrivateKey)
                {
                    var filtered = selections
                                   .Cast <X509Certificate2>()
                                   .Where(cert => cert.HasPrivateKey)
                                   .ToArray();
                    selections = new X509Certificate2Collection(filtered);
                }
                var selection = X509Certificate2UI.SelectFromCollection(selections, "Certificates", "Select one to sign", X509SelectionFlag.SingleSelection);
                result = selection.Count == 0
                             ? null
                             : selection
                         .Cast <X509Certificate2>()
                         .FirstOrDefault();
            }
            finally
            {
                if (store != null)
                {
                    store.Close();
                }
            }
            return(result);
        }
        private void btnViewRootCertificate_Click(object sender, EventArgs e)
        {
            try
            {
                //check if certificate needs to be signed by root authority
                if (cmbRootLocation.SelectedIndex != -1 && cmbRootStore.SelectedIndex != -1)
                {
                    X509Store rootStore = new X509Store((StoreName)cmbRootStore.SelectedItem, (StoreLocation)cmbRootLocation.SelectedItem);
                    rootStore.Open(OpenFlags.ReadOnly);
                    _selectedCertificates = X509Certificate2UI.SelectFromCollection(rootStore.Certificates, "Pick a Root Authority Certificate", "Click on the root authority certificate for which you have a private key. Newly created certificate will be signed using this certificate", X509SelectionFlag.SingleSelection);
                }
                else
                {
                    errorProvider.SetError(btnViewRootCertificate, "Please select both store and location to view certificates");
                }

                if (_selectedCertificates != null && _selectedCertificates.Count == 1)
                {
                    X509Certificate2 certificate = _selectedCertificates[0];
                    string           label       = string.Format("Subject:{0} and Issuer Name:{1}", certificate.Subject, certificate.Issuer);
                    lblRootCertificate.Text = label.Substring(0, 47) + "...";
                    toolTip.SetToolTip(lblRootCertificate, label);
                }
                else
                {
                    lblRootCertificate.Text = "No Root Authority Certificate selected";
                }
            }
            catch (Exception ex)
            {
                errorProvider.SetError(cmbRootLocation, ex.Message);
            }
        }
Пример #3
0
        internal static X509Certificate2 GetX509Certificate2FromDongle()
        {
            List <X509Certificate2> certList = new List <X509Certificate2>();

            using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
            {
                store.Open(OpenFlags.ReadOnly);
                foreach (X509Certificate2 cert in (X509Certificate2Collection)store.Certificates)
                {
                    //Filter for not showing unnecessery certificates
                    if (
                        cert.HasPrivateKey &&
                        !cert.Issuer.Contains("localhost") &&
                        (cert.NotAfter >= DateTime.UtcNow && cert.NotBefore <= DateTime.UtcNow)
                        )
                    {
                        certList.Add(cert);
                    }
                }
                store.Close(); //No Need
            }
            X509Certificate2Collection selectedCert = X509Certificate2UI.SelectFromCollection(
                new X509Certificate2Collection(certList.ToArray()),
                "Digital Document Signer",
                "Please Select a Certificate for Signing Document",
                X509SelectionFlag.SingleSelection
                );
            X509Certificate2 x509Certificate2 = selectedCert[0];

            Log.Print(LogLevel._Low, "Selected Certificate Subject - " + x509Certificate2.Subject);
            Log.Print(LogLevel._Low, "Selected Certificate Issuer - " + x509Certificate2.Issuer);
            bool?status = CheckOCSP(x509Certificate2);

            return(x509Certificate2);
        }
Пример #4
0
        private void TrvMain_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (File.Exists(e.Node.Name))
            {
                //X.509 certificates
                if (e.Node.Name.EndsWith(@".crt"))
                {
                    var certBytes = File.ReadAllBytes(e.Node.Name);
                    var cert      = new X509Certificate2(certBytes);
                    X509Certificate2UI.DisplayCertificate(cert);
                }
                //Arcadyan config
                else if (e.Node.Name.EndsWith(@".dft") || e.Node.Name.EndsWith(@".glbcfg"))
                {
                    SetTable(FileToDataTable(e.Node.Name));
                }

                //SQLite Databases
                else if (e.Node.Name.EndsWith(@".db") || e.Node.Name.EndsWith(@".sqlite"))
                {
                    SqliteBrowser.ShowBrowser(e.Node.Name);
                }

                //Anything else is treated as a text file
                else
                {
                    //try text load
                    SetText(File.ReadAllText(e.Node.Name));
                }
            }
            else
            {
                SetClear();
            }
        }
Пример #5
0
        public void DisplayCertificate_Certificate_Empty()
        {
            // this is unusable
            X509Certificate2 empty = new X509Certificate2();

            X509Certificate2UI.DisplayCertificate(empty);
        }
Пример #6
0
        private void OpenExternalLink(object sender, ExecutedRoutedEventArgs e)
        {
            if (e.Command != NavigationCommands.GoToPage)
            {
                return;
            }

            // We might get a certificate to display instead
            if (e.Parameter is X509Certificate2 cert)
            {
                var hwnd = new WindowInteropHelper(this).Handle;
                X509Certificate2UI.DisplayCertificate(cert, hwnd);
                return;
            }

            var uri = e.Parameter as Uri;

            if (uri == null)
            {
                var url = (string)e.Parameter;
                Uri.TryCreate(url, UriKind.Absolute, out uri);
            }

            if (uri != null)
            {
                UriHelper.OpenExternalLink(uri);
            }
        }
Пример #7
0
 /// <summary>
 /// Metodo encargado de obtener el certificado seleccionado desde el almacen de windows
 /// </summary>
 /// <returns></returns>
 public static X509Certificate2 SelectCertManual()
 {
     try
     {
         //Firmar con selección de certificado en el almacén de certificados de windows
         X509Store store = new X509Store(StoreLocation.CurrentUser);
         store.Open(OpenFlags.ReadOnly);
         X509Certificate2 cert = null;
         //eligió manualmente el certificado en el almacén
         //Para "X509Certificate2UI" se debe agregar la referencia a "X509Certificate2UI", llamar a "using System.Security;"
         //**X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection);
         X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates.Find(X509FindType.FindByKeyUsage, "DigitalSignature", false), null, null, X509SelectionFlag.SingleSelection);
         //X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.MultiSelection);
         if (sel.Count > 0)
         {
             cert = sel[0];
         }
         else
         {
             //MessageBox.Show("Certificado no Funciona");
             return(null);
         }
         return(cert);
     }
     catch (Exception ex)
     {
         throw new Exception("ERROR: " + ex);
     }
 }
Пример #8
0
        /// <summary>
        /// Displays a dialog box for selecting an X.509 certificate from a certificate collection.
        /// </summary>
        /// <param name="title">The title of the dialog box.</param>
        /// <param name="message">A descriptive message to guide the user. The message is displayed in the dialog box.</param>
        /// <returns>An X509Certificate2 object that contains the selected certificate.</returns>
        public static X509Certificate2 PickCertificate(string title, string message)
        {
            var x509Store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            try
            {
                x509Store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

                var certificates = X509Certificate2UI.SelectFromCollection(x509Store.Certificates, title, message,
                                                                           X509SelectionFlag.SingleSelection);

                if (certificates.Count == 0)
                {
                    throw new NullReferenceException(
                              "Oops!! Certificado não informado... Não será possível emitir notas fiscais sem um certificado válido.");
                }

                var certificate = certificates[0];

                return(certificate);
            }
            finally
            {
                x509Store.Close();
            }
        }
Пример #9
0
        static X509Certificate2 SelectCertificate(StoreName storeName, StoreLocation storeLocation)
        {
            X509Certificate2 result;

            X509Store store = new X509Store(storeName, storeLocation);

            store.Open(OpenFlags.ReadOnly);
            try
            {
                X509Certificate2Collection matches;
                matches = X509Certificate2UI.SelectFromCollection(store.Certificates, "Select certificate", "Select the certificate to find the location of the associated private key file:", X509SelectionFlag.SingleSelection);
                if (matches.Count != 1)
                {
                    result = null;
                }
                else
                {
                    result = matches[0];
                }
            }
            finally
            {
                store.Close();
            }

            return(result);
        }
Пример #10
0
        private void ButtonEncryptWithStore_Click(object sender, EventArgs e)
        {
            X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly);

            X509Certificate2Collection certs = X509Certificate2UI.SelectFromCollection(store.Certificates, "Certificates", "Choose one certificate...", X509SelectionFlag.SingleSelection);

            store.Close();

            if (certs.Count == 1)
            {
                //ShowCertificate(certs[0]);
                byte[]      data        = Encoding.UTF8.GetBytes(textBoxInfo.Text);
                ContentInfo contentInfo = new ContentInfo(data);

                CmsRecipient cmsRecipient = new CmsRecipient(certs[0]);

                EnvelopedCms envelopedCms = new EnvelopedCms(contentInfo);

                envelopedCms.Encrypt(cmsRecipient);
                this.tempEnvelope = envelopedCms.Encode();

                MessageBox.Show("Data encrypted" + Environment.NewLine + Convert.ToBase64String(this.tempEnvelope));
            }
            else
            {
                MessageBox.Show("No certificate selected");
            }
        }
        public void ChooseClientCertificate()
        {
            var store = new X509Store(mStoreName, mStoreLocation);

            store.Open(OpenFlags.ReadOnly);
            var c = store.Certificates.Find(mFindType, mFindTerm, mValidOnly);
            var selectedCertificate = X509Certificate2UI.SelectFromCollection(
                c,
                "Client Certificate",
                "Choose a client certificate for this session",
                X509SelectionFlag.SingleSelection);

            if (selectedCertificate != null)
            {
                if (selectedCertificate.Count > 0)
                {
                    mCert = selectedCertificate[0];
                    if (CertificateChosen != null)
                    {
                        CertificateChosen(mCert);
                    }
                }
                else
                {
                    if (CertificateNotChosen != null)
                    {
                        CertificateNotChosen();
                    }
                }
            }
        }
Пример #12
0
        public void Sign(string inputPath, string outPath, string imagePath, bool visible = true)
        {
            X509Store store = new X509Store(StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection);

            X509Certificate2 cert = sel[0];

            Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
            Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] {
                cp.ReadCertificate(cert.RawData)
            };

            IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1");

            PdfReader pdfReader = new PdfReader(inputPath);

            var signedPdf = new FileStream(outPath, FileMode.Create);

            var pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

            if (imagePath != null && imagePath != string.Empty)
            {
                signatureAppearance.SignatureGraphic = Image.GetInstance(imagePath);
            }

            signatureAppearance.SetVisibleSignature(new Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "Signature");
            signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;

            MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
            Process.Start(outPath);
        }
Пример #13
0
    static void Main()
    {
        X509Store store = new X509Store("MY", StoreLocation.CurrentUser);

        store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

        X509Certificate2Collection collection  = (X509Certificate2Collection)store.Certificates;
        X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
        X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Test Certificate Select", "Select a certificate from the following list to get information on that certificate", X509SelectionFlag.MultiSelection);

        Console.WriteLine("Number of certificates: {0}{1}", scollection.Count, Environment.NewLine);

        foreach (X509Certificate2 x509 in scollection)
        {
            try
            {
                byte[] rawdata = x509.RawData;
                Console.WriteLine("Content Type: {0}{1}", X509Certificate2.GetCertContentType(rawdata), Environment.NewLine);
                Console.WriteLine("Friendly Name: {0}{1}", x509.FriendlyName, Environment.NewLine);
                Console.WriteLine("Certificate Verified?: {0}{1}", x509.Verify(), Environment.NewLine);
                Console.WriteLine("Simple Name: {0}{1}", x509.GetNameInfo(X509NameType.SimpleName, true), Environment.NewLine);
                Console.WriteLine("Signature Algorithm: {0}{1}", x509.SignatureAlgorithm.FriendlyName, Environment.NewLine);
                Console.WriteLine("Public Key: {0}{1}", x509.PublicKey.Key.ToXmlString(false), Environment.NewLine);
                Console.WriteLine("Certificate Archived?: {0}{1}", x509.Archived, Environment.NewLine);
                Console.WriteLine("Length of Raw Data: {0}{1}", x509.RawData.Length, Environment.NewLine);
                X509Certificate2UI.DisplayCertificate(x509);
                x509.Reset();
            }
            catch (CryptographicException)
            {
                Console.WriteLine("Information could not be written out for this certificate.");
            }
        }
        store.Close();
    }
        public static X509Certificate2 ChooseCertificate()
        {
            X509Certificate2 certificate = null;

            var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

            var collection  = store.Certificates;
            var fcollection = collection.Find(X509FindType.FindByTimeValid, DateTime.Now, true);
            var scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Certificados válidos:",
                                                                      "Selecione o certificado que deseja usar",
                                                                      X509SelectionFlag.SingleSelection);

            if (scollection.Count == 0)
            {
                throw new Exception("Nenhum certificado foi selecionado!");
            }

            certificate = scollection[0];

            if (certificate == null)
            {
                throw new Exception("Nenhum certificado foi selecionado!");
            }

            store.Close();

            return(certificate);
        }
Пример #15
0
        private static StoredCertificate PickCertificate()
        {
            var availableCertificates =
                from location in new[] { StoreLocation.CurrentUser, StoreLocation.LocalMachine }
            from name in new[] { StoreName.My }
            select Tuple.Create(Tuple.Create(location, name), GetCertificates(location, name));

            var appropriateCertificates =
                availableCertificates
                .SelectMany(v => v.Item2)
                .OfType <X509Certificate2>()
                .Where(v => v.HasPrivateKey)
                .GroupBy(v => v.Thumbprint)
                .Select(v => v.First());

            X509Certificate2 selectedCertificate = X509Certificate2UI.SelectFromCollection(
                new X509Certificate2Collection(appropriateCertificates.ToArray()), "Select certificate", string.Empty, X509SelectionFlag.SingleSelection, GetWindowHandle())
                                                   .OfType <X509Certificate2>()
                                                   .FirstOrDefault();

            if (selectedCertificate == null)
            {
                return(null);
            }

            var store = availableCertificates.First(v => v.Item2.Contains(selectedCertificate)).Item1;

            return(new StoredCertificate(store.Item1, store.Item2, selectedCertificate));
        }
Пример #16
0
        /// <summary>
        /// Gets a X509 certificate from windows store. Asks the user for the correct certificate.
        /// </summary>
        /// <returns></returns>
        public static X509Certificate2 GetCertificate()
        {
            var st = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            st.Open(OpenFlags.ReadOnly);
            X509Certificate2 card = null;

            try
            {
                X509Certificate2Collection col = st.Certificates;
                X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(
                    col,
                    "Certificates",
                    "Select one to sign",
                    X509SelectionFlag.SingleSelection);
                if (sel.Count > 0)
                {
                    X509Certificate2Enumerator en = sel.GetEnumerator();
                    en.MoveNext();
                    card = en.Current;
                }
            }
            finally
            {
                st.Close();
            }

            return(card);
        }
Пример #17
0
        }         // Main

        private static X509Certificate2 SeleccionarCertificado(string vMessage, StoreLocation vLocation, StoreName vName)
        {
            X509Store        certStore;
            X509Certificate2 oCertificado = null;

            try
            {
                certStore = new X509Store(vName, vLocation);
                certStore.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                X509Certificate2Collection certsSelect = certStore.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, true);
                X509Certificate2Collection certs       =
                    X509Certificate2UI.SelectFromCollection(
                        certsSelect,
                        "Selección certificado",
                        vMessage,
                        X509SelectionFlag.SingleSelection, IntPtr.Zero);
                if (certs.Count > 0)
                {                    //Almacenamos el certificado en nuestro objeto interno
                    oCertificado = certs[0];
                }
                certStore.Close();
                return(oCertificado);
            }
            catch (Exception e)
            {
                throw (e);
            }
            finally
            {
                certStore = null;
            }
        } //Obtiene un certificado de usuario
Пример #18
0
        public CertificadoDigital()
        {
            var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

            var collection  = store.Certificates;
            var fcollection = collection.Find(X509FindType.FindByTimeValid, DateTime.Now, true);
            var scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Certificados válidos:", "Selecione o certificado que deseja usar",
                                                                      X509SelectionFlag.SingleSelection);

            if (scollection.Count == 0)
            {
                throw new Exception("Nenhum certificado foi selecionado!");
            }

            foreach (var x509 in scollection)
            {
                try
                {
                    Serial   = x509.SerialNumber;
                    Validade = Convert.ToDateTime(x509.GetExpirationDateString());

                    x509.Reset();
                }
                catch (CryptographicException)
                {
                    Console.WriteLine("Não foi possível obter as informações do certificado selecionado!");
                }
            }
            store.Close();
        }
        /// <summary>
        /// Método responsável por abrir um browse para selecionar o
        /// certificado digital que será utilizado para autenticação
        /// dos WebServices e gravar ele no atributo oCertificado
        /// </summary>
        /// <returns>
        /// Retorna se o certificado foi selecionado corretamente ou não.
        /// true  = foi selecionado corretamente.
        /// false = não foi selecionado, algum problema ocorreu ou foi cancelado o selecionamento pelo usuário.
        /// </returns>
        /// <by>Wandrey Mundin Ferreira</by>
        /// <date>04/06/2008</date>
        public bool SelecionarCertificado()
        {
            bool vRetorna;

            X509Certificate2 oX509Cert = new X509Certificate2();
            X509Store        store     = new X509Store("MY", StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
            X509Certificate2Collection collection  = (X509Certificate2Collection)store.Certificates;
            X509Certificate2Collection collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
            X509Certificate2Collection collection2 = (X509Certificate2Collection)collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false);
            X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(collection2, "Certificado(s) Digital(is) disponível(is)", "Selecione o certificado digital para uso no aplicativo", X509SelectionFlag.SingleSelection);

            if (scollection.Count == 0)
            {
                string msgResultado = "Nenhum certificado digital foi selecionado ou o certificado selecionado está com problemas.";
                MessageBox.Show(msgResultado, "Advertência", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                vRetorna = false;
            }
            else
            {
                oX509Cert    = scollection[0];
                oCertificado = oX509Cert;
                vRetorna     = true;
            }

            return(vRetorna);
        }
Пример #20
0
        private void OpenCertificateFile_Click(object sender, RoutedEventArgs e)
        {
            // get file path for log
            var certPath = this.MainViewModel.SelectedItem.CertificatePath;

            //check file exists, if not inform user
            if (!String.IsNullOrEmpty(certPath) && System.IO.File.Exists(certPath))
            {
                //open file
                var cert = CertificateManager.LoadCertificate(certPath);

                if (cert != null)
                {
                    //var test = cert.PrivateKey.KeyExchangeAlgorithm;
                    // System.Diagnostics.Debug.WriteLine(test.ToString());

                    X509Certificate2UI.DisplayCertificate(cert);
                }

                //MessageBox.Show(Newtonsoft.Json.JsonConvert.SerializeObject(cert.PrivateKey, Newtonsoft.Json.Formatting.Indented));
            }
            else
            {
                MessageBox.Show(SR.ManagedItemSettings_CertificateNotReady);
            }
        }
Пример #21
0
        public static void ShowX509Certificate(string certString)
        {
            var bytes = Convert.FromBase64String(certString);
            var cert  = new X509Certificate2(bytes);

            X509Certificate2UI.DisplayCertificate(cert);
        }
Пример #22
0
        /// <summary>
        /// Select certificate from selected store name and store location
        /// </summary>
        /// <returns></returns>
        public string SelectSertificateName()
        {
            var store = new X509Store(m_StoreName, m_StoreLocation);

            store.Open(OpenFlags.ReadOnly);
            try
            {
                var certs = X509Certificate2UI.SelectFromCollection(
                    store.Certificates,
                    "Real Certificate Select",
                    "Select real monitoring certificate",
                    X509SelectionFlag.SingleSelection);

                if (certs.Count == 1)
                {
                    return(certs[0].Subject.Substring(3));
                }
                else
                {
                    return("");
                }
            }
            finally
            {
                store.Close();
            }
        }
Пример #23
0
        private void bt_UserClientCertSelect_Click(object sender, RoutedEventArgs e)
        {
            var SeachScope = ((Button)sender).Content.ToString();

            String StoreLocationAsString = SeachScope.Substring(0, SeachScope.IndexOf("."));
            String StoreNameAsString     = SeachScope.Substring(SeachScope.IndexOf(".") + 1);

            StoreName     StoreNameParsed;
            StoreLocation StoreLocationParsed;

            if (Enum.TryParse(StoreNameAsString, out StoreNameParsed) && Enum.TryParse(StoreLocationAsString, out StoreLocationParsed))
            {
                X509Store store = new X509Store(StoreNameParsed, StoreLocationParsed);
                store.Open(OpenFlags.ReadOnly);
                X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection);
                store.Close();

                if (sel.Count > 0)
                {
                    this.AppConfiguration.CertStoreName     = StoreNameAsString;
                    this.AppConfiguration.CertStoreLocation = StoreLocationAsString;
                    this.AppConfiguration.CertSerial        = sel[0].SerialNumber;
                    txt_ClientCertSubject.Text = sel[0].Subject;
                }
            }
        }
Пример #24
0
        private void oAddFromStoreButton_Click(object sender, RoutedEventArgs e)
        {
            // open the locate personal certificate store
            using (X509Store oStore = new X509Store(StoreName.My, StoreLocation.CurrentUser))
            {
                oStore.Open(OpenFlags.ReadOnly);

                // downselect to only display rsa certs
                X509Certificate2Collection oCollection = new X509Certificate2Collection();
                foreach (X509Certificate2 oCert in oStore.Certificates)
                {
                    if (oCert.GetRSAPublicKey() != null && CertificateOperations.CheckCertificateStatus(oCert))
                    {
                        oCollection.Add(oCert);
                    }
                }

                // ask the user which certificate to publish
                oCollection = X509Certificate2UI.SelectFromCollection(oCollection,
                                                                      "Select Certificate", "Select Certificate To Add",
                                                                      X509SelectionFlag.SingleSelection, new WindowInteropHelper(this).Handle);

                // commit the certificate to the database
                foreach (X509Certificate2 oCert in oCollection)
                {
                    AddCertificate(oCert, WindowsIdentity.GetCurrent().User.Value);
                }
            }
        }
Пример #25
0
        private void btnViewCert_Click(object sender, EventArgs e) //Angepasst, sodass beide Zertifikate angezeigt werden können
        {
            X509Certificate2 cert  = null;                         //Standard Cert
            X509Certificate2 cert2 = null;                         //Admin Cert

            string devName = YubikeyPivManager.Instance.ListDevices().FirstOrDefault();

            if (!string.IsNullOrEmpty(devName))
            {
                using (YubikeyPivDevice dev = YubikeyPivManager.Instance.OpenDevice(devName))
                {
                    cert  = dev.GetCertificate9a();
                    cert2 = dev.GetCertificate9d();
                }
            }

            if (cert == null)
            {
                MetroMessageBox.Show(this, "No Standard User certificate on device.", "No Certificate", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                X509Certificate2UI.DisplayCertificate(cert);
            }
            if (cert2 == null)
            {
                MetroMessageBox.Show(this, "No Admin User certificate on device.", "No Certificate", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                X509Certificate2UI.DisplayCertificate(cert2);
            }
        }
 private static X509Certificate2 selectcert() //select cert from store & set selectedcert
 {
     try
     {
         if (File.Exists("c:\\hasher.cer"))
         {
             X509Certificate2 cert = new X509Certificate2("c:\\hasher.cer");
             appLog.WriteEntry("Selected Cert: " + cert.Subject, System.Diagnostics.EventLogEntryType.Information);
             return(cert);
         }
         else
         {
             System.Security.Cryptography.X509Certificates.X509Store mystore = new System.Security.Cryptography.X509Certificates.X509Store(StoreLocation.CurrentUser);
             mystore.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
             X509Certificate2Collection certCollection     = (X509Certificate2Collection)mystore.Certificates;
             X509Certificate2Collection foundCollection    = (X509Certificate2Collection)certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
             X509Certificate2Collection selectedcollection = X509Certificate2UI.SelectFromCollection(foundCollection, "Select a Certificate.", "Select a Certificate from the following list to get information on that certificate", X509SelectionFlag.SingleSelection);
             if (selectedcollection.Count > 0)
             {
                 X509Certificate2 certz = selectedcollection[0];
                 appLog.WriteEntry("Selected Cert: " + certz.Subject, System.Diagnostics.EventLogEntryType.Information);
                 return(certz);
             }
             appLog.WriteEntry("No Cert Selected", System.Diagnostics.EventLogEntryType.Warning);
             return(null);
         }
     }
     catch (Exception e)
     {
         appLog.WriteEntry(e.Message + e.StackTrace, System.Diagnostics.EventLogEntryType.Warning);
         return(null);
     }
 }
Пример #27
0
        private void OpenCertificateFile_Click(object sender, RoutedEventArgs e)
        {
            var certPath = ItemViewModel.SelectedItem.CertificatePath;

            //check file exists, if not inform user
            if (!string.IsNullOrEmpty(certPath) && System.IO.File.Exists(certPath))
            {
                //open file, can fail if file is in use TODO: will fail if cert has a pwd
                try
                {
                    var cert = CertificateManager.LoadCertificate(certPath);

                    if (cert != null)
                    {
                        //var test = cert.PrivateKey.KeyExchangeAlgorithm;
                        // System.Diagnostics.Debug.WriteLine(test.ToString());

                        X509Certificate2UI.DisplayCertificate(cert);
                    }
                }
                catch { }
            }
            else
            {
                MessageBox.Show(SR.ManagedCertificateSettings_CertificateNotReady);
            }
        }
Пример #28
0
        /// <summary>
        /// Requests the user to pick a certificate from the provided <see cref="X509Store"/>.
        /// </summary>
        /// <param name="info">The Credential request info from the <see cref="AuthenticationManager"/>.</param>
        /// <param name="x509Store">The certificate store.</param>
        /// <returns>A certificate picked by the user.</returns>
        public static CertificateCredential?SelectCertificate(CredentialRequestInfo info, X509Store x509Store)
        {
            if (info is null)
            {
                throw new ArgumentNullException(nameof(info));
            }

            if (x509Store is null)
            {
                throw new ArgumentNullException(nameof(x509Store));
            }

            x509Store.Open(OpenFlags.ReadOnly);

            X509Certificate2Collection col = x509Store.Certificates;
            X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(col, "Login required", "Certificate required for " + info.ServiceUri, X509SelectionFlag.SingleSelection);

            X509Certificate2Enumerator en = sel.GetEnumerator();

            if (en.MoveNext())
            {
                return(new CertificateCredential(en.Current));
            }

            return(null);
        }
Пример #29
0
        private void CertifikataBtn_Click(object sender, EventArgs e)
        {
            X509Store certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            certificateStore.Open(OpenFlags.OpenExistingOnly);

            try
            {
                X509Certificate2Collection certCollection = X509Certificate2UI.SelectFromCollection(
                    certificateStore.Certificates, "Certifikata", "Zgjedh certifikaten", X509SelectionFlag.SingleSelection);

                certifikata = certCollection[0];
                if (certifikata.HasPrivateKey)
                {
                    MessageBox.Show("Certifikata e zgjedhur :  " +
                                    certifikata.Subject);
                }
                else
                {
                    MessageBox.Show("Certifikata e zgjedhur nuk permbane celes privat!");
                }
            }
            catch (Exception ex)
            {
            }
            if (certifikata != null)
            {
                byte[] byteCert = certifikata.Export(X509ContentType.Cert, "Altin1");
                accept.Send(byteCert, 0, byteCert.Length, 0);
            }
        }
Пример #30
0
        private X509Certificate2 SeleccionarCertificado()
        {
            X509Certificate2 cert = null;

            try
            {
                X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

                X509Certificate2Collection collection  = (X509Certificate2Collection)store.Certificates;
                X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);

                X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Seleccionar certificado", "Certificado para firmar la solicitud", X509SelectionFlag.SingleSelection);

                if (scollection != null && scollection.Count == 1)
                {
                    cert = scollection[0];

                    if (cert.HasPrivateKey == false)
                    {
                        throw new Exception("El certificado no tiene asociada una clave privada.");
                    }
                }

                store.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("No se ha podido obtener la clave privada.", ex);
            }

            return(cert);
        }