Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Update

So for some strange reason, the problem seems to have resolved itself.
Perhaps it's some sort of strange caching issue or something (though I have apache2ctl stop/start/restart and sudo service apache2 stop/start/restart/reloaded many times and have performed tests locally on the server as well as using several different machines).

Feel free to take this question down or leave it up if it serves as any sort of reference.
Thanks for all the help guys!


Apache seems to route all https requests to the first <VirtualHost *:443> regardless of SNI matching on ServerName/ServerAlias fields.

Apache is built with SNI
Server version: Apache/2.2.22 (Ubuntu)
Server built: Mar 8 2013 15:53:13
OpenSSL 1.0.1 14 Mar 2012

error.log reports:

Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)

Which suggests SNI is working as per http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI (How can you tell if your Apache build supports SNI?)

SSL_TLS_SNI seems to be set appropriately when requested using HTTPS (verified with phpinfo())

Configuration:

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    NameVirtualHost *:443
    Listen 443
</IfModule>

#<VirtualHost *:443>
#       <Location />
#               Order allow,deny
#               Deny from all
#       </Location>
#</VirtualHost>

<VirtualHost *:443>
        SSLEngine on
        ServerAdmin webmaster@localhost
        ServerName server.com
        ServerAlias server.com
        DocumentRoot /web/default
        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLCertificateFile /path/server.com.crt
        SSLCertificateKeyFile /path/server.com.key
</VirtualHost>
<VirtualHost *:443>
        SSLEngine on
        ServerAdmin webmaster@localhost
        ServerName alias.com
        ServerAlias alias.com
        DocumentRoot /web/default
        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLCertificateFile /path/alias.com.crt
        SSLCertificateKeyFile /path/alias.com.key
</VirtualHost>

Both https://server.com and https://alias.com try to serve the certificate (and content if you disregard the cert warning) from server.com

Similar configuration works fine using HTTP:80 (only change is SSLEngine on and the certificate/key paths)

If I uncomment the first virtual host (restricting HTTPS access to sites that are defined) then I always get a SSL error (even if it is a defined site)

Thanks

EDIT:
Additional flags

SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
SSLStrictSNIVHostCheck on
SSLVerifyClient none
SSLProxyEngine off

SSLStrictSNIVHostCheck on so it should only support SNI enabled browsers anyway

apache2ctl -S output:

*:443                  is a NameVirtualHost
         default server server.com (/etc/apache2/sites-enabled/000-default:22)
         port 443 namevhost server.com (/etc/apache2/sites-enabled/000-default:22)
         port 443 namevhost alias.com (/etc/apache2/sites-enabled/000-default:39)
         port 443 namevhost other.com (/etc/apache2/sites-enabled/other:22)
share|improve this question
    
possible duplicate of Multiple SSL domains on the same IP address and same port? –  Jenny D May 23 '13 at 8:26
    
I don't think so. It looks like SNI is at least possible in this environment and so far as I can tell it's correctly configured. –  Falcon Momot May 23 '13 at 9:11

3 Answers 3

up vote 2 down vote accepted

Update

So for some strange reason, the problem seems to have resolved itself.
Perhaps it's some sort of strange caching issue or something (though I have apache2ctl stop/start/restart and sudo service apache2 stop/start/restart/reloaded many times and have performed tests locally on the server as well as using several different machines).

Feel free to take this question down or leave it up if it serves as any sort of reference.
Thanks for all the help guys!

share|improve this answer
    
it seems I have the same issue. Still not resolved. Waiting already for >12 hours. server.com and server.com works but problems with alias.com (although alias.com already works) ??? @arcqwerty how long did it take, till the problem had resolved on it's own? –  NilsB Jan 20 at 8:02
    
Looking back at the time between Q+A, I'd say about 10 hours? –  arcyqwerty Jul 26 at 7:00

Your configuration looks OK; The directive SSLEngine On has been included; According to the log message, it looks like the issue comes from the client side.

Not all clients support SNI, however most of them do. It depends on how the SSL negociation is made, by the system (does not work on Win XP then) or by the browser (the version must be recent enough). Look at list of browsers with support of SNI. If you must ensure all clients get access to your websites, you can't use SNI because of these old versions (of the browser or of the system). You would need an IP per ServerName and use VirtualHost $IP_alias:443 for ServerName alias.com and VirtualHost $IP_server:443 for ServerName server.com instead of VirtualHost *:443 for both.

share|improve this answer
    
I am pretty sure my browser is correctly sending SNI since I can see it from in the SSL_TLS_SNI variable on the server. I have tried on all of the latest versions of Chrome, Firefox and IE10 and none work. Things look ok when I check my browser SNI support on sni.velox.ch –  arcyqwerty May 23 '13 at 16:59

You get an error with the first virtual host because, having not included the SSLEngine on directive, Apache sends an HTTP response without SSL. If you want this kind of functionality you would have to set up another site (possibly with another certificate, unless you reuse an existing domain) for your default vhost, even if all you want to do is return a nice error.

Perhaps check that the certificates are actually different? Your configuration appears correct.

Also, check that there are no other VirtualHost sections listening on port 443. Apache will select the best-matching one, meaning that if anything is more specific to the address that the connection came in on, that entry will take precedence. I don't think this is your problem, though.

Additionally, as a point of interest, what you are seeing from the user side is what would happen if the client didn't support SNI in most cases.

share|improve this answer
    
Yes, I expect that error on the first host. The only behavior I want on that is just to disable the default site (the only HTTPS sites that can be accessed are explicitly defined by virtualhosts). In any case, even with it commented, things don't seem to be working. I have verified the certs are different (displaying using openssl x509 -in cert.crt -text -noout) though using openssl s_client -showcerts -connect alias.com:443 seems to give me the server.com certificate. I also have SSLStrictSNIVHostCheck on so it should restrict to browsers supporting SNI. See edit for site config –  arcyqwerty May 23 '13 at 17:02
    
Also, if I comment out the server.com virtualhost, then it passes up the correct certificate for alias.com since it's now the first vhost and set to default –  arcyqwerty May 23 '13 at 17:07

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.