2016-10-17 77 views
5

İstemci sertifikası gerektiren bir TLS etkin sunucuya bağlanmak için http-client-tls kullanıyorum. Yüklü bir sertifika ve doğru cypher paketleri parametreleriyle TLSSettings'u değiştirmem gerektiğinden şüpheleniyorum, ancak bunun nasıl yapılacağı kesinlikle net değil.İstemci sertifikası nasıl http-client-tls için sağlanır?

İstemci tarafı sertifikalarını kullanan bazı örnek kodların var mı?

+0

Şu anda bu konudaki ipuçlarını takip etmeye çalışmak: https://groups.google.com/forum/#!topic/yesodweb/yJliYgU-NE4 – insitu

cevap

3

Kodunu paylaştığı için Moritz Agerman'a teşekkürler. İşte sunucu tarafından istendiği gibi istemci tarafı sertifikasını temin etmek crt.pem ve key.pem dosyalarını kullanabilirsiniz tam Haskell modülüdür:

{-# 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 kanca sabit [] olduğu gibi bu baypas sunucu sertifikası doğrulama yapar ya da değil emin değilim.

+3

Sorunuzu yanıtlamak için, kodunuz sunucu sertifikası doğrulamasını atlıyor. Bu kodu kullanan herkes, ne yaptığını bilmedikçe "onServerCertificate" satırını kaldırmalıdır. Olduğu gibi, bu kod tehlikelidir. – mmalone

+0

Teşekkürler, bu eksikliğin farkındayım. – insitu