Come diagnosticare l'avviso senza certificato

1

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.

    
posta Chris Dunaway 18.02.2014 - 17:32
fonte

1 risposta

2

Beh no, non funzionerà per te. Il punto di un certificato cliente non è in realtà la parte cert, ma la chiave privata legata al certificato cliente. Se non hai la chiave privata non puoi fare nulla di utile. Quello che succederebbe è che la richiesta che invii viene crittografata con la chiave pubblica del server e decifrata con la sua chiave privata. Viceversa, qualsiasi risposta inviata dal server viene crittografata con la chiave pubblica (il certificato). Per decrittografare la risposta è necessaria una chiave privata.

Quello che ti serve dagli altri è il file PFX. In realtà, dovresti generare le chiavi localmente e inviarle il certificato cliente. Solo il certificato però, non la chiave privata.

    
risposta data 18.02.2014 - 18:04
fonte

Leggi altre domande sui tag