2016-10-17 5 views
5

मैं एक TLS- सक्षम सर्वर से कनेक्ट करने के लिए http-client-tls का उपयोग कर रहा हूं जिसके लिए क्लाइंट प्रमाणपत्र की आवश्यकता है। मुझे संदेह है कि मुझे लोड किए गए प्रमाणपत्र और सही साइफर-सूट पैरामीटर के साथ TLSSettings को ट्वीक करने की आवश्यकता है, लेकिन यह निश्चित रूप से स्पष्ट नहीं है कि यह कैसे करें।http-client-tls पर क्लाइंट प्रमाणपत्र कैसे प्रदान करें?

किसी क्लाइंट-साइड प्रमाण पत्र का उपयोग करता है कुछ उदाहरण कोड है?

+0

वर्तमान में इस धागे में संकेतों का पालन करने का प्रयास कर रहे हैं: https://groups.google.com/forum/#!topic/yesodweb/yJliYgU-NE4 – insitu

उत्तर

3

मॉरित्ज़ एर्ममैन को अपना कोड साझा करने के लिए धन्यवाद। यहाँ एक पूर्ण हास्केल मॉड्यूल 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 हुक एक निरंतर [] है।

+3

अपने प्रश्न का उत्तर देने के लिए, आपका कोड सर्वर प्रमाणपत्र प्रमाणीकरण बाईपास करता है। इस कोड का उपयोग करने वाले किसी भी व्यक्ति को 'ऑनसेवर सर्टिफिकेट' लाइन को तब तक हटा देना चाहिए जब तक उन्हें पता न हो कि वे क्या कर रहे हैं। जैसा कि है, यह कोड खतरनाक है। – mmalone

+0

धन्यवाद, मुझे इस कमी के बारे में पता है। – insitu

संबंधित मुद्दे