Configura un servidor SSL con Apache2 para simular en local tu sistema e-commerce, por ejemplo, un Magento o un Prestashop

El artículo de hoy explica cómo generar un certificado digital de servidor seguro con OpenSSL y cómo configurar Apache en nuestra máquina local para poder trabajar con dicho certificado.

Candado seguro

El objetivo es simular en local el funcionamiento de un sistema de comercio electrónico que trabaje con certificados digitales en producción, por ejemplo, un Magento o un Prestashop.

Vamos a ver cómo se crean los certificados SSL autofirmados con OpenSSL. Si te interesa este tema puedes pinchar en este enlace y también consultar la documentación oficial de OpenSSL.

Creación de una clave privada de 2048 bits con el algoritmo 3DES

openssl genrsa -des3 -out mitienda.pem 2048

Creación del CSR correspondiente

openssl req -new -key mitienda.pem -out mitienda.csr

Firma del CSR generado en el paso anterior

openssl x509 -req -days 365 -in mitienda.csr -signkey mitienda.pem -out mitienda.crt

Para desencriptar la clave privada RSA

openssl rsa -in mitienda.pem -out mitienda.key

Ya lo tenemos. Ahora pondremos nuestro certificado digital de servidor seguro SSL recién creado en la carpeta /etc/ssl/certs/

Carga del módulo SSL de Apache

Para ver si tenemos cargado el módulo mod_ssl de Apache podemos hacer:

apache2ctl -M

Si no ves el ssl_module, entonces hay que cargarlo (y justo después reiniciar Apache, recuerda):

a2enmod ssl

Configuración de un host virtual

Ahora hay que preparar nuestro host virtual para que funcione con SSL.

Archivo /etc/apache2/sites-available/mitienda-ssl.conf:

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin info@programarivm.com
        DocumentRoot /var/www/vhosts/mitienda.local
        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/error-mitienda-ssl.log
        CustomLog ${APACHE_LOG_DIR}/access-mitienda-ssl.log combined
        SSLEngine on
        SSLCertificateKeyFile /etc/ssl/certs/mitienda.key
        SSLCertificateFile /etc/ssl/certs/mitienda.crt
        <Directory "/var/www/vhosts/mitienda.local/">
            Options -Indexes -Multiviews
            AllowOverride All
            Order deny,allow
            Deny from all
            Allow from 127.0.0.1
        </Directory>
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" \
            nokeepalive ssl-unclean-shutdown \
            downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    </VirtualHost>
</IfModule>

Como habrás observado, esta es la parte importante:

SSLEngine on
SSLCertificateKeyFile /etc/ssl/certs/mitienda.key
SSLCertificateFile /etc/ssl/certs/mitienda.crt

Ya está. Ahora sólo falta activar el nuevo host virtual SSL:

a2ensite mitienda-ssl

Y reiniciar Apache.