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
Something interesting
Tutorials
+10.3k Golang : How to check if a website is served via HTTPS
+15.3k Golang : How to get Unix file descriptor for console and file
+20.7k Android Studio : AlertDialog and EditText to get user string input example
+11k How to test Facebook App on localhost ?
+16.3k Golang : convert string or integer to big.Int type
+5.6k Swift : Get substring with rangeOfString() function example
+17.9k Golang : Simple client server example
+19.6k Golang : Get current URL example
+5.3k Javascript : Change page title to get viewer attention
+9.1k Golang : Intercept and compare HTTP response code example
+19.2k Golang : Check if directory exist and create if does not exist