Apache - Server Name Indication (SNI)

Server Name Indication är en utbyggnad av SSL (Secure Socket Layer) och TLS som, på början av en SSL handshake, indikerar vilken hostname klienten söker kontakt med. Genom detta är det möjligt att här fler SSL certifikater på en server, och även här fler SSL certifikat på ett IP-adress och port. Utan SNI är det bara möjligt att installera ett SSL certifikat på ett IP-adress.

Denna manual visar hur man konfigurerar två hemsidor med SSL: site1.examplesite.net och site2.examplesite.se. Båda hemsidor användar samma IP-adress, med en egen SSL certifikat. På samma IP-adress ska vi ochså konfigurera en vanlig hemsida utan SSL. Den hemsida brukar port 80, istället för 443 (SSL).

Nödvändigt: Apache Web server 2.2.12+ med mod_ssl och OpenSSL

Med Ubuntu 10.04+ eller Fedora 10+, stöder Apache och OpenSSL redan SNI. Om du användar Red Hat Enterprise Linux, CentOS 5.x eller Debian 5.x kan det vara nodvändigt att kompilera Apache och OpenSSL från source. SNI fungerar från Apache version 2.2.12 och OpenSSL 0.9.8f.

Compatibiliteit

För att SNI ska fungera korrekt, måste man också använda en webbläsare som stöder detta. Om din webbläsare inte stöder SNI, får du en 'untrusted certificate' meddelande.

SNI funkar inte på Internet Explorer på Windows XP. Från Internet Explorer 7 på Windows Vista, Windows 7 och Windows 8, funkar SNI. Det samma gäller för senaste versioner av Firefox, Chrome och Safari.

Instruktioner

  • Aktivera mod_ssl i Apache ('avkommentera' mod_ssl regel i httpd.conf, vid Ubuntu eller Debian brukar du 'a2enmod'). Vid de flesta installationer av Apache är mod_ssl aktiverad som standard.
  • Ta hand om att Apache brukar port 443 (för SSL) och du användar virtual hosts med namn på denna port.
  • Gå till 'IfModule mod_ssl.c' blocket. Det brukar stå i httpd.conf, ports.conf eller ett mod_ssl fil.

I detta block hittar du:

 Listen 443

I detta block, lägg till:

NameVirtualHost *:443

Med denna kod, vet Apache att den ska använda virtual hosts på SSL port 443.

OBS: För att vi ska också använda en virtual host på port 80 (www.examplesite.net), måste du lägga till 'NameVirtualHost *:80' i dina Apache inställningar. Använd ports.conf på Ubuntu och Debian, i andra fall, använd httpd.conf.

Virtual Hosts

Använd separata katalog för varje hemsida. Skapa katalog för varja domän:

cd /home/demo
mkdir -p public_html/www.examplesite.net/{public,private,log,cgi-bin,backup}

mkdir -p public_html/site1.examplesite.net/{public,private,log,cgi-bin,backup}
mkdir -p public_html/site2.examplesite.net/{public,private,log,cgi-bin,backup}

Gå sen till din katalog med Apache inställningar så du kan ställa in virtual hosts.

Inställningar vanliga hemsida

Med denna inställningar fungerar 'www.examplesite.net' på port 80:

<VirtualHost *:80>

ServerName "www.examplesite.net"

ServerAdmin webmaster@examplesite.net

DocumentRoot /home/demo/public_html/www.examplesite.net/public

ErrorLog /home/demo/public_html/www.examplesite.net/log/error.log

LogLevel warn

CustomLog /home/demo/public_html/www.examplesite.net/log/access.log combined

<Directory /home/demo/public_html/www.examplesite.net/public>

Options Indexes FollowSymLinks MultiViews AllowOverride None

Order allow,deny

allow from all

</Directory>

</VirtualHost>

Inställningar första hemsida

Skapa ett nytt konfigurations fil för den första SSL sidan, site1.examplesite.net. I denna brukar vi port 443 istället för 80.

<VirtualHost *:443>

ServerName "site1.examplesite.net"

ServerAdmin webmaster@examplesite.net

DocumentRoot /home/demo/public_html/site1.examplesite.net/public

ErrorLog /home/demo/public_html/site1.examplesite.net/log/error.log

LogLevel warn

CustomLog /home/demo/public_html/site1.examplesite.net/log/access.log combined

<Directory /home/demo/public_html/site1.examplesite.net/public>

Options Indexes FollowSymLinks MultiViews AllowOverride None

Order allow,deny

allow from all

</Directory>

SSLEngine On

SSLCertificateFile /var/www/certs/site1.pem

SSLCertificateKeyFile /var/www/keys/site1.key

</VirtualHost>

Själva certifikat finns i site1.pem, och private key i site1.key

Inställningar andra hemsida

Som i första sidan, skapa ett nytt konfigurations fil för den första SSL sidan, site2.examplesite.net.

<VirtualHost *:443>

ServerName "site2.examplesite.net"

ServerAdmin webmaster@examplesite.net

DocumentRoot /home/demo/public_html/site1.examplesite.net/public

ErrorLog /home/demo/public_html/site2.examplesite.net/log/error.log

LogLevel warn

CustomLog /home/demo/public_html/site2.examplesite.net/log/access.log combined

<Directory /home/demo/public_html/site2.examplesite.net/public>

Options Indexes FollowSymLinks MultiViews AllowOverride None

Order allow,deny

allow from all

</Directory>

SSLEngine On

SSLCertificateFile /var/www/certs/site2.pem

SSLCertificateKeyFile /var/www/keys/site2.key

</VirtualHost>

För site2.examplesite.net brukar vi nu site2.pem och site.key.

SNI både nu fungera på din server, och båda hemsidor.

 

SSL-kontroll

SSLCheck kontrollerar om certifikatet är korrekt installerat på din server och om det finns potentiella problem.