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
Patricia ArquetteOriginal
2024-12-09 21:30:11363Durchsuche

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
}

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
}

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!

Stellungnahme:
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