Comment faire une demande https avec certificat incorrect?

Dire que je veux obtenir https://golang.org par programmation. Actuellement golang.org (ssl) a un mauvais certificat qui est délivré à *.appspot.com Donc, quand je lance ceci:

package main

import (
    "log"
    "net/http"
)

func main() {
    _, err := http.Get("https://golang.org/")
    if err != nil {
        log.Fatal(err)
    }
}

- Je obtenir (comme je m'y attendais)

Get https://golang.org/: certificate is valid for *.appspot.com, *.*.appspot.com, appspot.com, not golang.org

Maintenant, je veux faire confiance à ce certificat de moi-même (imaginez un certificat auto-émis où je peux valider les empreintes digitales, etc.): comment puis-je faire une demande et de valider/confiance au certificat?

J'ai probablement besoin d'utiliser openssl pour télécharger le certificat, le charger dans mon fichier et de le remplir tls.Config struct !?

  • ce n'est pas un "mauvais" certificat " c'est un certificat avec un autre CN. InsecureSkipVerify n'est pas une utilisation légitime ici. Vous devez définir ServerName dans la tls.Config correspond à ce que vous essayez de vous connecter. Cette StackOverflow post est à l'origine de ce gros trou de sécurité dans le Go du code pour se répandre partout. InsecureSkipVerify ne pas vérifier le certificat du TOUT. Ce que vous voulez est de vérifier que le certificat a été valablement signés par une entité de confiance, même si le CN ne correspond pas au nom d'hôte. Les Tunnels et les NATS peut légitimement à l'origine de ce décalage.
InformationsquelleAutor topskip | 2012-08-25