A meno che ogni risposta che ho letto fosse chiaramente sbagliata, SNI dovrebbe rendere possibile fare quello che voglio, eppure ogni guida mi dice di fare esattamente quello che sto facendo.
Eppure nginx sta fornendo il certificato sbagliato, quindi sto chiaramente facendo qualcosa di sbagliato.
❯ sudo nginx -V | grep SNI %1
nginx version: nginx/1.10.3
built with OpenSSL 1.1.0f 25 May 2017
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-qJwWoo/nginx-1.10.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/ngi
nx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fa
stcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_reques
t_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --wit
h-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/nginx-auth-pam --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/nginx-dav-
ext-module --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/nginx-echo --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/nginx-upstream-fair --add-dynamic-module=/build/nginx-qJwWoo/nginx-1.10.3/debian/modules/ngx_http_substitutions_filter_m
odule
Ecco come sono le mie configurazioni:
server {
listen 443 ssl default_server;
listen [::]:443 ssl;
server_name one.example.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/one.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/one.example.com/privkey.pem;
index index.html;
root /var/www/one.example.com/site;
}
server {
#listen 443 ssl default_server;
listen [::]:443 ssl;
server_name two.example.com;
ssl on;
ssl_certificate /etc/letsencrypt/live/two.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/two.example.com/privkey.pem;
index index.html;
root /var/www/two.example.com/site;
}
Se ho la listen 443 ssl default_server;
direttiva in entrambi i server, verrà restituito il certificato SSL per quel server per ENTRAMBI i domini. Se lo rimuovo da entrambi i domini, non ottengo proprio nulla: entrambi i domini del server rifiutano le connessioni.
Cosa ho sbagliato qui? Non capisco come funziona SNI? My nginx è stato creato con il supporto SNI abilitato. Eppure ... ricevo solo il servizio SSL per un sottodominio.
openssl s_client -servername two.example.com -connect two.example.com:443
e mi dà il CN per one.example.com
. Se cambio quale ha il server predefinito, ottengo le cose al contrario.
-servername one -connect two
e poi viceversa. Sia openssl s_client che chrome osservano lo stesso comportamento: l'unica caratteristica apparente che definisce è la linea del server predefinita.
default_server
blocco completamente separato che non restituisce nessuno dei due siti.
openssl s_client
assicurarsi di aggiungere l'-servername hostname
opzione in modo che il client utilizzi effettivamente SNI.