Domsterの回答で使用される検証コールバックの範囲は、デリゲートの送信者パラメーターを使用して特定のリクエストに制限できますServerCertificateValidationCallback
。次の単純なスコープクラスは、この手法を使用して、特定の要求オブジェクトに対してのみ実行される検証コールバックを一時的に接続します。
public class ServerCertificateValidationScope : IDisposable
{
private readonly RemoteCertificateValidationCallback _callback;
public ServerCertificateValidationScope(object request,
RemoteCertificateValidationCallback callback)
{
var previous = ServicePointManager.ServerCertificateValidationCallback;
_callback = (sender, certificate, chain, errors) =>
{
if (sender == request)
{
return callback(sender, certificate, chain, errors);
}
if (previous != null)
{
return previous(sender, certificate, chain, errors);
}
return errors == SslPolicyErrors.None;
};
ServicePointManager.ServerCertificateValidationCallback += _callback;
}
public void Dispose()
{
ServicePointManager.ServerCertificateValidationCallback -= _callback;
}
}
上記のクラスを使用すると、次のように特定の要求のすべての証明書エラーを無視できます。
var request = WebRequest.Create(uri);
using (new ServerCertificateValidationScope(request, delegate { return true; }))
{
request.GetResponse();
}