1--
2-- Public domain
3--
4local socket = require("socket")
5local ssl    = require("ssl")
6
7local pkey = require "openssl.pkey"
8local ssl_context = require "openssl.ssl.context"
9local x509 = require "openssl.x509"
10local x509_store = require "openssl.x509.store"
11
12local function read_file(path)
13	local file, err, errno = io.open(path, "rb")
14	if not file then
15		return nil, err, errno
16	end
17	local contents
18	contents, err, errno = file:read "*a"
19	file:close()
20	return contents, err, errno
21end
22
23local ctx = ssl_context.new("TLSv1_2", false)
24ctx:setPrivateKey(pkey.new(assert(read_file("../certs/clientAkey.pem"))))
25ctx:setCertificate(x509.new(assert(read_file("../certs/clientA.pem"))))
26local store = x509_store.new()
27store:add("../certs/rootA.pem")
28ctx:setStore(store)
29ctx:setVerify(ssl_context.VERIFY_FAIL_IF_NO_PEER_CERT)
30
31local peer = socket.tcp()
32peer:connect("127.0.0.1", 8888)
33
34-- [[ SSL wrapper
35peer = assert( ssl.wrap(peer, ctx) )
36assert(peer:dohandshake())
37--]]
38
39print(peer:receive("*l"))
40peer:close()
41