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