kong-build-tools/openresty-patches/t/stream/003-req-socket-starttls.t (6 lines of code) (raw):
# vim:set ft= ts=4 sw=4 et fdm=marker:
use Test::Nginx::Socket::Lua::Stream;
repeat_each(2);
plan tests => repeat_each() * (blocks() * 5);
#worker_connections(1024);
#no_diff();
no_long_string();
run_tests();
__DATA__
=== TEST 1: not setting SSL_CTX for upstream client connection, proxy_ssl_* are respected
--- stream_config
server {
listen 12345;
preread_by_lua_block {
local http_tls = require("http.tls")
local openssl_ctx = require("openssl.ssl.context")
local openssl_rand = require("openssl.rand")
local openssl_bignum = require("openssl.bignum")
local name = require("openssl.x509.name")
local altname = require("openssl.x509.altname")
local pkey = require("openssl.pkey")
local x509 = require("openssl.x509")
local ffi = require("ffi")
local cast = ffi.cast
local voidpp = ffi.typeof("void**")
-- from: https://github.com/daurnimator/lua-http/blob/master/http/server.lua
-- Author: Daurnimator
-- License: MIT
local function new_ctx(host, version)
local ctx = http_tls.new_server_context()
if version == 2 then
ctx:setOptions(openssl_ctx.OP_NO_TLSv1 + openssl_ctx.OP_NO_TLSv1_1)
end
local crt = x509.new()
crt:setVersion(3)
-- serial needs to be unique or browsers will show uninformative error messages
crt:setSerial(openssl_bignum.fromBinary(openssl_rand.bytes(16)))
-- use the host we're listening on as canonical name
local dn = name.new()
dn:add("CN", host)
crt:setSubject(dn)
crt:setIssuer(dn) -- should match subject for a self-signed
local alt = altname.new()
alt:add("DNS", host)
crt:setSubjectAlt(alt)
-- lasts for 10 years
crt:setLifetime(os.time(), os.time()+86400*3650)
-- can't be used as a CA
crt:setBasicConstraints{CA=false}
crt:setBasicConstraintsCritical(true)
-- generate a new private/public key pair
local key = pkey.new({bits=2048})
crt:setPublicKey(key)
crt:sign(key)
assert(ctx:setPrivateKey(key))
assert(ctx:setCertificate(crt))
return ctx
end
local server_ssl_ctx = new_ctx('example.com')
assert(ngx.req.starttls(server_ssl_ctx))
-- assert(ngx.req.starttls(server_ssl_ctx))
-- ngx.thread.wait(ngx.thread.spawn(function()
-- assert(ngx.req.starttls(server_ssl_ctx))
-- end))
}
return "over TLS";
}
--- stream_server_config
# default: proxy_ssl_verify off;
proxy_ssl_trusted_certificate ../../certs/trusted.crt;
proxy_pass 127.0.0.1:12345;
proxy_ssl on;
--- stream_response: over TLS
--- no_error_log
[warn]
[error]
[crit]