2016-12-01 5 views
4

Ich versuche, einen TLS-Server zu konfigurieren, um ein Zertifikat Kette bei Verbindung zurückzugeben.Wie baut man eine tls.Certficate-Kette in Go?

Ich mag ein tls.Config mit einer Zertifikatskette erstellen:

// Certificates contains one or more certificate chains 
    // to present to the other side of the connection. 
    // Server configurations must include at least one certificate 
    // or else set GetCertificate. 
    Certificates []Certificate 

Unter der Annahme, meine Kette root -> inter -> server ist, kann ich jedes Zertifikat unabhängig laden, und eine Liste verwenden, aber nur servercert wird an den SSL-Client gesendet.

Ich mache etwas entlang der Linien von:

root, err := tls.LoadX509KeyPair("root.crt", "root.key") 
inter, err := tls.LoadX509KeyPair("inter.crt", "inter.key") 
server, err := tls.LoadX509KeyPair("server.crt", "server.key") 

config := tls.Config{ 
    Certificates : []tls.Certificates{root, inter, server} 
} 
config.BuildNameFromCertificates() 

Bin ich offensichtlich etwas fehlt? Ist die Bestellung wichtig?

+0

Die Reihenfolge ist wichtig; versuch: '[] tls.Certificates {server, inter, root}'. –

Antwort

3

Ihre server.crt Datei die gesamte Kette enthalten kann [plus Sie nicht möchten, dass Ihr Server die inter oder Root-Schlüssel haben], in server.crt können Sie haben

-----BEGIN CERTIFICATE----- 
[server cert] 
-----END CERT----- 
----BEGIN CERTIFICATE----- 
[inter cert] 
-----END CERT----- 

Die shouldn root cert nicht in der Kette vom Server bedient werden, nur der Server + Intermediate [s].

+0

Danke, das habe ich auch verstanden. – phtrivier