Kecuali jika setiap jawaban yang saya baca salah, SNI seharusnya memungkinkan untuk melakukan apa yang saya inginkan, namun setiap panduan memberi tahu saya untuk melakukan apa yang saya lakukan.
Namun nginx melayani sertifikat yang salah jadi saya jelas melakukan sesuatu yang salah.
❯ 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
Seperti apa konfigurasi saya:
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;
}
Jika saya memiliki listen 443 ssl default_server;
arahan di kedua server itu akan mengembalikan sertifikat SSL untuk server itu untuk KEDUA domain. Jika saya menghapusnya dari kedua domain maka saya tidak mendapatkan apa-apa - kedua domain server menolak koneksi.
Apa yang salah di sini? Apakah saya tidak mengerti cara kerja SNI? Nginx saya telah dibangun dengan dukungan SNI diaktifkan. Namun ... Saya hanya mendapatkan sertifikat ssl untuk satu subdomain.
openssl s_client -servername two.example.com -connect two.example.com:443
dan memberi saya CN untuk one.example.com
. Jika saya menukar yang mana yang memiliki server default maka saya mendapatkan hal-hal sebaliknya.
-servername one -connect two
dan kemudian sebaliknya. Kedua openssl s_client dan chrome mengamati perilaku yang sama - satu-satunya karakteristik yang jelas adalah garis server default.
default_server
blok yang benar-benar terpisah yang tidak mengembalikan situs mana pun.
openssl s_client
memastikan untuk menambahkan-servername hostname
opsi sehingga klien benar-benar menggunakan SNI.