Created
August 7, 2015 13:03
-
-
Save rekby/201588f226de4d00a35a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"crypto/tls" | |
"fmt" | |
"time" | |
"crypto/x509" | |
) | |
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 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-----` | |
const serverKey = `-----BEGIN PRIVATE KEY----- | |
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDNk21GtnfirmXs | |
nedBKDR8x+nVhcMeNxh20V8QBzqs1hUKG/IUgPVlRbXGZkH+WD+Qz5JrTP92ZYXa | |
jg58RDX/BIsidEpWZo4zedfIFL8P8v2B6uo76EPM7Vr1kdxtL3Q9FYIr3IdMljV4 | |
P/YaVUarBAeyLPyNFqmRYhOuz0cX1JeR1RIXkzJe3dou83ihzIfj3mNJ9/s0F6TU | |
xbKsGHQpHZRw4ry3leX2kNRSJgh3Ly8N633kxDwTvioyFJx2/ZZHBkhJ9WebCu5/ | |
4BeuFRnsyukzpctqMEqiJCW+IHVtDKnq6gQeEzzyL+XVhPDIP6IiJwsxCacoKH5A | |
5MIL1asFAgMBAAECggEBALOecsZsPAe19Zxuw1Ys+N9mFSvZegh2f0uh2Hu6tUu6 | |
qhtxG21K2B8qb47wXg0Lsk6m7voOBs++GNxDbuio+LzfjWoHTcR8SxczCJTre51F | |
5LaVOSAq6sKtSOJ0FbLY2aldl6UXRKhoPkPZLwEHLX3TQZ4urGPiPzqmBSiiNy3b | |
oqwmpkae43OShaPxM1fC+kf7wQbfnMK0sQAp5M6Dd4wLE0uRPL5HDbbAFWN1wiVt | |
U7w4n7qY/6u3bH7R2H3r0nLx1Y/aVSpqEcy6qBhOsM1Agc9P1RQz7gm3278hpQwS | |
w8UPx4skSm1Cz7c+pERDGO7m3OnX3oCipL9wM2F67ukCgYEA9x8FE7xHA32Tsfm3 | |
7w+rGuEqaFScP8IPxJj3+TyDC29NhdWuuQCTQXWwtVHe/BTNA4LsVSuI6DCsJRsH | |
DI54wHXrPXFYETnJtJ3Amob2tBaWbUSBs7FLI4FPd6YKcf8gGyZUw0jtXGiAKFjN | |
UTg1pOum7BfrTl93PRH0xhB59ZcCgYEA1PZHwJDwxnqLbreoCPaFz2x881+UK/P+ | |
75UEN7QyyR/ycs8mbBk0iRAyiHCKQyddKqsxZE/vYOuYdhAhftllzFFSzGRlMvNu | |
d+o0NhUkokfTcFaIEHGeerIcRFcZNGS9+5ygSMAi8j5lDHT9h20HCsSbO4UAX7PK | |
lE1FbuXKT8MCgYBWwa0moJLNxuhzMxg/9WA8r5AT0KCKQbcHbiygc34OJaUxtzMA | |
ABOyh37iKTv/g831zaDqxb3qxiupWzO+VMZPyxYrG/+vDHqjzj4wAfHah5OICOUA | |
EN4wONWNS92e59J9tZdMd+3c41Ma1xI90V4D6DdR65PQj/NsnUExx9cJQQKBgQCd | |
Gm5GXeZx1VdlPzFEI3EFWxg2hi0N27sXTUxGN7Y7b0jxb2X92v5JmtxckQE+lxyA | |
7LfMM7f5PPRFLJM5O/GAMAIv7GRHmRPGfM01lJVo7inKNtu7ncX258w4kjRy1Vrd | |
8mbAJJXjNSpgbTHXJRRL2kxWNUDYWQ86JmLxc62y9wKBgBN6XxoWXNYlHLRXJSc9 | |
MfkUKVP7EwasuGvvaAuM6JDZlMVEi/17R00l3AWoQM3aw2I/8KmbOzxpww4XOwU3 | |
pLRqn3AcVxmycriW0wW+9lVobZwFZIyH0UketiR9VI8j23epb2duTbVZzazvr/0o | |
KQVaqXkdTNbe+Enr5DekmN3B | |
-----END PRIVATE KEY-----` | |
func main(){ | |
roots := x509.NewCertPool() | |
if !roots.AppendCertsFromPEM([]byte(rootCert)){ | |
panic("Can't parse root cert") | |
} | |
cert, err := tls.X509KeyPair([]byte(serverCert), []byte(serverKey)) | |
if err != nil { | |
panic(err) | |
} | |
tlsConfig := &tls.Config{ | |
ClientAuth: tls.RequireAndVerifyClientCert, | |
ClientCAs: roots, | |
} | |
tlsConfig.Certificates = make([]tls.Certificate, 0) | |
tlsConfig.Certificates = append(tlsConfig.Certificates, cert) | |
listener, err := tls.Listen("tcp", "0.0.0.0:1234", tlsConfig) | |
if err != nil { | |
panic(err) | |
} | |
fmt.Println("START") | |
for { | |
connection, err := listener.Accept() | |
if err != nil { | |
panic(err) | |
} | |
fmt.Println("OK ", connection.RemoteAddr()) | |
connection.SetReadDeadline(time.Now().Add(time.Second)) | |
tlsconn, ok := connection.(*tls.Conn) | |
if ! ok{ | |
fmt.Println("It isn't tlsconn") | |
connection.Close() | |
continue | |
} | |
fmt.Println("TLS") | |
fmt.Println(tlsconn.ConnectionState().PeerCertificates) | |
nullBuf := []byte{1} | |
connection.Read(nullBuf) | |
fmt.Println(nullBuf) | |
fmt.Println("TLS") | |
fmt.Println(tlsconn.ConnectionState().PeerCertificates[0].Subject.CommonName) | |
connection.Close() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment