haskell - 如何向 http-client-tls 提供客户端证书?

标签 haskell ssl https

我正在使用 http-client-tls连接到需要客户端证书的启用 TLS 的服务器。我怀疑我需要调整 TLSSettings使用加载的证书和正确的密码套件参数,但绝对不清楚如何执行此操作。

有人有一些使用客户端证书的示例代码吗?

最佳答案

感谢 Moritz Agerman 分享他的代码。这是一个完整的 Haskell 模块,它可以使用 crt.pemkey.pem 文件来提供服务器请求的客户端证书:

 {-# LANGUAGE OverloadedStrings #-}
 module TLS where

 import           Data.Default
 import           Network.Connection
 import           Network.HTTP.Client
 import           Network.HTTP.Client.TLS
 import           Network.TLS
 import           Network.TLS.Extra.Cipher
 import           Servant.Client

 makeClientManager :: String -> Scheme -> IO Manager
 makeClientManager hostname Https = mkMngr hostname "crt.pem" "key.pem"
 makeClientManager _        Http  = newManager defaultManagerSettings

 mkMngr :: String -> FilePath -> FilePath -> IO Manager
 mkMngr hostName crtFile keyFile = do
   creds <- either error Just `fmap` credentialLoadX509 crtFile keyFile
   let hooks = def
               { onCertificateRequest = \_ -> return creds
               , onServerCertificate = \_ _ _ _ -> return []
               }
       clientParams = (defaultParamsClient hostName  "")
                      { clientHooks = hooks
                      , clientSupported = def { supportedCiphers = ciphersuite_all }
                      }
       tlsSettings = TLSSettings clientParams

   newManager $ mkManagerSettings tlsSettings Nothing

不确定这是否会绕过服务器证书验证,因为 onServerCertificate Hook 是常量 []

关于haskell - 如何向 http-client-tls 提供客户端证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40081508/

相关文章:

string - Haskell:整数解析的优雅解决方案

c# - 如何使用 Silverlight 实现 WCF,同时支持 ASP.NET session 状态和 SSL?

java - 仍然收到致命警报 : bad_certificate ,

web-applications - 如何验证安全 https 页面加载时没有任何浏览器警告?

haskell - 从 Haskell 的列表中选择一个随机元素

Haskell 二次解查找器 - 错误

ssl - cURL 到 https URL 是否需要在服务器上安装 SSL 证书?

java - 如何为 Github API 验证基本 Java 程序

c# - .NET 核心 HttpClient - "A security error occurred"HttpRequestException

haskell - 检测什么函数引发了异常 Prelude。!! : negative index