コード例 #1
0
        /// <summary cref="ICertificateStore.Add(X509Certificate2)" />
        public async Task Add(X509Certificate2 certificate)
        {
            if (certificate == null)
            {
                throw new ArgumentNullException("certificate");
            }

            // check for existing certificate.
            byte[] thumbprint = new byte[certificate.Thumbprint.Length];
            for (int i = 0; i < certificate.Thumbprint.Length; i++)
            {
                thumbprint[i] = (byte)certificate.Thumbprint[i];
            }

            CertificateQuery query = new CertificateQuery();

            query.Thumbprint = thumbprint;
            IReadOnlyList <Certificate> pCertContext = await CertificateStores.FindAllAsync(query);

            if (pCertContext.Count != 0)
            {
                throw ServiceResultException.Create(
                          StatusCodes.BadUnexpectedError,
                          "Certificate is already in the store.\r\nType={0}, Name={1}, Subject={2}",
                          m_storeType,
                          m_symbolicName,
                          certificate.Subject);
            }

            lock (m_lock)
            {
                // add certificate.
                CertificateFactory.AddCertificateToWindowsStore(
                    m_storeType == WindowsStoreType.LocalMachine,
                    m_symbolicName,
                    certificate);
            }
        }