Enabling SSL (https protocol) with xampp in a local PHP project

Enabling SSL (https protocol) with xampp in a local PHP project

There are many advantages (and disadvantages) about using https in our websites. Some Browser API's only are accesible if the connection is secure (webkitSpeechRecognition, getUserMedia etc), you cannot load insecure resources (http) from secure websites (https) and a lot of others points.

You may probably tried to simply change the url in the browser with https instead of http at the beginning, however the only thing you'll find if you try to access in the browser will be Object not found!.

The problem talks by itself and we need to solve it , our virtual host doesn't provide SSL support for our project, therefore we are unable to use a secure connection.

Enable SSL for a single project

We suppose that you already mounted a normal virtual host in the *80 port and it may look similar to :

<VirtualHost 127.0.0.2:80>
  DocumentRoot "C:/xampp/htdocs/myproject/web"
  DirectoryIndex index.php

  <Directory "C:/xampp/htdocs/myproject/web">
	Options All
	AllowOverride All
	Require all granted
  </Directory>
</VirtualHost>

A normal vhost that points to the port 80 in a simple symfony 3 project, nothing special and it doesn't support https by itself.

To enable the SSL connection, you need to add the following lines inside another VirtualHost tag , basically with the same structure as you main VirtualHost tag but with the following information :

Note : the port now needs to be 443 instead of the 80.

SSLEngine on
SSLCertificateFile "conf/ssl.crt/server.crt"
SSLCertificateKeyFile "conf/ssl.key/server.key"

The previous lines will enable the SSL in your project. Note that the paths are relative, with a normal installed xampp distribution it should work, if it doesn't work try changing it to the absolute path. They're normally located inside the xampp/apache/conf/ssl.key/server.key and xampp/apache/conf/ssl.crt/server.crt.

<VirtualHost 127.0.0.2:443>
    DocumentRoot "C:/xampp/htdocs/myproject/web"
    ServerName myproject
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "conf/ssl.key/server.key"
    <Directory "C:/xampp/htdocs/myproject/web">
        Options All
	AllowOverride All
	Require all granted
    </Directory>
</VirtualHost>

Remember that the important point to enable the SSL are the properties SSLEngine, SSLCertificateFile and SSLCertificateKeyFile and the correct port (443).

Now add both VirtualHost in your httpd-vhosts.conf file :

# http
<VirtualHost 127.0.0.2:80>
    DocumentRoot "C:/xampp/htdocs/myproject/web"
    DirectoryIndex index.php

    <Directory "C:/xampp/htdocs/myproject/web">
        Options All
    	AllowOverride All
    	Require all granted
    </Directory>
</VirtualHost>

# https
<VirtualHost 127.0.0.2:443>
    DocumentRoot "C:/xampp/htdocs/myproject/web"
    ServerName myproject
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "conf/ssl.key/server.key"
    <Directory "C:/xampp/htdocs/myproject/web">
        Options All
    	AllowOverride All
    	Require all granted
    </Directory>
</VirtualHost>

Save the httpd-vhosts.conf file and restart the apache service and try to connect using the https protocol.

Note: in some browsers you'll get a warning due to a not trusted certificate, you only need to skip this warning.

Have fun !

Become a more social person