nueva petición en el trabajo (la cual me alegro hasta que supe que fue cliente final quien lo pidió y considerando que cliente final es un banco pues…)
Todo fácil pensé un poco de búsqueda, modificar el virtual host (alguna vez lo hice pero la memoria ya afecta) y ya esta. Nada mas apartado de la realidad
Para empezar zabbix no estaba configurado como vhost (desconozco si por defecto es así o fue algo que hizo la persona anterior cosa que dudo) pero tenemos una configuración muy repartida por todos lados y el tratar de descubrir todos los hoyos fue algo tedioso
Zabbix por defecto deja una configuración en /etc/apache2/conf-available/zabbix.conf donde se declara el alias (/zabbix) que se usara y sobre todo el directorio donde se encuentran los archivos del frontend que en mi caso es /usr/share/zabbix con eso ya podemos hacer el vhost como corresponde, entonces lo primero sera deshabilitar esta config
a2disconf zabbix
en mi caso para crear el archivo vhost volqué todo el contenido de zabbix.conf al nuevo archivo <url>.conf
cat /etc/apache2/conf-available/zabbix.conf > /etc/apache2/sites-available/<url>.conf
ya editando el archivo vhost agregamos las etiquetas correspondientes, eliminamos el alias y mantenemos todo lo demás
<VirtualHost *:80>
ServerName <url>
ServerAdmin webmaster@localhost
DocumentRoot /usr/share/zabbix
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
<IfModule mod_php5.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 10M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
# php_value date.timezone Europe/Riga
</IfModule>
<IfModule mod_php7.c>
php_value max_execution_time 500
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 10M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
# php_value date.timezone Europe/Riga
</IfModule>
</Directory>
<Directory "/usr/share/zabbix/conf"> [10/1379]
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/app">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/include">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/local">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
y finalmente se agrega el nuevo sitio
a2ensite <url>.conf
Con lo anterior y en estricto rigor ya tenemos el sitio configurado con su vhost correspondiente y podemos reiniciar el servicio apache2
systemctl restart apache2
Con los pasos anteriores «normalizamos» la configuración del frontend ahora toca la otra parte, el https
En mi caso decidí mantener el archivo creado anteriormente y crear un nuevo vhost de nombre ssl-<url>.conf, asi en caso de cualquier problema puedo habilitar el sitio original con http sin mayores problemas (obviamente en la empresa pensaron todo cuidadosamente y me tienen trabajando directamente sobre productivo)
y aqui viene la segunda «traba», al solicitar el certificado me indican que se compro uno con wildcard (o sea que, si por ejemplo compré el certificado para *.unashellrandom.cl puedo ocupar mas subdominios sin problemas como por ejemplo mail.unashellrandom.cl dns.unashellrandom.cl etc) y me entregan un archivo .pfx y un .txt que no tenia idea para que servían y que hacen
Archivo .pfx
Este archivo fue el resultado de exportar el certificado desde un IIS y en el se encuentra la clave publica y privada para ser usada en nuestro subdominio y para separarlas usamos los siguientes comandos:
Para Extraer la llave privada
openssl pkcs12 -in *.pfx -out resulto.txt -nodes
dentro del archivo resultante se encuentran ambas llaves por lo que tenemos que crear 2 archivos, el primero contendrá la llave privada y el segundo el certificado, para el primero copiamos todas las lineas desde
-----BEGIN PRIVATE KEY-----
hasta
-----END PRIVATE KEY-----
y para el certificado todas las lineas siguientes
ojo que este método dejara nuestra llave privada sin contraseña
esos archivos los movemos a las rutas /etc/ssl/private y /etc/ssl/certs respectivamente, cambiar los permisos a los mismos que los archivos que ya estén en ese directorio y procedemos a crear el vhost para https
<VirtualHost *:80>
ServerName noc1.sixbell.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</virtualhost>
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName noc1.sixbell.com
ServerAdmin webmaster@localhost
DocumentRoot /usr/share/zabbix
ErrorLog /var/log/apache2/ssl/error.log
CustomLog /var/log/apache2/ssl/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/public-cert.pem
SSLCertificateKeyFile /etc/ssl/private/noc.sixbell.com.key
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
<IfModule mod_php5.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 10M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
# php_value date.timezone Europe/Riga
</IfModule>
<IfModule mod_php7.c>
php_value max_execution_time 500
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 10M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
# php_value date.timezone Europe/Riga
</IfModule>
</Directory>
<Directory "/usr/share/zabbix/conf">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/app">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/include">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/usr/share/zabbix/local">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
</VirtualHost>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
El archivo TXT en realidad es un archivo opcional que proporciona la firma de quien firmo el certificado que estamos usando, si se quiere agregar a la configuración de apache se debe agregar la siguiente linea
SSLCertificateChainFile <ruta al archivo>
Es recomendable que se incluya este archivo ya que de lo contrario en el navegador puede salir un error como este

Básicamente es lo mismo que el vhost sin ssl pero agregamos unas pequeñas cosas (marcadas en rojo) y procedemos a habilitar tanto la pagina como las configuraciones necesarias
Verificamos tambien en el archivo /etc/apache2/ports.conf que este escuchando en el puerto 80 y el 443, deberia quedar algo asi (creo que viene por defecto)
more /etc/apache2/ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Finalmente habilitamos ssl, (en mi caso) deshabilito la pagina sin ssl y habilito la pagina con ssl
a2enmod ssl
a2dissite <url>.conf
a2ensite ssl-<url>.conf
systemctl restart apache2
Este es mi caso particular, tenia el sitio habilitado sin https por lo que deshabilite con a2dissite <url>.conf
Y eso es todo 😛 lo faltante fue pedir que habiliten el puerto en el fw y #chao
fuentes:
https://knowledge.digicert.com/solution/SO15668.html
https://www.digicert.com/csr-ssl-installation/ubuntu-server-with-apache2-openssl.htm
https://knowledge.digicert.com/solution/SO6252.html
https://stackoverflow.com/questions/9193907/installing-ssl-certificate-causes-the-server-to-fail-when-restarting
https://www.ssl247.com/kb/ssl-certificates/troubleshooting/apache/errors-asn1-encoding-routine-apache
https://stackoverflow.com/questions/41409606/zabbix-conf-redirect-to-another-port
https://www.digicert.com/es/apoyo-tecnico/apache-exportar-ssl.htm
https://www.digicert.com/es/instalar-certificado-ssl-apache.htm
https://beeznest.com/blog/2008/04/25/how-to-configure-https-on-apache-2/
https://www.geocerts.com/support/install-ssl-certificate-apache-web-server