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

Jas*_*tle 8 security validation ssl haskell client-certificates

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

服务器的当前版本不使用TLS(当前已部署在TLS终止代理之后),因此我在cabal文件中创建了一个附加的可执行目标。这种新的可执行内容替换Network.Wai.Handler.Warp.runSettingswarpNetwork.Wai.Handler.WarpTLS.runTLSwarp-tls包。

Network.Wai.Handler.WarpTLS.TLSSettings我提供runTLS的,我设置tlsWantClientCertTrue并提供的实现onClientCertificate。我的问题是,我需要做什么onClientCertificate以确保客户端证书有效?已经对客户端证书进行了哪些检查(如果有的话),还需要检查什么?目前,服务器证书链和客户端证书无关。并在tls图书馆做多,如果他们在某些方面正在有关系吗?

Network.TLS有一个标记为“ X509验证”的部分,但是该部分中没有执行验证的内容。从源代码上看,该部分中的所有内容似乎都来自软件包中的Data.X509.Validation模块x509-validation。该模块还提供了validate功能。够了吗?是否存在从Data.X509.Validation.FailedReason到的映射Network.TLS.CertificateRejectReason