Open2

TLSなechoサーバ + ngx_stream_ssl_preread_module

fujiwarafujiwara

socat でTLSのechoサーバーを立てる

$ socat OPENSSL-LISTEN:8443,cert=example.crt,key=example.key,verify=0,fork EXEC:'cat'

openssl s_client で繋げる

$ openssl s_client -connect localhost:8443
(略)
foo
foo
bar
bar
fujiwarafujiwara

https://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html を使ってnginxでTCPサーバーを立てる

stream {
  map $ssl_preread_server_name $name {
    localhost      backend;
    default        backend2;
  }
  upstream backend {
    server 127.0.0.1:8443;
  }
  upstream backend2 {
    server 127.0.0.1:8444;
  }
  server {
    listen      9443;
    proxy_pass  $name;
    ssl_preread on;
  }
}
  • nginx は 9443 を listen
  • SNI で ClientHello が localhost の場合は 127.0.0.1:8443 (socatが待っているport)
  • それ以外は 127.0.0.1:8444 に振る設定 (繋がらない)

nginx(9443) に SNI (-servername localhost) で繋げると socat に TCP で proxy される。

$ openssl s_client -connect localhost:9443 -servername localhost 
Connecting to 127.0.0.1
(略)
foo
foo