Configuring SNI on Web Servers

Configuring SNI on Web Servers

Modern web servers support SNI configuration for virtual host SSL certificates. Proper configuration ensures correct certificate selection based on requested hostnames.

Nginx SNI configuration:

# Default SSL server (fallback)
server {
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate /etc/nginx/ssl/default.crt;
    ssl_certificate_key /etc/nginx/ssl/default.key;
    return 444;  # Close connection for unknown hosts
}

# SNI-based virtual hosts
server {
    listen 443 ssl;
    server_name example1.com www.example1.com;
    ssl_certificate /etc/nginx/ssl/example1.crt;
    ssl_certificate_key /etc/nginx/ssl/example1.key;
}

server {
    listen 443 ssl;
    server_name example2.com www.example2.com;
    ssl_certificate /etc/nginx/ssl/example2.crt;
    ssl_certificate_key /etc/nginx/ssl/example2.key;
}

Apache SNI configuration:

# Enable SNI
SSLStrictSNIVHostCheck off

<VirtualHost *:443>
    ServerName example1.com
    ServerAlias www.example1.com
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/example1.crt
    SSLCertificateKeyFile /etc/apache2/ssl/example1.key
</VirtualHost>

<VirtualHost *:443>
    ServerName example2.com
    ServerAlias www.example2.com
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/example2.crt
    SSLCertificateKeyFile /etc/apache2/ssl/example2.key
</VirtualHost>