gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:39 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com