2011-10-26 22 views
5

Nella mia applicazione sono presenti situazioni in cui è necessario effettuare richieste a server con certificati autofirmati. Vorrei poter disabilitare la convalida del certificato solo per quella particolare richiesta.Disabilitazione della convalida del certificato per una singola richiesta

So che è possibile disabilitare la convalida del certificato impostando ServicePointManager.ServerCertificateValidationCallback in modo che punti a un metodo di callback e restituisca semplicemente true. Tuttavia, ciò disabilita la convalida del certificato per l'intera applicazione, che potrei semplicemente fare impostando in app.config.

Tuttavia, non desidero disabilitare per l'intera applicazione, ma piuttosto disabilitare per una singola richiesta. È possibile?

La classe che sto lavorando è SmtpClient

risposta

0

disabilitando la convalida del certificato è generalmente una cattiva idea. Perché non aggiungere semplicemente il certificato personalizzato come certificato attendibile sul sistema o nell'applicazione.

AFAIR questo può essere fatto ad es. implementando il tuo X509CertificateValidator. Basta incorporare il certificato personalizzato nell'applicazione e confrontarlo con X509CertificateValidator se entrambi sono uguali.

Consulta anche: How safe is my custom SSL verification logic to handle excepted RemoteCertificateNameMismatch?

+0

Robert Thaks per la risposta. In alcune parti della nostra applicazione non vogliamo consentire se un certificato non è valido. Tuttavia, in questo caso particolare in cui stiamo inviando email, vogliamo utilizzare SSL, ma stiamo riscontrando che molti clienti hanno certificati SSL autofirmati che comportano l'impossibilità di inviare l'e-mail. Sfortunatamente questo è spesso il caso dei server SMTP e sarebbe un incubo importare un certificato per ogni server smtp che non ha funzionato, quindi vogliamo consentire a SMTP di accettare i fallimenti dei certificati e altre parti della nostra applicazione ancora da applicare. –

+0

Quindi potrebbe essere necessario utilizzare lo schema di convalida utilizzato anche nel client di posta "K9" Android che ha esattamente lo stesso problema. La prima volta che incontra un certificato non attendibile mostra alcuni dettagli del certificato chiedere all'utente se si fida di questo certificato. Se l'utente risponde sì AFAIR salva l'hash del certificato nel file delle impostazioni contrassegnando questo certificato come valido. Il validatore di certificati interno accetta quindi tutti i certificati regolari più quello con l'hash salvato. Funziona per tutti ed è ancora relativamente sicuro. – Robert

+0

Sfortunatamente questo è un servizio quindi non ha un'interfaccia utente e quindi non ha alcuna finestra di dialogo che un utente può fare clic per accettare il certificato. –

Problemi correlati