Heim > Backend-Entwicklung > Golang > Wie behebe ich den Fehler „x509: Zertifikat von unbekannter Stelle signiert' bei der Verwendung selbstsignierter TLS-Zertifikate?

Wie behebe ich den Fehler „x509: Zertifikat von unbekannter Stelle signiert' bei der Verwendung selbstsignierter TLS-Zertifikate?

Patricia Arquette
Freigeben: 2024-12-09 21:30:11
Original
421 Leute haben es durchsucht

How to Resolve the

TLS mit einem selbstsignierten Zertifikat einrichten

Beim Aufbau einer TLS-Verbindung mit einem selbstsignierten Serverzertifikat stoßen Benutzer häufig auf das „x509: Zertifikat signiert von“. Fehler „Unbekannte Autorität“. Dieses Problem tritt auf, wenn der Client das selbstsignierte Zertifikat nicht als vertrauenswürdige Autorität erkennt.

Um diesen Fehler zu beheben, liegt das Problem im Prozess der Zertifikatserstellung. Der bereitgestellte Codeausschnitt erstellt ein selbstsigniertes Zertifikat, vernachlässigt jedoch das Setzen des Flags „IsCA:true“. Dieses Flag weist das Zertifikat als Zertifizierungsstelle (Certification Authority, CA) aus und ermöglicht es ihm, andere Zertifikate zu signieren.

Der korrigierte Code sollte wie folgt aussehen:

Generieren des Zertifikats:

func generateCertificate() {
    key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    if err != nil {
        log.Fatal(err)
    }

    subject := x509.Certificate{
        SerialNumber: big.NewInt(42),
        Subject: pkix.Name{
            Organization: []string{"My Organization"},
        },
    }

    template := x509.Certificate{
        SerialNumber: big.NewInt(43),
        Subject:      subject.Subject,
        KeyUsage: x509.KeyUsageCertSign,
        IsCA:        true, // Setting IsCA to true designates the certificate as a CA
        ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
    }

    cert, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key)
    if err != nil {
        log.Fatal(err)
    }

    // Save the certificate and key to pem files
}
Nach dem Login kopieren

Kunde Konfiguration:

func clientSetup() (*tls.Config, error) {
    cert, err := ioutil.ReadFile("./cert.pem")
    if err != nil {
        return nil, err
    }

    certpool := x509.NewCertPool()
    certpool.AppendCertsFromPEM(cert)

    config := &tls.Config{
        RootCAs:    certpool,
        InsecureSkipVerify: true, //!!! Skip certificate verification for testing purposes only
    }

    return config, nil
}
Nach dem Login kopieren

Hinweis: Für Produktionsumgebungen sollte die Zertifikatsüberprüfung aktiviert sein, um die Authentizität des Servers sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „x509: Zertifikat von unbekannter Stelle signiert' bei der Verwendung selbstsignierter TLS-Zertifikate?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage