我有一台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.FailedReason
到Network.TLS.CertificateRejectReason
的现有映射?