2016-12-01 126 views
4

我正在尝试配置TLS服务器,以便在连接时返回证书你如何在Go中建立tls.Certficate链?

我想创建一个tls.Config,与证书

// 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 

假设我的链是root -> inter -> server,我可以独立加载每个证书,并用一个列表,但只有serverCert被发送到SSL客户端。

我做线沿线的东西:

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() 

我失去了一些东西明显?订单是否重要?

+0

订单确实重要;试试:'[] tls.Certificates {server,inter,root}'。 –

回答

3

您server.crt这文件可以包含整个链条[加你不想你的服务器有间或根键],在server.crt这可以有

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

的根证书不应该不在服务器提供的链中,只有服务器+中间[s]。

+0

谢谢,这也是我最终理解的。 – phtrivier