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

时间:2017-10-24 20:16:29

标签: validation security haskell ssl client-certificates

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

当前版本的服务器不使用TLS(它当前部署在TLS终止代理后面),因此我在cabal文件中创建了一个额外的可执行目标。此新的可执行文件会从Network.Wai.Handler.Warp.runSettings包中的warp包替换Network.Wai.Handler.WarpTLS.runTLS warp-tls

在我向Network.Wai.Handler.WarpTLS.TLSSettings提供的runTLS中,我将tlsWantClientCert设置为True并提供onClientCertificate的实施。我的问题是,我需要在onClientCertificate中做些什么才能确保客户端证书有效?什么已经检查过客户端证书(如果有的话),还有什么需要检查?现在,服务器证书链和客户端证书是不相关的; tls库如果以某种方式相关,会做更多吗?

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

0 个答案:

没有答案