Per ignorare gli errori del certificato ssl, sto impostando ServicePointManager.ServerCertificateValidationCallback
in un metodo statico prima di effettuare un HttpWebRequest
. Voglio solo che questo sia fatto per le richieste interne e quindi sto reimpostando la proprietà sul suo valore predefinito nel blocco finally
. Ma poiché si tratta di un'applicazione Web, ci saranno problemi quando più thread stanno modificando la proprietà?È sicuro per più thread impostare ServicePointManager.ServerCertificateValidationCallback?
Ecco come sto usando la proprietà
public static String GetResource()
{
try
{
ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
}
catch()
{
}
finally
{
ServicePointManager.ServerCertificateValidationCallback -= delegate { return false; };
}
}
- Sarà questo codice essere threadsafe? La documentazione su msdn dice che tutti i membri statici del tipo ServicePointManager sono thread-safe, ma volevo solo confermarli. http://msdn.microsoft.com/en-us/library/zkfa48de%28v=vs.80%29.aspx
- Il codice nel blocco finally, è il modo corretto di reimpostarlo sul valore predefinito?
No, questo non sarà "thread-safe". Il callback può essere modificato da qualsiasi altro thread in qualsiasi momento. –
BTW, "thread safe" in termini di membri statici significa semplicemente che quei membri modificano atomicamente lo stato statico (se presente). Due thread che modificano 'ServerCertificateValidationCallback' sono" thread safe "a tale riguardo. Ma, dal punto di vista della vostra applicazione, questo non è thread-safe perché i dati di un thread (* il suo * valore "ServerCertificateValidationCallback') possono essere sovrascritti da un altro thread - potenzialmente causando il malfunzionamento del codice nel thread. Non c'è modo di sincronizzare l'accesso a 'ServerCertificateValidationCallback' in thread su cui non si ha il controllo. –
Grazie Peter per la tua risposta. Vedo molti post in cui hanno suggerito questa tecnica, ma a quanto pare non funziona. Non sono sicuro di quale sia il modo migliore per ignorare gli errori del certificato SSL per le richieste Web interne. – user1689030