Skip to content

Instantly share code, notes, and snippets.

@binarin
Last active May 19, 2016 12:10
Show Gist options
  • Save binarin/35c34c2df7556bf04c8a878682ef3d67 to your computer and use it in GitHub Desktop.
Save binarin/35c34c2df7556bf04c8a878682ef3d67 to your computer and use it in GitHub Desktop.
-module(test).
-define(SERVER_CERT, <<"-----BEGIN CERTIFICATE-----
MIIC4TCCAcmgAwIBAgIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhNeVRl
c3RDQTAeFw0xNjA1MTkxMTQ0MzVaFw0xNzA1MTkxMTQ0MzVaMCQxETAPBgNVBAMM
CGlzaGFtYWVsMQ8wDQYDVQQKDAZzZXJ2ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQCzPcdvoQh+yLeRt8w/FrZY3EOxQL3lMNgcWzpuq3AsYdK1wZmH
MND+ZGMs/QqxYnJBxbRcVJiCD2IeVKD3UWF38UljQFJfb6VYWS/bTWltsaRcuiRI
NzC2FZwy3buG0aJXnJA/qEwhem1xfGMRYuhm6+QIR9jAwH1AQRw6go0Z1nvzW1EK
cYuDUsYE+JIUoo7GafBurTiau6RD4zVlU9GI8+P78yf9k3EgilFpqsbPXvIqJIyE
l1aJy4XLC+5ZxF3wNt9t+N7380rj75pTY+T7mNznufEEyobXdVVw7aa1W8X0+h1F
EI2g9X+2nyngRlUAeZ9CHLJpXzhJt28FqfnxAgMBAAGjLzAtMAkGA1UdEwQCMAAw
CwYDVR0PBAQDAgUgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUA
A4IBAQB3ZcpozUv1emwwRIjylf9wQRvKgOpuedy+hCqekk6tOeq83NqrkBFBObI6
yE0R3fVKy8PCyV5BW/p88vqHHssWCIpgQvTu0B22uur6Ak8br6+uVcC6r5+Nepis
/VOsfkL1Zuc5LECfG/AQf7r47v2HEzCfZZ6Ub4iWshVieS9gPAEtSuId63jauIX7
8UR3dNjIrSF3iQFjsRJX247oorOKCwCXZHhSuJ8c+zTM4JWtXrieXFLwposDuXuT
f3VZeF/CcxV1rSbCCTuKN4ElG7yaRoFPlAB4ZWoZquVnwIcCuQRegCONeYZAUYnl
fEIeaxn8I+N0giJTcIhrtNSseD/V
-----END CERTIFICATE-----
">>).
-define(SERVER_KEY, <<"-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAsz3Hb6EIfsi3kbfMPxa2WNxDsUC95TDYHFs6bqtwLGHStcGZ
hzDQ/mRjLP0KsWJyQcW0XFSYgg9iHlSg91Fhd/FJY0BSX2+lWFkv201pbbGkXLok
SDcwthWcMt27htGiV5yQP6hMIXptcXxjEWLoZuvkCEfYwMB9QEEcOoKNGdZ781tR
CnGLg1LGBPiSFKKOxmnwbq04mrukQ+M1ZVPRiPPj+/Mn/ZNxIIpRaarGz17yKiSM
hJdWicuFywvuWcRd8Dbfbfje9/NK4++aU2Pk+5jc57nxBMqG13VVcO2mtVvF9Pod
RRCNoPV/tp8p4EZVAHmfQhyyaV84SbdvBan58QIDAQABAoIBAEioNF31wwHRz0fM
X4j7ZfNjZjVF7zQmtpPYDzmpWRFEnit7TQbWLQHSI7mq4VjCdVpgEBqVWDTwk2+E
ErPuUzpRntQS0NFK6pWDobieCqyio+PKuMZlSOOmouijpU6jT9F/76E+UY4ImLC2
IVp844RE/uy0YxLPdHZFbnHxVc0wzKNYPFI2BTQvDmDY57R6qPblBxrBnPBxsYC0
A7o2goT++aSSyq0LnPyZ5g0q9dHImgE1bUQlYktJAqXDvZQMS7YVwmx1QyNRaXZu
uA+CdRF/9ZZPIwKI4LwlaTp5Jp/6ri4IVq2S7RU5PEtxQ6X6wvwE+7NFgZepux5l
p/PQ7aECgYEA4mXYj04JmwEAGaHSgKr526tQLJ4d66CDfbpmvIBy/NTMpWU/hhlF
5KSCBC4Uu2lX7hegSJ30JK/ZQvH54UY6rmUo+x7fSHMIB/xDNSkx76GImP+XUx0i
juIIIxaVDirdQQvsb8imVj9PCjVrRP5uC1YbYHEAyI3ufZW4sddRRCUCgYEAyq15
0UP3n56OFfvQqkVYePbZQk3JhtB828FEJzHVAnZF+na+RzcOrkR/xGe68Tz93QcO
CqVL7Ge5MfUgvkWl8R/sEDDiH/eHXPaWulQ0a3SmaKhHEXK/qW5/IFpwVE33FodH
Gog2saV3zeb8g0/A4Z+nHk0eGi6W6526QnAdrt0CgYEAvFmU2GxJC37CkZCSa19T
LZERy3zkUZKhsmjwbeTDRVrYwsVAGxVNk5HVZRrdPqm+cKORQri+VANEUjCz/doK
meopNPqTMlgZF2Okmkaid8VAumDxiUEU7iBYOrDf4wCAQExmMP2SfPCAlnKowqaV
8LJ7Zjm9OBz0i+CS3snOn00CgYBGj155nE/5IhoVTTW4EaxbcJTyoGIorSzK1N4F
RzQBR2vVZsGXyXMy+GYC2poaokE/UdVxn1pvUy0GV3CuzVCYQaTNfjc7KdHWa4LO
G8KkJlhI10zmpixTsERR3yp8Lyh2j2IRuppP/mtXI7OFg56C7jIgOnjgZJfmL2NI
/f9XgQKBgQCwx1qrprfpy2I4kpFnni2qQeOSPVLjmpz8umrpZftCK1GyQxmYpFoM
4NbDMZTTZZkFOK7NYruTdf0CIsc/Z5GZ/Z3q5TjcHsdNDyMEsyMlavFH6qZre0SA
IE2UDmDI64q4moGTb3cyYqwfHSGgMQKzLvJ0IXbAdnN5JpS8qdQydg==
-----END RSA PRIVATE KEY-----
">>).
-define(CA_CERT, <<"-----BEGIN CERTIFICATE-----
MIICxjCCAa6gAwIBAgIJAPcihqfAYpeVMA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV
BAMMCE15VGVzdENBMB4XDTE2MDUxOTExNDQzNVoXDTE3MDUxOTExNDQzNVowEzER
MA8GA1UEAwwITXlUZXN0Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQCwSwm9RLEv1YpgDGhLaeJxM0ZuiL7hrm7eDH8VYJ6k0G3uKCSGYHGvOUwYAkYg
Tspjc7XakVB9LB3liedn7u+JYuumHPrrsj1l+rXfka6U60wfu40v/2qY/IMS3moS
v7/I8r/3aBKgiJuNMxgWQL1ImFdMK0Y6+Ax02BWDFL82QkpXUAoQQwigPyZZ3Bcm
mHVnrtNWsXtL8W/e+EKVftbNvpDb+dIaO1N+9X/vvRI2ihIDgiZTkwVVSw4ql7lG
c5tBfvvWPaWY2b1Osy2kN1tYVg1/8d9bSOon+zWIndzcqUXIfr15u98q7Mzj9m4l
2Bm9ZBwiOiUrEG3ahonq14S1AgMBAAGjHTAbMAwGA1UdEwQFMAMBAf8wCwYDVR0P
BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IBAQCrIfnLO5Px7Pzm6sY3L/rquR5H7o7w
+ExV8et13Tr8cBVJXSFxf+W8OrIFX15DR0SEAjI9qsVn7v6Iz1UUpyascpZJhURu
6GDK+/JLtoVgHC+eU2rFiDPDtIHLxXK6BHbwMowOnPyYqr+bO3cv629YKtN3CkfP
DRsACjLOgttkA1rp0WqWa7QRoS4iSuSYef9Muy0o39iEWBcAGeqagQYIUk3ZcnTk
dw6uUBb2KAFgBpCImtjjvLeNvnwbIbhjaZGuH1S3i0L5RjvkujH59lfV5Tb9+lJC
dmNcklpXaq5oZlAXUgVvEiDQzEFHl0j+eg1wG7rrvKaNfgDwWtWUtTv3
-----END CERTIFICATE-----
">>).
client() ->
[{_, Cert, _}]= public_key:pem_decode(?SERVER_CERT),
[{KeyType, Key, _}] = public_key:pem_decode(?SERVER_KEY),
[{_, CACert, _}]= public_key:pem_decode(?CA_CERT),
{ok, SSLSock} = ssl:connect({127, 0, 0, 1}, 12345, [{cert, Cert},
{key, {KeyType, Key}},
{cacerts, [CACert]}]),
ok.
main([]) ->
application:ensure_all_started(ssl),
application:ensure_all_started(sasl),
[{_, Cert, _}]= public_key:pem_decode(?SERVER_CERT),
[{KeyType, Key, _}] = public_key:pem_decode(?SERVER_KEY),
[{_, CACert, _}]= public_key:pem_decode(?CA_CERT),
{ok, LSock} = ssl:listen(12345, [{cert, Cert},
{key, {KeyType, Key}},
{verify, verify_peer},
{cacerts, [CACert]}]),
spawn_link(fun () ->
try
client()
catch
C:E ->
io:format("~p:~p ~p", [C, E, erlang:get_stacktrace()]),
exit(E)
end
end),
{ok, NewSock} = ssl:transport_accept(LSock),
ok = ssl:ssl_accept(NewSock),
ok.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment