Invio di certificati digitali

2

Ho usato lo strumento makecert per creare:

  1. un certificato autofirmato
  2. un certificato server che utilizza il certificato autofirmato
  3. un certificato client che utilizza il certificato autofirmato

Ho quindi installato il certificato autofirmato nella sezione Autorità di certificazione attendibili in mmc.

Il certificato del server e il certificato del cliente sono stati installati nella sezione Personale in mmc.

Ho quindi distribuito un servizio Web in IIS come HTTP utilizzando il certificato del server.

Ho quindi un'altra applicazione che fa uso del servizio web. Invia il certificato client con la richiesta di servizio web, come mostrato di seguito:

public static void Main(string[] args)
        {
            X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
            store.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection col = store.Certificates.Find(X509FindType.FindBySubjectName, "client.com", true);

            if (col.Count == 1)
            {
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;

                ClientServices web_service = new ClientServices();
                web_service.ClientCertificates.Add(col[0]);

                try
                {
                    string check = web_service.CheckCertificate();

                    Console.WriteLine(check);
                }
                catch (WebException e)
                {
                    Console.WriteLine(e.Message.ToString());
                }
            }

            else
            {
                Console.WriteLine("The certificate was not found!");
            }
            Console.ReadKey();
        }

Sul lato server, sto verificando il certificato client come questo:

[WebMethod]
        public string CheckCertificate()
        {
            string message;

            try
            {
                X509Certificate2 cert = new X509Certificate2(Context.Request.ClientCertificate.Certificate);                

                if (cert != null)
                {
                    message = cert.SerialNumber.ToString();
                }

                else
                {
                    message = "Error: No certificate was found!";
                }
            }
            catch (Exception e)
            {
                message = e.Message.ToString();
            }
            return message;
        }

Ogni volta che eseguo l'app client, visualizzo il seguente messaggio di errore:

La richiesta è stata interrotta. Impossibile creare il canale sicuro SSL / TLS.

Come posso risolvere questo problema per favore? Sono rimasto bloccato su questo per due giorni, quindi qualsiasi aiuto sarebbe immensamente apprezzato.

    
posta Matthew 27.04.2013 - 16:54
fonte

1 risposta

0

Ho risolto il problema. Ho installato lo strumento WinHttpCertCfg e concesso l'accesso alla chiave privata. Il comando che ha funzionato per me è:

WinHttpCertCfg.exe -g -c LOCAL_MACHINE \ MY -s "" -a TUTTI

    
risposta data 28.04.2013 - 09:42
fonte