Search code examples
sslvirtualboxportforwardingvagrant

Accessing apache on a vagrant sandbox using ssl (port forwarding)


I've built a vagrant/virtualbox web server as a development sandbox, and configured apache in the VM for ssl (on the default port 443, with a self-signed certificate). I've tested pages on the VM itself using curl

curl -v -k https://mysite.mydomain.com/testSearch/results?postcode=WN8+0BA

and it seems to work quite happily, so I'm satisfied that apache is correctly configured and working in the VM.

However, when I try to access the VM from my host's browsers over https, I'm unable to do so.

I've added

config.vm.forward_port "https", 443, 8443

to my vagrantfile, but trying to access the url

https://mysite.mydomain.com:8443/testSearch/results?postcode=WN8+0BA

simply can't display the page I've tried with several different browsers: IE gives a meaningless "Internet Explorer cannot display the webpage"; Chrome gives

SSL connection error
Unable to make a secure connection to the server. This may be a problem with the server or it may be requiring a client authentication certificate that you don't have.
Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.

Firefox gives me

An error occurred during a connection to mysite.mydomain.com:8443.
SSL received a record that exceeded the maximum permissible length.
(Error code: ssl_error_rx_record_too_long)

but even the Firebug Net tab doesn't tell me anything more than that.

I'm not getting anything in the access or error logs on the VM apache, so I suspect that vagrant isn't forwarding the ssl at all.

  • VM Guest OS: centos56x64
  • Host: Windows 7 64-bit
  • JRuby: 1.6.3 (ruby-1.8.7-p330) (2011-07-07 965162f) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_24) [Windows 7-amd64-java]
  • Vagrant: 0.7.8
  • VirtualBox: 4.0.12

Any assistance would be gratefully accepted.


Solution

  • 1) Configure the file Vagrantfile

    Vagrant::Config.run do |config|
        config.vm.box = "lucid32"
        config.vm.network "33.33.33.10"
        config.vm.forward_port "http", 80, 8080
    end
    

    2) Access your VM "lucid32"

    vagrant ssh
    

    3) Inside your VM, configure the Apache "Virtual Host":

    <VirtualHost 33.33.33.10:80>
        ServerName        your-domain.dev
        DocumentRoot    /vagrant
        DirectoryIndex    index.php index.html index.htm
    
        <Directory /vagrant>
            AllowOverride All
            Allow from All
        </Directory>
    </VirtualHost>
    
    <VirtualHost 33.33.33.10:443>
        ServerName        your-domain.dev
        DocumentRoot    /vagrant
        DirectoryIndex    index.php index.html index.htm
    
        <Directory /vagrant>
            AllowOverride All
            Allow from All
        </Directory>
    
        SSLEngine on
        SSLCertificateFile /path/to/certicate/apache.pem
    </VirtualHost>
    

    4) Exit VM and configure the file "hosts" in your host machine:

    33.33.33.10    your-domain.dev