Powiedz, że chcę programowo uzyskać https://golang.org
. Obecnie golang.org (SSL) posiada który jest wydawany *.appspot.com
Więc kiedy biegnę złe świadectwo to:golang: Jak wykonać żądanie https ze złym certyfikatem?
package main
import (
"log"
"net/http"
)
func main() {
_, err := http.Get("https://golang.org/")
if err != nil {
log.Fatal(err)
}
}
dostać (jak się spodziewałem)
Get https://golang.org/: certificate is valid for *.appspot.com, *.*.appspot.com, appspot.com, not golang.org
Teraz chcę zaufać tym zaświadczenie (wyobraź sobie samopozywalny certyfikat, w którym mogę potwierdzić odcisk palca itp.): w jaki sposób mogę złożyć wniosek i potwierdzić/zaufać certyfikatowi?
Prawdopodobnie potrzebuję użyć openssl, aby pobrać certyfikat, załadować go do mojego pliku i wypełnić strukturę tls.Config
!
to nie jest "zły certyfikat", to certyfikat z innym CN. InsecureSkipVerify nie jest tutaj dozwolonym prawem. Musisz ustawić ServerName w tls.Config, aby dopasować to, z którym próbujesz się połączyć. Ten post Stackoverflow powoduje, że ta duża luka w zabezpieczeniach kodu Go rozprzestrzenia się wszędzie. InsecureSkipVerify nie sprawdza certyfikatu AT ALL. To, czego chcesz, to sprawdzenie, czy certyfikat został prawnie podpisany przez zaufany podmiot, nawet jeśli CN nie jest zgodny z nazwą hosta. Tunele i NATS mogą zgodnie z prawem powodować to niedopasowanie. – Rob