Как правильно проверить клиентский сертификат TLS с помощью библиотеки tls в Haskell?
У меня есть рабочий сервер 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
?