Instalar Apache2 con SSL en Ubuntu
SSL es un sistema que permite que la información se transmita de forma encriptada a través de Internet, muy empleado en el comercio electrónico, es el candado que observamos en la barra de direcciones de algunas webs.
Con este tutorial se pretende mostrar la forma de configurarlo en un servidor Apache2, si bien puede haber cosas que no funcionen, todo depende de la distribución y la versión de Linux que se use. Este tutorial fue realizado usando Ubuntu 7.10.
Para empezar, sino tenemos instalado Apache lo instalamos:
sudo aptitude install apache2
A continuación habilitaremos los módulos ssl y rewrite:
a2enmod ssl
a2enmod rewrite
Generamos el certificado:
apache2-ssl-certificate
Si nos aparece un mensaje de error diciendo que el comando no existe haremos lo siguiente:
sudo aptitude install ssl-cert
openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
Rellenamos los campos que nos solicita.
Modificamos el fichero /etc/apache2/sites-enabled/ssl:
sudo nano /etc/apache2/sites-enabled/ssl
Añadimos:
SSLEngine On
SSLCertificateFile /etc/apache2/apache.pem
Si hemos creado una carpeta donde alojaremos las webs añadiremos en todas las líneas donde aparezca /var/www el nombre de la carpeta, así, si creamos una carpeta llamada websegura quedará de ésta forma:
/var/www/websegura
Modificamos también el fichero /etc/apache2/sites-enabled/000-default(o solo default, según versión):
sudo nano /etc/apache2/sites-enabled/000-default
y añadimos:
Debajo de NameVirtualHost *:80–>
NameVirtualHost *:443
Debajo de DocumentRoot /var/www/–>
RewriteEngine on
RewriteLog /var/log/apache2/https_rewrite.log
RewriteLogLevel 1
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
Al final del documento–>
< VirtualHost *:443 >
DocumentRoot /var/www
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/apache.pem
< /VirtualHost >
Abrimos el fichero /etc/apache2/ports.conf y comprobamos que exista lo siguiente, sino lo añadimos:
Listen 80
Listen 443
Abrimos el fichero /etc/apache2/apache2.conf y añadimos al final:
ServerName 127.0.0.1
Finalmente reiniciamos el demonio de Apache:
sudo /etc/init.d/apache2 force-reload
Posibles problemas que pueden surgir en la configuración:
- Comprueba que los ficheros de tu web tengan como propietario al usuario www-data y no a root, para ello ve hasta el directorio /var/www y con ls -l observa quien es el propietario de los ficheros, para cambiarlo: sudo chown nombredeusuario nombredefichero.
- Revisa los permisos, en concreto del fichero /etc/apache2/apache.pem, cambia los permisos de este fichero o de cualquier otro con chmod. Su sintaxis es chmod numero fichero. Ejemplo: sudo chmod 755 /etc/apache2/apache.pem.
- Si no tuvieras el paquete openssl instalado instálalo: sudo aptitude install openssl
- Después de cada cambio importante reinicia el demonio de Apache.
Para ver el certificado SSL en funcionamiento escribiremos en el navegador http://localhost/, automáticamente nos redirigirá a https…

19 Comentarios
Deje un comentario





















Muy buén artículo. Claro y conciso.
Gracias
Gracias por tu opinión, Javier. Pronto publicaré nuevos tutoriales sobre Linux.
[...] http://www.matrosphera.com/?p=83 [...]
Hola tenia una duda sobre el tutorial que as hecho si quiero configurarlo para que responda a las peticiones del nombre https://www.apachessl.com. donde se pondria esa dirección.
Gracias
Ruben,intuyo que quieres que tu servidor se pueda ver desde fuera de tu red, eso es cosa de DNS. Échale un vistazo a ésta página por si te pudiese servir:
http://www.no-ip.com
le doy las gracias a todos ya que con esta herramienta se puede lograr muchos objetivos soy nuevo en linux me esta costando un poco realice todos sus procedimiento pero todavía ten problema,el error que arroja ruben@ruben-laptop:~$ sudo /etc/init.d/apache2 force-reload
[sudo] password for ruben:
apache2: Syntax error on line 297 of /etc/apache2/apache2.conf: Include takes one argument, Name of the config file to be included
…fail!
no puedo abrir el apache2
Rubén, el error te lo da al final del fichero, así sin verlo lo más que te puedo decir es que compruebes que al final del fichero no hayas modificado ni borrado nada que no debieras, te copio las últimas lineas de mi fichero apache2.conf que está ahora mismo sin tocar apenas para que compares:
# Include of directories ignores editors’ and dpkg’s backup files,
# see README.Debian for details.
# Include generic snippets of statements
Include /etc/apache2/conf.d/
# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/
hola amigo segui tu tutorial y al momento de reiciar el apache me manda FAIL en rojo como puedo ver donde ese error le isntale todo lo q dice al final del tuto y cambie los permisos pero me sigue igual q crees q sea gracias por el tutorial
Hola amigo segui al paso tu tutorial para montar el ssl en mi servidor q lo tengo con ubuntu 8.04 server, hice todo como dices y cheque tmb lo errores q pueden surgir los permisos y se los puse todo se lo active los modulos etc. el error q me sale es q el apache al momento de reiniciar me sale en FAIL en roojo no me bota ningun error.. ahora lei q los errores q salen se alamcenan en error.log y me dices q hay porblemas con el mod_rewrite. tmb como dice tu tuto con el comando apache2-ssl-certificate y lo deje como sigue en la parte de abajo nada mas genere el .pem lei en otro foro de ubunto q ese comando se sustituyo por estas lineas :
openssl genrsa -des3 -out server.key 1024
# openssl rsa -in server.key -out server.pem
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 360 -in server.csr -signkey server.key -out server.crt
ahora ese es mi error q me sale ya no quise probarle metiendo estas lineas queria mejor preguntarte haver q hize mal, para ver si me puedes ayudar u orientarme
gracias por la atencion..
Hola crisx, en principio con las dos formas que he puesto de crear el certificado no deberías haber tenido problema. Te agradecería que me pegaras aquí el log del apache, puedes hacerlo con este comando:
cat /var/log/apache2/error.log
gracias amigo por la contestacion bueno reintale de nuevo el server. y esto me sale en el error.log
[Wed Mar 18 11:30:49 2009] [notice] Apache/2.2.8 (Ubuntu) configured — resuming normal operations
[Wed Mar 18 11:31:56 2009] [notice] SIGUSR1 received. Doing graceful restart
[Wed Mar 18 11:31:56 2009] [notice] Apache/2.2.8 (Ubuntu) mod_ssl/2.2.8 OpenSSL/0.9.8g configured — resuming normal operations
[Wed Mar 18 12:34:14 2009] [notice] SIGUSR1 received. Doing graceful restart
[Wed Mar 18 12:34:15 2009] [notice] Apache/2.2.8 (Ubuntu) mod_ssl/2.2.8 OpenSSL/0.9.8g configured — resuming normal operations
[Wed Mar 18 12:34:31 2009] [error] [client 192.168.1.74] File does not exist: /var/www/favicon.ico
[Wed Mar 18 12:34:34 2009] [error] [client 192.168.1.74] File does not exist: /var/www/favicon.ico
[Wed Mar 18 12:35:14 2009] [notice] Apache/2.2.8 (Ubuntu) mod_ssl/2.2.8 OpenSSL/0.9.8g configured — resuming normal operations
[Wed Mar 18 12:41:30 2009] [notice] SIGUSR1 received. Doing graceful restart
[Wed Mar 18 12:41:30 2009] [notice] Apache/2.2.8 (Ubuntu) mod_ssl/2.2.8 OpenSSL/0.9.8g configured — resuming normal operations
[Wed Mar 18 13:00:52 2009] [notice] SIGUSR1 received. Doing graceful restart
[Wed Mar 18 13:00:53 2009] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Wed Mar 18 13:00:53 2009] [warn] RSA server certificate CommonName (CN) `cristian’ does NOT match server name!?
[Wed Mar 18 13:00:53 2009] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Wed Mar 18 13:00:53 2009] [warn] RSA server certificate CommonName (CN) `cristian’ does NOT match server name!?
[Wed Mar 18 13:00:53 2009] [error] Illegal attempt to re-initialise SSL for server (theoretically shouldn’t happen!)
[Wed Mar 18 13:02:15 2009] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Wed Mar 18 13:02:15 2009] [warn] RSA server certificate CommonName (CN) `cristian’ does NOT match server name!?
[Wed Mar 18 13:02:15 2009] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Wed Mar 18 13:02:15 2009] [warn] RSA server certificate CommonName (CN) `cristian’ does NOT match server name!?
[Wed Mar 18 13:02:15 2009] [error] Illegal attempt to re-initialise SSL for server (theoretically shouldn’t happen!)
[Wed Mar 18 13:02:15 2009] [warn] RSA server certificate CommonName (CN) `cristian’ does NOT match server name!?
-La razón por la que no te funciona es porque no coincide el nombre del ServerName con el del certificado.Comprueba que en todas las partes de la configuración le des el mismo nombre, en éste caso: cristian.En principio no veo que haya ningún error más de importancia que no te permita arrancarlo con normalidad. Comprueba lo que te he comentado y me cuentas.
ok muchas gracias lo probare.
Hola que tal. Saludos desde Mexico.
Tengo un problema, al iniciar el servicio de apache me aparece esto:
mmorales@7426GX:/etc/apache2$ sudo /etc/init.d/apache2 force-reload
apache2: Syntax error on line 281 of /etc/apache2/apache2.conf: Syntax error on line 53 of /etc/apache2/sites-enabled/000-default: /etc/apache2/sites-enabled/000-default:59: was not closed.\n/etc/apache2/sites-enabled/000-default:53: was not closed.
…fail!
E hice exactamente todo lo que ofreces en el post. Solo que tengo una duda, en esta parte te tu post:
“Debajo de NameVirtualHost *:80–>
NameVirtualHost *:443
Debajo de DocumentRoot /var/www/–>
RewriteEngine on”
No deberia ser Debajo de ya que en el fichero
000-default no aparece nada como NameVirtualHost *:80
Gracias por tu ayuda, te agradecere demaciado si me respondes.
Hola Miguel, perdón antes de nada por tardar en contestar. Según dice el error tiene pinta de ser error de sintaxis. Si puedes ponme aquí el código y vemos que puede ser.
Hola un cordial saludo, a mi me sucedió lo que comentó el usuario anterior Miguel Morales, pero en la línea 49, te pego el código para que veas.
/////Esto es lo que arroja///////
apache2: Syntax error on line 281 of /etc/apache2/apache2.conf: Syntax error on line 49 of /etc/apache2/sites-enabled/000-default: /etc/apache2/sites-enabled/000-default:55: was not closed.\n/etc/apache2/sites-enabled/000-default:49: was not closed.
…fail!
///////////////////////////////
############ código de 000-defaul ###############
NameVirtualHost *:443
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
RewriteEngine on
RewriteLog /var/log/apache2/https_rewrite.log
RewriteLogLevel 1
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ “/usr/share/doc/”
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
DocumentRoot /var/www
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/apache.pem
#########################################################
desde ya gracias
Hola jv. Pues creo que es porque te falta poner < VirtualHost *:443 > y < /VirtualHost >. Fíjate cómo lo tengo puesto arriba, y si no te funciona vuelve a pegarme el error. Un saludo.
buenas amigo a pesar de que he seguido al pie de la letra tu how to, no me funciona ya lleve un dia en esto y no doy con el error, sera q puedes darme una mano?
esto es lo q me muestra el log al ejecutar sudo nano /var/log/apache2/error.log:
[Wed Aug 19 09:25:52 2009] [notice] Graceful restart requested, doing restart
[Wed Aug 19 09:25:52 2009] [warn] module deflate_module is already loaded, skipping
[Wed Aug 19 09:25:52 2009] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Wed Aug 19 09:25:52 2009] [warn] RSA server certificate CommonName (CN) `Jesus Ferrer’ does NOT match server name!?
[Wed Aug 19 09:25:52 2009] [error] Illegal attempt to re-initialise SSL for server (theoretically shouldn’t happen!)
al forzar al reinicio no me muestra error pero al ejecutar : sudo /etc/init.d/apache2 restart , me muesta lo siguiente:
[Wed Aug 19 10:58:09 2009] [warn] module deflate_module is already loaded, skipping
[Wed Aug 19 10:58:09 2009] [warn] module deflate_module is already loaded, skipping
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs
agradeceria de verdad que me ayudaras saludos y gracias de antemano.
Hola gsus, creo que el error puede estar aquí:
[Wed Aug 19 09:25:52 2009] [warn] RSA server certificate CommonName (CN) `Jesus Ferrer’ does NOT match server name!?
Ahí te indica que el nombre del servidor no coincide. Comprueba que en todos los ficheros le des el mismo nombre.