मॉरित्ज़ एर्ममैन को अपना कोड साझा करने के लिए धन्यवाद। यहाँ एक पूर्ण हास्केल मॉड्यूल crt.pem
और key.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
हुक एक निरंतर []
है।
वर्तमान में इस धागे में संकेतों का पालन करने का प्रयास कर रहे हैं: https://groups.google.com/forum/#!topic/yesodweb/yJliYgU-NE4 – insitu