diff --git a/samples/dane/client.lua b/samples/dane/client.lua new file mode 100644 index 0000000..5cdab70 --- /dev/null +++ b/samples/dane/client.lua @@ -0,0 +1,40 @@ + +local socket = require "socket"; +local ssl = require "ssl"; + +local dns = require "lunbound".new(); + + +local cfg = { + protocol = "tlsv1_2", + mode = "client", + ciphers = "DEFAULT", + capath = "/etc/ssl/certs", + verify = "peer", + dane = true, +}; + +local function daneconnect(host, port) + port = port or "443"; + local conn = ssl.wrap(socket.connect(host, port), cfg); + + local tlsa = dns:resolve("_" .. port .. "._tcp." .. host, 52); + assert(tlsa.secure, "Insecure DNS"); + + assert(conn:setdane(host)); + for i = 1, tlsa.n do + local usage, selector, mtype = tlsa[i] :byte(1, 3); + assert(conn:settlsa(usage, selector, mtype, tlsa[i] :sub(4, - 1))); + end + + assert(conn:dohandshake()); + return conn; +end + +if not ... then + print("Usage: client.lua example.com [port]"); + return os.exit(1); +end +local conn = daneconnect(...); + +print(conn:getpeerverification());