ServerCertificateCustomValidationCallback 自定义异常

ServerCertificateCustomValidationCallback customize exception

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

“远程证书被提供的 RemoteCertificateValidationCallback 拒绝”

信息量不大。

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

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

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