Então eu tive uma epifania e consegui resolver esse problema.
Acontece que você não precisa configurar o modo SSL ou qualquer certificado no fluxo server
entry para que o ssl_preread
funcione, e isso possibilita uma solução interessante.
Eu posso configurar várias entradas server
em portas arbitrárias listadas para localhost
, cada uma com um certificado diferente, e ter uma% principal server
na porta 443 roteando as conexões de entrada para a correta.
Aqui está uma configuração básica com 3 certificados:
worker_processes 1;
events {
}
stream {
// IIS server
upstream https_backend {
server 10.0.0.1:443;
}
// set up SSL session with the default certificate
upstream default {
server 127.0.0.1:4430;
}
server {
listen 127.0.0.1:4430 ssl;
ssl_certificate certs/default.pem;
ssl_certificate_key certs/default.key;
proxy_ssl on;
proxy_pass https_backend;
}
// set up SSL session with certificate for marvel.com, www.marvel.com
upstream marvel {
server 127.0.0.1:4431;
}
server {
listen 127.0.0.1:4431 ssl;
ssl_certificate certs/marvel.pem;
ssl_certificate_key certs/marvel.key;
proxy_ssl on;
proxy_pass https_backend;
}
// set up SSL session with certificate for dccomics.com, www.dccomics.com
upstream dccomics {
server 127.0.0.1:4432;
}
server {
listen 127.0.0.1:4432 ssl;
ssl_certificate certs/dccomics.pem;
ssl_certificate_key certs/dccomics.key;
proxy_ssl on;
proxy_pass https_backend;
}
// route connection to the tunnel with correct certificate
map $ssl_preread_server_name $upstream {
marvel.com marvel;
www.marvel.com marvel;
dccomics.com dccomics;
www.dccomics.com dccomics;
default default;
}
server {
listen 443;
ssl_preread on;
proxy_pass $upstream;
}
}
Portanto, no que diz respeito à autenticação SSL e NTLM, esta é uma maravilha, mas a única coisa que falta nesta configuração é a possibilidade de registar o IP do utilizador real nos registos do IIS, uma vez que não consigo definir X-Forwarded-For
nos cabeçalhos HTTP.