2017-04-01 1 views
2

J'essaye de configurer cryptons sur un équilibreur de charge écrit dans Go, j'ai essayé la configuration automatique et manuelle, mais j'ai toujours des erreurs.Configuration Cryptage avec Go - erreurs de poignée de main

Le domaine pointe correctement vers notre serveur (Digital Ocean) et je peux même ouvrir le site à partir d'un navigateur sans erreur, aussi un contrôle SSL ne signale aucune erreur sur ce domaine. Le fait est que lorsque j'exécute l'exécutable Go sur le serveur à partir de CLI, j'obtiens des erreurs à plusieurs reprises.

  1. Configuration automatique (ACME/de autocert):

Le code du serveur est que, le certificat et la clé sont créés quand je regarde le domaine à partir d'un navigateur pour la première fois après le démarrage du serveur :

go func() { 
     log.Printf("Staring HTTP service on %s ...", ":80") 

     http.HandleFunc("/*", http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) { 
      http.Redirect(w, r, "https://" + app.Cfg.S_HOST + ":443" + r.RequestURI, http.StatusMovedPermanently) 
     })) 

     if err := http.ListenAndServe(":80", nil); err != nil { 
      errs <- err 
     } 

    }() 



    log.Printf("Staring HTTPS service on %s ...", ":443") 

    http.HandleFunc("/hello", http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) { 
     w.Header().Set("Content-Type", "text/plain") 
     w.Write([]byte("This is an example server.\n")) 
    })) 


    certManager := autocert.Manager{ 
     Prompt:  autocert.AcceptTOS, 
     HostPolicy: autocert.HostWhitelist(app.Cfg.S_HOST), //your domain here 
     Cache:  autocert.DirCache("certs"), //folder for storing certificates 
    } 

    server := &http.Server{ 
     Addr: ":443", 
     TLSConfig: &tls.Config{ 
      ServerName: app.Cfg.S_HOST, 
      GetCertificate: certManager.GetCertificate, 
     }, 
    } 

    if err := server.ListenAndServeTLS("", ""); err != nil { 
     print(err.Error()) 
    } //key and cert are comming from Let's Encrypt 

Je reçois ces erreurs:

  1. http: TLS erreur de poignée de main de (ip): 59451: lire tcp (myserver IP): 443 -> (ip): 59451: lire: connexion réinitialisée par l'homologue

  2. hello.ServerName vide: 2017/04/01 17:14: 38 http: erreur de prise de contact TLS de (ip): 58193: Acme/autocert: nom du serveur manquant

  3. http: erreur de prise de contact TLS de (ip): 45822: Acme/autocert: hôte non configuré

  4. http : Erreur de poignée de main TLS de (ip): 58440: EOF

Puis j'ai essayé aussi la création du certificat manuellement (avec succès) et simplement en utilisant ce code et je reçois des erreurs encore et encore:

Le code du serveur est:

go func() { 
     log.Printf("Staring HTTP service on %s ...", ":80") 

     http.HandleFunc("/*", http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) { 
      http.Redirect(w, r, "https://" + app.Cfg.S_HOST + ":443" + r.RequestURI, http.StatusMovedPermanently) 
     })) 

     if err := http.ListenAndServe(":80", nil); err != nil { 
      errs <- err 
     } 

    }() 



    log.Printf("Staring HTTPS service on %s ...", ":443") 

    http.HandleFunc("/hello", http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) { 
     w.Header().Set("Content-Type", "text/plain") 
     w.Write([]byte("This is an example server.\n")) 
    })) 


    // ssl["cert"] and ssl["key"] are the cert and key path (letsencrypt/live...) 
    if err := http.ListenAndServeTLS(sslAddr, ssl["cert"], ssl["key"], nil); err != nil { 
     errs <- err 
    } 

Erreurs:

  1. HTTP2: serveur: erreur lecture de la préface du client (ip): 10319: faux salutation "POST/HTTP/1.1 \ r \ nHôte: 4"

  2. Erreur de poignée de main http: TLS de (ip): 10322: EOF

  3. http: erreur de prise de contact TLS de (ip): 13504: lire tcp (mon ip du serveur): 443 -> (ip): 13504: lire: réinitialisation de la connexion par les pairs

  4. HTTP2: serveur: erreur de lecture préface du client (ip): 9672: délai d'attente en attente de préface client

quelqu'un peut me aider s'il vous plaît? Merci

+2

Si vous avez un serveur sur Internet ouvert, vous allez recevoir des requêtes TLS cassées et mal formées. Avez-vous des erreurs avec l'un de vos propres clients? – JimB

+0

Non, il semble, j'ai juste essayé de rafraîchir la page de chrome et il ne semble pas déclencher d'erreur ... encore, je reçois beaucoup d'entre eux, de toute façon, 5-20 x minute ... –

+0

Avez-vous essayé de lancer le code dans http://stackoverflow.com/a/40494806/1465640 et * juste * mise à jour avec vos informations de domaine? Et vous êtes sûr que vous accédez au serveur sur le port 443 – Pylinux

Répondre

0

Comme JimB et d'autres ont dit dans les commentaires, cela peut être le résultat de mauvaises demandes. Les demandes non valides seront enregistrées lors de l'utilisation de https://www.ssllabs.com/ssltest/ pour tester la configuration https d'un site. Un bon score de test peut vous donner confiance que les messages de journal sont bénins et peuvent être ignorés en toute sécurité.

De plus, le paquet acme/autocert évolue rapidement (à partir de janvier 2018), veuillez vérifier que votre version est à jour.