Golang crypto/tls.BuildNameToCertificate function example

package crypto/tls

BuildNameToCertificate parses the config (1st param) Certificates and builds config.NameToCertificate from the CommonName and SubjectAlternateName fields of each of the leaf certificates.

Golang crypto/tls.BuildNameToCertificate function usage example

 package main

 import (
 "fmt"
 "os"
 "crypto/tls"
 "crypto/rand"
 )

 func main() {

 var serverPEM = `-----BEGIN CERTIFICATE-----
 MIID2jCCA0OgAwIBAgIJAMLkh9CatzCMMA0GCSqGSIb3DQEBBQUAMIGlMQswCQYD
 VQQGEwJBVTEYMBYGA1UECBMPU291dGggQXVzdHJhbGlhMREwDwYDVQQHEwhBZGVs
 YWlkZTEdMBsGA1UEChMUQXdlc29tZSBJbnRlcm5ldCBJbmMxEDAOBgNVBAsTB0lU
 IERlcHQxFDASBgNVBAMTC2F3ZXNvbWUuY29tMSIwIAYJKoZIhvcNAQkBFhNhd2Vz
 b21lQGF3ZXNvbWUuY29tMB4XDTE0MDgwNTAyMDk0NloXDTE1MDgwNTAyMDk0Nlow
 gaUxCzAJBgNVBAYTAkFVMRgwFgYDVQQIEw9Tb3V0aCBBdXN0cmFsaWExETAPBgNV
 BAcTCEFkZWxhaWRlMR0wGwYDVQQKExRBd2Vzb21lIEludGVybmV0IEluYzEQMA4G
 A1UECxMHSVQgRGVwdDEUMBIGA1UEAxMLYXdlc29tZS5jb20xIjAgBgkqhkiG9w0B
 CQEWE2F3ZXNvbWVAYXdlc29tZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
 AoGBAL/0hJbv0qpIGVHIsOG0HnGpGSR+BrLtwNA0MjzOfMTWMAIhjmigvDY6O0fe
 +beg4Va5LfTlIGPs61W9hnUTfRamItdVNI1BvZRadRAlPoeEW6axQqrDr2bFGRVK
 tu0lNNRd0EH+oTeg8tgp7H874axKc8Qzc9bEePHt4Oujp/QhAgMBAAGjggEOMIIB
 CjAdBgNVHQ4EFgQUQynaYrmZjtDj0porRVpjvYrM4JwwgdoGA1UdIwSB0jCBz4AU
 QynaYrmZjtDj0porRVpjvYrM4JyhgaukgagwgaUxCzAJBgNVBAYTAkFVMRgwFgYD
 VQQIEw9Tb3V0aCBBdXN0cmFsaWExETAPBgNVBAcTCEFkZWxhaWRlMR0wGwYDVQQK
 ExRBd2Vzb21lIEludGVybmV0IEluYzEQMA4GA1UECxMHSVQgRGVwdDEUMBIGA1UE
 AxMLYXdlc29tZS5jb20xIjAgBgkqhkiG9w0BCQEWE2F3ZXNvbWVAYXdlc29tZS5j
 b22CCQDC5IfQmrcwjDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACv4
 wpJQxR42uAANUVogoFMuDLvPIyoAwCBZ7R7pqT+NxkoP0ou+OTf52267zv3HBIof
 qgae4X7tDmgUO08vrlzi0QPq22sD1fUwmZwWduY2EeODjsd9siszSyL3TKb1liuo
 r9LmRQJntYK7JI1+vn4MDV0vrcUFgtlWxqQCbHl0
 -----END CERTIFICATE-----`

 var serverKEY = `-----BEGIN RSA PRIVATE KEY-----
 MIICXAIBAAKBgQC/9ISW79KqSBlRyLDhtB5xqRkkfgay7cDQNDI8znzE1jACIY5o
 oLw2OjtH3vm3oOFWuS305SBj7OtVvYZ1E30WpiLXVTSNQb2UWnUQJT6HhFumsUKq
 w69mxRkVSrbtJTTUXdBB/qE3oPLYKex/O+GsSnPEM3PWxHjx7eDro6f0IQIDAQAB
 AoGAZXKJEGw23h+0ofB66w4SeOdxjkO8rpvQpziuxEwszKqWPMoXRVyNm+syoU1K
 lK3F6dt8Wk0tzSHNTkcX5JAkLwW5HVEhz6qiMVb1HC+WMdGYt0mqr5baVvob1Td5
 vg5CYdVqUXiF0YEWGAJRxgXhSk9WH6zQeYPODOB5nZGMTzECQQDktXFZG3yc/Xer
 lnSe1HQAMl2zSNoaywJzTzC612P4+LuAamHdS6AlBQZnwjuOeTU5XmvHePKatmOL
 R33Dv8lnAkEA1txU9++M5n0HtpjuGAg0/CUy3DLOblcHqSGds2NS1UCerP/ixSCn
 9a3VXL7LYaspVjPGUkH6GRa4u4p0U255NwJAcYBKPDqT4SU5GoKUZa5x0xcrwSnK
 c7mEAc2vFUqHZquqAdTJtJUvaK/RufR+sfodG9dsDZZMb9NMG3bjRx4KyQJALiko
 GBxfKSWzgodYn9EjkQhs5OIFd6869htCxkeQhEBd1s0i6zcY3q96J3LWPyWGu/5j
 nUiPctRu29vjIgmaAQJBAOJ3bESiIo0jUyhkbZSpo0n9YDy3NeoQ4Q2JpY+u09c1
 Wgd99C5jQO43eRl5oSSNYaAsqVzs0g+lfpkCCvz4KZQ=
 -----END RSA PRIVATE KEY-----`



 certificate, err := tls.X509KeyPair([]byte(serverPEM), []byte(serverKEY))

 if err != nil {
 fmt.Println(err)
 os.Exit(1)
 }


 // For ClientAuth : tls.RequireAnyClientCert. See http://golang.org/pkg/crypto/tls/#ClientAuthType
 config := tls.Config{Certificates : []tls.Certificate{certificate}, ClientAuth: tls.RequireAnyClientCert}

 config.Rand = rand.Reader

 fmt.Println("BEFORE BuildNameToCertificate() : ")
 fmt.Printf("Config.NameToCertificate :%v\n", config.NameToCertificate)

 config.BuildNameToCertificate()

 fmt.Println("AFTER BuildNameToCertificate() : ")
 fmt.Printf("Config.NameToCertificate :%v\n", config.NameToCertificate)

  }

Output :

BEFORE BuildNameToCertificate() :

Config.NameToCertificate :map[]

AFTER BuildNameToCertificate() :

Config.NameToCertificate :map[awesome.com:0xc208058b40]

Reference :

http://golang.org/pkg/crypto/tls/#Config.BuildNameToCertificate

Advertisement