使用 Haskell 中的 tls 库验证客户端 TLS 证书的正确方法是什么?

What is the right way to validate a client TLS cert using the tls library in Haskell?

提问人:Jason Whittle 提问时间:10/25/2017 更新时间:10/17/2019 访问量:351

问:

我有一个工作 Yesod/Warp 服务器。我想为这个服务器配备一个允许管理员用户使用客户端证书进行身份验证的能力。此外,我想为每个管理员分配他们自己的客户端证书,以便我可以在服务器上单独跟踪他们。

当前版本的服务器不使用 TLS(它目前部署在 TLS 终止代理后面),所以我在 cabal 文件中创建了一个额外的可执行目标。这个新的可执行文件将 from the package 替换为 from the package。Network.Wai.Handler.Warp.runSettingswarpNetwork.Wai.Handler.WarpTLS.runTLSwarp-tls

在 I provide to 中,我设置并提供了 的实现。我的问题是,我需要做些什么来确保客户端证书有效?客户端证书中已经检查了哪些内容(如果有),哪些内容仍需要检查?目前,服务器证书链和客户端证书是无关的;如果它们以某种方式相关,图书馆会做更多的事情吗?Network.Wai.Handler.WarpTLS.TLSSettingsrunTLStlsWantClientCertTrueonClientCertificateonClientCertificatetls

Network.TLS有一个标记为“X509 验证”的部分,但我在该部分中没有看到任何执行验证的内容。从源代码来看,该部分中的所有内容似乎都来自包中的模块。该模块还提供了一个功能。这够了吗?是否有从 到 的现有映射?Data.X509.Validationx509-validationvalidateData.X509.Validation.FailedReasonNetwork.TLS.CertificateRejectReason

验证 安全性 haskell ssl client-certificates

评论

0赞 Ente 10/24/2019
除了描述你所做的事情之外,我还建议添加一些重要的代码。此外,我会尝试一次只问一个问题。也许可以尝试将这篇包含至少 5 个问题的大帖子拆分为单独的问题。
0赞 Joseph Sible-Reinstate Monica 10/24/2019
@Ente我不同意。这个问题完美地解释了想要什么,并且没有相关的代码要发布。这也是一个关于如何实现单个目标(验证客户端证书)的单一问题,在大多数程序中只是一个开/关设置,因此不应将其拆分。

答: 暂无答案