7
votes

Https via le proxy complètement crypté, y compris SSL Connect

J'essaie de tester un proxy qui attend immédiatement une poignée de main SSL, même si le client utilisera une méthode SSL Connect. Le problème est que mon code de test de Golang et de Python semble avoir la même faille. Ils se connectent au proxy dans le clair, puis émettent une connexion, mais le proxy le rejette, car il s'attend à une poignée de main SSL.

Est-ce que quelqu'un sait à forcer l'une des technologies à utiliser SSL vers le proxy en utilisant des bibliothèques standard disponibles?

Merci.

Le code exemple suit: xxx

et golang xxx


3 commentaires

On dirait que la version Go alliera toujours "Connecter" pour https ( Voir la source ) - Je ne sais pas grand chose à propos de HTTPS, mais si ce n'est pas un comportement compatible de normes, votre pourrait Soumettez un rapport de bogue .


Je pense que cela était conforme aux normes mais nous sommes au milieu d'une transition vers Pure SSL sur les proxies pour HTTPS. Le soutien de navigateur il, mais je ne trouve rien que le très dernier libcurl qui le soutient.


Si ce n'est pas conforme aux normes, le soutien sera au mieux situé, malheureusement.


3 Réponses :


0
votes

Une résolution possible à ce numéro à l'aide des bibliothèques standard Python en plus du proxyhandler que vous avez:

import ssl, urllib2

# Set ciphers and ssl settings
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
ctx.set_ciphers('HIGH:!DH:!aNULL')

# Set proxy settings
proxy = urllib2.ProxyHandler({'https':'<https proxy host>:443', 'http':'<http proxy host>:8080'})
opener = urllib2.build_opener(urllib2.HTTPSHandler(context=ctx), proxy)
urllib2.install_opener(opener)


5 commentaires

Semble afficher le même problème.


Pour cette ligne: proxy = urllib2.proxyhandler ({'https': ': 443', 'http': 'HTTP': 'HTTP' Host Host>: 8080 '}) Avez-vous remplacé et < HTTP Proxy Host> Avec votre propre implémentation de proxy?


Oui. Je vais vérifier avec une trace de paquets mais je pense que cela se connecte toujours dans le claire.


Oui, le serveur ne voit même pas une poignée de main SSL, elle tente immédiatement une SSL Connecter dans le claire.


Oui, réinitialisation de la connexion. En fin de compte, je devais utiliser des prises directement pour faire ce travail. Il semble que les bibliothèques HTTP n'établissent pas immédiatement une connexion proxy SSL.



0
votes

En fin de compte, je devais faire mon propre client, essentiellement.

func http_fetch(req_host string) {
    buf := make([]byte, 1024)
    conf := &tls.Config {
        InsecureSkipVerify: true,
    }   

    conn, err := tls.Dial("tcp", proxy_host, conf)
    if err != nil {
        //panic(err)
        failure()
        return
    }   
    defer conn.Close()

    // SSL CONNECT
    if _, err = conn.Write([]byte("CONNECT " + req_host + " HTTP/1.0\r\n\r\n")); err != nil {
        // FIXME: need debug logger?
        //panic(err)
        failure()
        return
    }   

    // Read response
    if _, err = conn.Read(buf); err != nil {
        //panic(err)
        failure()
        return
    }   

    // Send http GET
    if _, err = conn.Write([]byte("GET / HTTP/1.0\r\n")); err != nil {
        //panic(err)
        failure()
        return
    }   
    if _, err = conn.Write([]byte("User-Agent: golang\r\n\r\n")); err != nil {
        //panic(err)
        failure()
        return
    }   

    // Read response
    if _, err = conn.Read(buf); err != nil {
        //panic(err)
        failure()
        return
    }   
    success()
}   


0 commentaires

1
votes

Utilisation des proxy HTTPS n'est supporté que commencer par Go 1.10. De Projet de notes de version :

du côté du client, un proxy http (le plus communément configuré par Proxyfromenvironment) peut maintenant être spécifié comme https: // url, signification que le client se connecte au proxy sur HTTPS avant d'émettre un Demande http standard et proxée. (Auparavant, les URL proxy HTTP étaient nécessaire pour commencer avec http: // ou socks5: //.)


0 commentaires