Ho scritto un'applicazione (in C #) per comunicare con uno dei nostri clienti tramite un servizio web. Il nostro cliente ci richiede di utilizzare SSL bidirezionale. Il cliente ci ha inviato il suo certificato (nella forma di un file .p7b). Il certificato del cliente mi è stato fornito sotto forma di file .cer.
Ho installato i certificati e nel programma utilizzo la classe HttpWebRequest e aggiungo il certificato client alla raccolta ClientCertificates.
Quando eseguo il programma ottengo un'eccezione:
System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
Ho usato WireShark per provare a diagnosticare l'errore e vedo questo (indirizzo IP redatto):
1615 12.259771000 CLIENT_IP SERVER_IP SSLv3 112 Client Hello
1629 12.429299000 SERVER_IP CLIENT_IP SSLv3 1488 Server Hello, Certificate, Certificate Request, Server Hello Done
1630 12.445672000 CLIENT_IP SERVER_IP SSLv3 397 Alert (Level: Warning, Description: No Certificate), Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
1645 12.666191000 SERVER_IP CLIENT_IP SSLv3 61 Alert (Level: Fatal, Description: Handshake Failure)
Sembra che il server abbia inviato il loro certificato, ma per qualche motivo, la mia app non ne sta inviando uno, quindi invia l'avviso No Certificate. Tuttavia, nel mio codice, sembra trovare il certificato e viene aggiunto alla raccolta ClientCertificate della classe HttpWebRequest. Dal momento che sono abbastanza nuovo per SSL, non sono sicuro di dove si trova il problema? Potrebbe essere un errore di programmazione, ma l'utilizzo di alcuni certificati di prova sembrava funzionare. L'avviso indica che c'è un problema con il certificato del cliente? Alcuni post che ho letto sembrano indicare che sebbene la chiave privata non sia inviata al server, è ancora necessaria sul lato client. Ma dopo aver caricato il certificato (utilizzando la classe .Net X509Certificate2), noto che la proprietà PrivateKey è null. Questa potrebbe essere la fonte del problema? Il file .cer mi è stato fornito da qualcun altro nella società.
Qualsiasi aiuto o suggerimento sarebbe utile. Mi sono astenuto dal pubblicare il codice perché non sono sicuro che sia il benvenuto qui, ma posso postarne alcuni se necessario.