Как правильно проверить клиентский сертификат 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?

0 ответов

Другие вопросы по тегам