3 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
事實(shí)證明,如果您只想完全禁用證書驗(yàn)證,則可以在ServicePointManager上更改ServerCertificateValidationCallback,如下所示:
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
這將驗(yàn)證所有證書(包括無效,過期或自簽名的證書)。

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
使用代理上的sender參數(shù),可以將Domster答案中使用的驗(yàn)證回調(diào)的范圍限制為特定請求ServerCertificateValidationCallback。以下簡單的作用域類使用此技術(shù)臨時(shí)連接僅對給定請求對象執(zhí)行的驗(yàn)證回調(diào)。
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;
}
}
上面的類可用于忽略特定請求的所有證書錯(cuò)誤,如下所示:
var request = WebRequest.Create(uri);
using (new ServerCertificateValidationScope(request, delegate { return true; }))
{
request.GetResponse();
}
- 3 回答
- 0 關(guān)注
- 1021 瀏覽
添加回答
舉報(bào)