in network/client.go [169:202]
func (n *client) getCAChain(tls *tls.ConnectionState) string {
if len(n.caData) != 0 {
return string(n.caData)
}
if tls == nil {
return ""
}
// Don't reorder certificates by putting them directly into the map
var certificates []*x509.Certificate
seenCertificates := make(map[string]bool, 0)
for _, verifiedChain := range tls.VerifiedChains {
for _, certificate := range verifiedChain {
signature := hex.EncodeToString(certificate.Signature)
if seenCertificates[signature] {
continue
}
seenCertificates[signature] = true
certificates = append(certificates, certificate)
}
}
out := bytes.NewBuffer(nil)
for _, certificate := range certificates {
if err := pem.Encode(out, &pem.Block{Type: "CERTIFICATE", Bytes: certificate.Raw}); err != nil {
logrus.Warn("Failed to encode certificate from chain:", err)
}
}
return out.String()
}