Skip to content

Instantly share code, notes, and snippets.

@rekby
Created August 7, 2015 13:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rekby/348b0e2faac09ccb6477 to your computer and use it in GitHub Desktop.
Save rekby/348b0e2faac09ccb6477 to your computer and use it in GitHub Desktop.
package main
import (
"crypto/x509"
"crypto/tls"
"fmt"
)
const rootCert = `-----BEGIN CERTIFICATE-----
MIIEMzCCAxugAwIBAgIBATANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJSVTEM
MAoGA1UECBMDdG1wMQwwCgYDVQQKEwN0bXAxDjAMBgNVBAMTBXRtcENBMCAXDTE1
MDgwNzExMzMwMFoYDzIzODAwODA3MTEzMzAwWjA5MQswCQYDVQQGEwJSVTEMMAoG
A1UECBMDdG1wMQwwCgYDVQQKEwN0bXAxDjAMBgNVBAMTBXRtcENBMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuOiU93evlvTLEoQSa2jxaYDGw7ZrRDu5
OlUSwIrz6yQJxWTdvtbhsj2gKOfE9umNQTZrW5l+T+4FwXwuvKOaiM+RP2vqH1Ly
TKsAagpU/yv27k3DPP/vVCuoRs8lEDVSedcw+WAOEuIZEdf9o1VHT+KvFTSDp1As
pmwNEJ+oSIqI4LFuFWC3yDakU3tzmo/e6l1thnQvmBNhhZCClzRkKyEbM41QsZOQ
ZrEbD1LPjij9tFqgDn0lmwl/Pn4MGQNcDhMB+SBpEnDVR5RH8eBKDyLmaeFiuDru
d/IEOXPmet7ABuTiswVNbKWsOf8U/p585pTqSkgHEmOcoVFZEqMrbwIDAQABo4IB
QjCCAT4wDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMIHsBgNVHSUEgeQwgeEG
CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD
CAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoD
AwYKKwYBBAGCNwoDBAYJYIZIAYb4QgQBBgsrBgEEAYI3CgMEAQYIKwYBBQUHAwUG
CCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUIAgIGCisGAQQBgjcUAgIGCCsGAQUF
BwMJBggrBgEFBQcDDQYIKwYBBQUHAw4GBysGAQUCAwUwEQYJYIZIAYb4QgEBBAQD
AgD3MB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwDQYJKoZIhvcNAQEF
BQADggEBAB6ob12Jyy/8O+wb6tisnIMiuDK2xKqraOGydQCOq/za9gwJNu5MC5yi
FOu//dhWQCu7JgeAudm8LJl+jFCTIigCbad3qDU0Or4AlRRnIVaz2BikXvD3NXa+
o9iSZwc2LGVzeYyFBHKmVtNhHLaHkNpSlJKqzGzM51cYjwAfwsQeluzy3qusFMtY
LFxKDp+CjzU2ghhImHbaABrLNLjp14z/OTPSSr65oVP4C66Ib600nKhSVKY0srB9
/kXAm2pZyczQYpPsY/p3W1/ch8ry7fXR7Iw/eUhZ5SACyNQEim9YEr907rFl0gdS
ODCONcjoYXoXuoK7J3mvYoNgB+WOPco=
-----END CERTIFICATE-----`
const clientCert =`-----BEGIN CERTIFICATE-----
MIIDRjCCAi6gAwIBAgIBAjANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJSVTEM
MAoGA1UECBMDdG1wMQwwCgYDVQQKEwN0bXAxDjAMBgNVBAMTBXRtcENBMB4XDTE1
MDgwNzExMzQwMFoXDTE2MDgwNjExMzQwMFowPTELMAkGA1UEBhMCUlUxDDAKBgNV
BAgTA3RtcDEMMAoGA1UEChMDdG1wMRIwEAYDVQQDEwl0bXBDbGllbnQwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSQBlUWlSTxuNVvIiKoL0dK8zwQtHA
a6+c8fXSJCZ4DGA6cZeeYBzPn5LtPJPztS56gsaqGsTKBBXqALEym6QdFt4r4ZNM
enbHvgjZkhZxewTianeuXavtrJeEtS0F99Hg9sABJ4l6sRJaEW0QNSSLWppTXE8D
oIyLIKmtEheWliqGbzrJcpTkUGvaTLhs95r1Qepd6Ec7nx346zi6n3E4/U+vKeR6
aPkgnpmlrQaVlFafBIDf0/qFC6CnsP0n0rOWFdBNL/6BzZAyexRAIftXLuwQs7mO
Kle6s7ZpVATL3WcdG3Dd+yhaNjAbyitju7oXu5l4aL55qlgghAtLNX//AgMBAAGj
VTBTMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwEQYJYIZIAYb4QgEB
BAQDAgeAMB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwDQYJKoZIhvcN
AQEFBQADggEBALOu/XTRZabSJFYiruY4bL7PpfNCgC4nN0BKO0ihgwh3KANYHt7H
D0dYFcFHGSa3EtPNHWK6JF6wIuGMW8qB6JcnWEwtS4h6nXCPGVPM4jx+hGMPQgtv
yJ4NvIvn1iX9NUp4J1HByV8IG+cfmw9RAYhC+LDDaZvkpcaf/PVDUXxJZRJiMdnH
cA2WpMBK7RefWGf/mvIjgqesr8RstatlwflajkPzKmeRpa2zkMUwQkTYOH7SmeLq
wsAythSUUxU8qkssHhbapczNLtVtLFPnsVqrETGgoKg/evsSn+Cx7DZc0fww7dLt
s7JnFGlsenpJ1ONLV0mmrrrZvEej9m0H7tg=
-----END CERTIFICATE-----`
const clientKey=`-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDSQBlUWlSTxuNV
vIiKoL0dK8zwQtHAa6+c8fXSJCZ4DGA6cZeeYBzPn5LtPJPztS56gsaqGsTKBBXq
ALEym6QdFt4r4ZNMenbHvgjZkhZxewTianeuXavtrJeEtS0F99Hg9sABJ4l6sRJa
EW0QNSSLWppTXE8DoIyLIKmtEheWliqGbzrJcpTkUGvaTLhs95r1Qepd6Ec7nx34
6zi6n3E4/U+vKeR6aPkgnpmlrQaVlFafBIDf0/qFC6CnsP0n0rOWFdBNL/6BzZAy
exRAIftXLuwQs7mOKle6s7ZpVATL3WcdG3Dd+yhaNjAbyitju7oXu5l4aL55qlgg
hAtLNX//AgMBAAECggEACiQPVLM6qxoHswXx7AXOuU54hwoiBc7r3H0LJ0SZGmc2
aPs7neby3MzMkGbAmBugD0apgGDkJv5FdFDuOwuowcJtmt45dZHeksnGsX/LV1Pg
q28JML7R4RfXAw6eClCmrdwY7LVUezd5NCDtCsAVcCdBlE26felLfhZoOLHLs3aa
S9hZ310fMRiYhDYZdAKPKGEIU02+a/NcpK6Ic8C+ZWz3xRAHBZNsbuw13L0+2vDK
LUYAk6EyW4cWmQMg20EU5g4S5ZhsbxdiJLkGunDpFUJc6BU7gQ17P9wzO6iUgo6Q
nsger7++1Wmt/upqOZZXnrfkTatYLktfgMAoGxpIyQKBgQD5mRrgIcZ2Cq5VFedE
coqE7z9Ih+4rY3m3nHQ7zfZ+e2hlEHoRo+cd0A665YScRkvgKIAY4S5GTIeMxAII
TS3boVwbBq7EjDx9RPhqWB2GiamXAEVlnmKclOWRlipV+j5ehijMudQdm01uJAif
j7boxlhnxyBnbjgSWiWK6UJiEwKBgQDXpKG4N9RoNOw5M8jZ7pnbt8LrWEeN+tN5
TwG1Ok+GxWhwU7WRG8vMD6Ol+5f3nfNBP9YiYCyMZcBnIstkv0Z7NvmcW7KLjW6i
q9DxDlqAxnBX3NS6mugusEG0bSJhYlbHXfQ5FkTMSrtz7dek7xqBYPn9fc2oJFh0
QFz5b+3H5QKBgQDLM+2gaX70XQ++750fqYzCWzEPMLMjGdJfPH2Yrr6uDHRaS0bG
E8U2DUvgtrj2rXhaXz6igrk0vFtiq7Tn40WhWEXvLsqb83vPlJYVpfUrsemiqLLW
31JzHfmkRDflVVzvgZO30NYy4Fvyfl2S4eLMsaYJnyDvc9ksf72u0OadhwKBgCfi
CgsBQGa5iwsVWct8xrYNaZ6PaESJJH2mMCGtlDHP5v4HbWhWJL4sEk9LlhK1At2J
ifg3o2WgGBK7K7UJb2awhz/08bO/x7uMXYuH5RM2IGcPr8SHi/O+o5hUKuyp/HTJ
GrdIOBc0pzDMx3p4woU1Q2cv0k6L0lRF5yw3GFpFAoGAAeVjThZQzi1pSWc3KbMR
InHnJqefiG8igNgcPD6z0Rg60tKcl5x+8TifPNu+Brdk86aQqva3xEPucYrQMQ4A
lxooxy2Pi2GsHSqR/bj/Y0lwyJt5przkRHc2wtgTfntF7PmbJCNImjxKneVuXzsK
pmxUzmLodpAA+CnNRFoojpw=
-----END PRIVATE KEY-----`
const serverCert = `-----BEGIN CERTIFICATE-----
MIIDRjCCAi6gAwIBAgIBAzANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJSVTEM
MAoGA1UECBMDdG1wMQwwCgYDVQQKEwN0bXAxDjAMBgNVBAMTBXRtcENBMB4XDTE1
MDgwNzExMzUwMFoXDTE2MDgwNjExMzUwMFowPTELMAkGA1UEBhMCUlUxDDAKBgNV
BAgTA3RtcDEMMAoGA1UEChMDdG1wMRIwEAYDVQQDEwl0bXBTZXJ2ZXIwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNk21GtnfirmXsnedBKDR8x+nVhcMe
Nxh20V8QBzqs1hUKG/IUgPVlRbXGZkH+WD+Qz5JrTP92ZYXajg58RDX/BIsidEpW
Zo4zedfIFL8P8v2B6uo76EPM7Vr1kdxtL3Q9FYIr3IdMljV4P/YaVUarBAeyLPyN
FqmRYhOuz0cX1JeR1RIXkzJe3dou83ihzIfj3mNJ9/s0F6TUxbKsGHQpHZRw4ry3
leX2kNRSJgh3Ly8N633kxDwTvioyFJx2/ZZHBkhJ9WebCu5/4BeuFRnsyukzpctq
MEqiJCW+IHVtDKnq6gQeEzzyL+XVhPDIP6IiJwsxCacoKH5A5MIL1asFAgMBAAGj
VTBTMAkGA1UdEwQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwEQYJYIZIAYb4QgEB
BAQDAgZAMB4GCWCGSAGG+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwDQYJKoZIhvcN
AQEFBQADggEBADiLfncfLicC1APdPvjnrK9e5qRpiRO8ZESf+Rryix9nA6uGTSuO
b3ayUZ/PdHTB/4/rpYDNmCjp9uLl2yO5JipbqwiO43sjo8k0JwKPsNVKvCa0tEcD
y1O/1vmjI5dYZmKsQ5mWHZbAtmQ+WThk85PIq4iEmhxT83BHPJvRnix+1JmjZ9Jl
//j0pb6ayMbk+hsjob1U+5NzbqTexoLLnpqBpCCprnlNl5F9VNL6682GdbDZQwAa
hMIKB2ykSOuFDxlhRr0TpCfgjTVIHK5IzusHjsAm+i/9QbK6HPbmu2batiniwUOO
++kFXRzBvOR2Gc0/tfRFfv03tDCjiRQC96Y=
-----END CERTIFICATE-----`
func main(){
roots := x509.NewCertPool()
if !roots.AppendCertsFromPEM([]byte(rootCert)){
panic("Can't parse root cert")
}
if !roots.AppendCertsFromPEM([]byte(serverCert)){
panic("Can't parse server cert")
}
cert, err := tls.X509KeyPair([]byte(clientCert), []byte(clientKey))
if err != nil {
panic(err)
}
conn, err := tls.Dial("tcp", "localhost:1234", &tls.Config{
RootCAs:roots,
InsecureSkipVerify: true,
Certificates: []tls.Certificate{cert},
})
if err != nil {
panic(err)
}
conn.Write([]byte{2})
fmt.Println(conn.ConnectionState().PeerCertificates[0].Subject.CommonName)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment