Todos los servidores web suelen tener métodos bastante estándares para
añadir SSL, lo típico cuando se usa OpenSSL es (como ya he explicado en
otro articulo anterior):
Generar la clave privada:
openssl genrsa -out serhost.com.key 1024
Generar la solicitud de certificado:
openssl req -new -key serhost.com.key -out serhost.com.csr
Ahora
queda o bien enviar esa solicitud a una entidad certificadora (que nos
cobrarán: 10$ (registerfly), 20$ (godaddy) a otros precios menos
razonables como verisign que intentará cobrar más de 350$ por
certificado, todas las compañías hacen lo mismo, pero unas tienen «mas
nombre» que otras).
La otra opción es optar también por una entidad certificadora gratuita (cacert.org) que ya no está reconocida ni siquiera por firefox, para lo cual, mejor, autofirmamos nuestro certificado (nos dará un aviso que el certificado no está firmado por una autoridad certificadora de confianza, pero podemos aceptarlo de forma permanente).
Actualización: Desde que se creó este artículo, existen alternativas gratuitas como por ejemplo: letsencrypt.
Para firmarlo y obtener un crt:
openssl x509 -req -days 365 -in serhost.com.csr -signkey serhost.com.key -out serhost.com.crt
Ahora
necesitamos el certificado en formato .pem (el .pem no es más que el
archivo .key y a continuación el archivo .crt), luego los concatenamos:
cat serhost.com.key serhost.com.crt > serhost.com.pem
En mi caso he guardado todos estos archivos:
- serhost.com.key
- serhost.com.csr
- serhost.com.crt
- serhost.com.pem
En
un directorio: ssl-certs, de modo que tengo todo un poco más
clasificado, hay que recordar darles los permisos adecuados (que el
propietario sea el usuario con que se ejecuta lighttpd y solo puedan ser
accedidos por él).
Una vez tenemos todo esto (vamos a suponer
que en: /etc/lighttpd/ssl-certs) editamos el fichero de configuración de
lighttpd (que suponemos está en: /etc/lighttpd/lighttpd.conf) y
añadimos al final:
var.confdir = "/etc/lighttpd"
$SERVER["socket"] == "127.0.0.1:443" {
ssl.engine = "enable"
ssl.pemfile = var.confdir + "/ssl-certs/serhost.com.pem"
server.name = var.confdir + "serhost.com"
server.document-root = "/var/www/localhost/htdocs/"
}
Las opciones creo que son autoexplicativas, también se puede establecer la opción:
ssl.ca-file = var.confdir + "/entidadcertificadora.crt"
que indicaría donde se encuentra el certificado con que ha sido firmado nuestro propio certificado.
Por
último, comentar que lighttpd soporta PHP, python, perl, ruby, y que
tiene soporte para virtualhosts y diferentes módulos útiles: mod_proxy,
mod_auth, mod_alias, mod_cache, mod_deflate, mod_cgi, mod_accesslog,
mod_rewrite, etc, además, sus fuentes comprimidos ocupan unos 700 KB y
parece ser que funciona más rápido que apache, una vez compilado a mano
con todas las librerías y el man correspondiente ocupa menos de 2 megas
(tras pasarle el comando strip).
Más información:
- Configuración extraída y adaptada de:
http://www.varlogarthas.net/blog/2007/03/installing_a_godaddy_ssl_certi.html (el enlace ya no funciona) - Lighttpd: http://www.lighttpd.net