Slackware + Certificados SSL (https / mod_ssl)
March 10th, 2007 by BusindreVamos a ver como poner rápidamente certificados SSL en Apache haciendo uso de mod_ssl. Por defecto en Slackware ya viene instalado dicho modulo. El tema de certificados SSL y su configuración en servidores apache se hace a través de host virtuales como ya sabréis.
Cada certificado SSL necesita una dirección IP propia (Las nuevas versiones de Apache soportan mas certificados, este no es el caso). Vamos a ver dos formas (Sin profundizar) de hacerlo dependiendo de donde configuremos los host virtuales (En httpd.conf o en mod_ssl.conf):
NOTA: Para no generar conflictos entre el html y los tags "<" y ">" para referirme a ellas las escribir al revés Ejemplo: ">VirtualHost _default_:443<"
Esta forma se trata de configurar todo el tema de host virtuales con SSL mediante mod_ssl.conf:1) Editar el httpd.conf y añadir:
LoadModule ssl_module libexec/apache/libssl.so
AddModule mod_ssl.c
NOTA: Cada uno en su sección.
Descomentamos la siguiente linea (Al final):
#Include /etc/apache/mod_ssl.conf
Quedando de la siguiente forma:
Include /etc/apache/mod_ssl.conf
Con esta correcta configuración solventamos errores del tipo:
Invalid command 'SSLEngine', perhaps mis-spelled or defined by a module not included in the server configuration
2) Generar los Certificados (RSA) / (RSA+TripleDES):
Vamos al directorio donde deben estar los certificados:
#cd /etc/ssl/certs/
Vamos a generar el server.key. Clave RSA de 1024 octetos y estructura x509, la cual se cifra utilizado Triple DES con una contraseña / phrase / clave que nosotros definimos.
A este comando de generación de clave con la opción "-rand" le especificamos directorios y archivos para que genere la clave aleatóriamente. Mi recomendación es que se haga con directorios con muchos archivos y usar archivos de gran tamaño que se tengan en el ordenador. Se deben poner separados por ":" (Podemos poner muchos, en el ejemplo usamos dos directorios y un archivo).
-des3 -> Tipo de algoritmo de encriptación que utilizaremos
-out server.key -> El archivo que contendrá nuestra llave.
#openssl genrsa -des3 -rand \
/home/busi/Descargas/:/home/busi/porno.avi:/home/tux/isos-DVD/ \
-out server.key 1024
NOTA: Al darle al "Enter" nos va a pedir una contraseña (phrase). Esta password es la que usaremos para arrancar apache en configuración segura ya que se nos preguntara cuando arranquemos apache (Con soporte para certificados SSL). Es la forma más segura, ya que usa triple DES, pero un tanto incomodo hacerlo cada vez que se reinicie apache.
* ¿Que pasa si no podemos / queremos meter la contraseña cada vez que se arranca apache?
#openssl rsa -in server.key -out server.pem
Enter pass phrase for server.key:
writing RSA key
Nos pide la password que pusimos para cifrar el server.key con triple DES
Ahora generamos el archivo csr que será la llave pública de nuestro certificado contestando primero a una serie de preguntas:
# openssl req -key certificado.key -out certificado.csr
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name ora DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,
If you enter '.', the field will be left blank.-----
Country Name (2 letter code) [GB]:ES
State or Province Name (full name) [Berkshire]:Monkey Island
Locality Name (eg, city) [Newbury]:Barcelona
Organization Name (eg, company) [My Company Ltd]:
Ladrones SGAE S.A. de C.V.
Organizational Unit Name (eg, section) []:Porntube
Common Name (eg, your name or your server's hostname) []:
www.midominio.org
Email Address []:mascacascaras@microsoft.orgPlease enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Una vez generado este archivo csr, si queremos formalizar / validar el certificado debemos dárselo a una RA (Autoridad de certificación) que son empresas como verisign o thawte, el cual nos dará el archivo .crt (Certificado) para nuestro servidor, previo pago, claro está.
Con un certificado firmado por esas instituciones los visitantes deben tener plena confianza en que el certificado que usamos es 100% bueno.
* ¿Que pasa si quiero usar mi propio certificado ?
Si no se desea un certificado firmado por un RA y queremos usar el nuestro propio lo generamos de la siguiente forma:
openssl x509 -req -days 730 -in server.csr \
-signkey server.key -out server.crt
Archivos generados en /etc/ssl/certs/:
server.crt
server.csr
server.key
server.pem
Ahora solo nos queda asegurar los archivos de certificación generados para que solo root tenga acceso a ellos:
chmod 400 /etc/ssl/certs/server*
3) Editar /etc/apache/mod_ssl.conf:
* Modificamos:
_________________________________________________________
>VirtualHost _default_:443<
# General setup for the virtual host
DocumentRoot "/var/www/htdocs"
ServerName new.host.name
ServerAdmin you@your.address
ErrorLog /var/log/apache/error_log
TransferLog /var/log/apache/access_log
...
_________________________________________________________
Por lo que nos interese (Ejemplo):
_________________________________________________________
>VirtualHost _default_:443<
# General setup for the virtual host
DocumentRoot "/var/www/htdocs/tuxhuellas/porno/"
ServerName www.porno.tuxhuellas.com
ServerAdmin tuxhuellas@porntube.com
ErrorLog /var/log/apache/tuxhuellas/error_log
TransferLog /var/log/apache/tuxhuellas/access_log
...
_________________________________________________________
* Debemos estar atentos al puerto usado por apache:
>IfDefine SSL<
Listen 6795 --> En el caso de que este cambiado en httpd.conf (Por defecto 80)
Listen 443
>/IfDefine<
* Debemos indicar donde están los archivos SSL que usara mod_ssl y apache, tendremos que comentar alguna linea y añadir la buena que corresponda a nuestra configuración:
Indicar ruta del server.crt:
#SSLCertificateFile /etc/apache/ssl.crt/server.crt
SSLCertificateFile /etc/ssl/certs/server.crt
Indicar ruta del server.key o la del server.pem (La primera es más segura pero pedirá clave al arrancar apache, por los motivos que ya explicamos)
#SSLCertificateKeyFile /etc/apache/ssl.key/server.key
SSLCertificateKeyFile /etc/ssl/certs/server.key
ó
#SSLCertificateKeyFile /etc/apache/ssl.key/server.key
SSLCertificateKeyFile /etc/ssl/certs/server.pem
NOTA: Si usamos server.pem no pedirá clave al arrancar (No usa el cifrado triple DES)
* Para añadir otro Virtual host al mod_ssl.conf debemos hacerlo dentro de las etiquetas de IfDefine SSL.
_________________________________________________________
>IfDefine SSL< <--- COMIENZO
##
## SSL Virtual Host Context
##
>VirtualHost _default_:443< <--- COMIENZO HOST VIRTUAL (DEFAULT)
# General setup for the virtual host
DocumentRoot "/var/www/htdocs/tuxhuellas/porno/"
ServerName www.porno.tuxhuellas.com
...........
......
>/VirtualHost< <--- FIN HOST VIRTUAL (DEFAULT)
ServerName www.tangas.tuxhuellas.com
DocumentRoot /var/www/htdocs/tangas/
DirectoryIndex index.php
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/certs/server.pem
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /var/www/htdocs/cineando/logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
CustomLog /var/www/htdocs/cineando/logs/ssl_access_log combined
Errorlog /var/www/htdocs/cineando/logs/ssl_error_log
>/VirtualHost< <-- FIN NUEVO HOST VIRTUAL
>/IfDefine< <----FIN
_________________________________________________________
De esta forma "www.tangas.tuxhuellas.com" y "www.porno.tuxhuellas.com" nos mostraran el certificado SSL.
3) Editar /etc/rc.d/rc.httpd modificando:
'start')
/usr/sbin/apachectl start ;;
Para dejarlo:
'start')
/usr/sbin/apachectl startssl ;;
Con esto no sera necesario arrancar el apache con soporte para SSL (/usr/sbin/apachectl startssl)
En esta forma pondremos la configuración de los virtual hosts con certificados SSL en el propio archivo httpd.conf. La creacion de las claves / certificados es la misma que la del paso 2 mostrado anteriormente.Editar el httpd.conf y añadir:
LoadModule ssl_module libexec/apache/libssl.so
AddModule mod_ssl.c
NOTA: Cada uno en su sección.
Descomentamos la siguiente linea (Al final):
#Include /etc/apache/mod_ssl.conf
Quedando de la siguiente forma:
Include /etc/apache/mod_ssl.conf
Por ahora es idéntico a la anterior formas, pero ahora debemos añadir el Virtual host al archivo /etc/apache/httpd.conf:
_________________________________________________________
>VirtualHost 127.0.0.1:443<
ServerName www.tangas.tuxhuellas.com
DocumentRoot /var/www/htdocs/tangas/
DirectoryIndex index.php
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/certs/server.pem
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog /var/www/htdocs/cineando/logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
CustomLog /var/www/htdocs/cineando/logs/ssl_access_log combined
Errorlog /var/www/htdocs/cineando/logs/ssl_error_log
>/VirtualHost<
_________________________________________________________
Ahora podriamos borrar la configuración del host virtual del mod_ssl.conf y dejarlo:
_________________________________________________________
>IfDefine SSL<
##
## SSL Virtual Host Context
##
<----------- BORRADO
>/IfDefine<
_________________________________________________________
No es necesario borrarlo, podemos tener X numero de host virtuales (SSL) en httpd.conf y otros X en el archivo mod_ssl.conf, pero siempre es bueno ponerlos todos en uno de los dos archivos de configuración (De ahi las dos formas que explica este artículo).
Al meter los host virtuales en el archivo httpd.con debemos comentar en mod_ssl.conf la linea:
LoadModule ssl_module libexec/apache/libssl.so
Por:
#LoadModule ssl_module libexec/apache/libssl.so
De esta forma evitaremos el común error:
[warn] module ssl_module is already loaded, skipping
Posted in Internet |
May 4th, 2007 at 4:46 pm
[...] Original: http://www.busindre.com/slackware-certificados-ssl-https-mod_ssl/ Igual tambien te interesan.... Slackware 11.0 disponibleComparación de Distrosxfce4.4 [...]