【问题标题】:ServerCertificateCustomValidationCallback customize exceptionServerCertificateCustomValidationCallback 自定义异常
【发布时间】:2021-09-09 02:15:39
【问题描述】:

我想通过 HttpClientHandler 的 ServerCertificateCustomValidationCallback 属性进行自定义证书验证。但是,提供的回调只能返回 true(对于有效证书)或 false(对于无效证书)。如果证书被拒绝,在客户端我会收到一条标准错误消息:

"远程证书被提供的 RemoteCertificateValidationCallback 拒绝"

信息量不大。

我想在错误消息中提供更多信息,说明证书无效的原因,例如主机名不匹配、缺少证书、不受信任的根、已撤销等,以便用户更轻松地诊断问题。是否有可能以某种方式从回调中传递这些信息?特别是,我可以从回调中抛出异常而不是返回 false 吗?如果没有,还有什么方法可以做到这一点?

【问题讨论】:

    标签: c# .net-core https ssl-certificate dotnet-httpclient


    【解决方案1】:

    抛出回调可能会导致您的消息正确通过,尽管它会跳过正在进行的 TLS 会话的正常关闭。

    一个更优雅的选择可能是包装 SslStream/HttpClient/etc 并让回调在它即将返回 false 时设置一个实例消息,然后拦截抛出的 AuthenticationException 并改为抛出你自己的。

    【讨论】:

    • 感谢您的回答。优雅的选择似乎更好。如果在多线程环境中使用相同的 HttpClient,则在实例中设置消息可能很困难。也许我应该以某种方式将此信息保存到 HttpRequestMessage 中,因为它已传递给回调?我想可以使用 HttpRequestMessage.Options 即使这看起来像一个黑客。我希望有一种方法可以根据每个请求保存此错误信息。
    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2016-07-27
    • 2015-02-05
    • 2011-02-11
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多