Hacía tiempo que quería tener la funcionalidad de conexión segura SSL en el protocolo HTTP (HTTPS) en mi servidor, sobre todo para poder utilizarlo cuando accedo al área de administración en redes poco seguras. De este modo me aseguro que la comunicación entre mi servidor y mi navegador va cifrada, además de reducir la posibilidad de un ataque man-in-the-middle.
Desde hace tiempo que lo puse a funcionar en Cherokee Web Server, y no puedo dejar de escribir qué hice para hacerlo funcionar, así además de no olvidarlo yo, puede servirle a alguien también.
Los pasos básicamente son instalar apropiadamente los certificados raíz de CAcert.org en el servidor (concatenados en un fichero único), generar una petición de firma de certificado, generar la firma de CAcert.org usando la petición anterior y por último instalar la clave privada y la firma en el servidor.
Generamos nuestra petición de firma de certificado (certificate signing request), ejecutamos en una consola el comando: # openssl req -nodes -new -keyout private.key -out server.csr
A la derecha, en el menú, pulsamos en Dominios y luego en agregar. Ponemos nuestro dominio, en mi caso juanluperez.com.
Después pulsamos en Certificados de Servidor, y en nuevo. Copiamos el contenido de server.csr y lo pegamos en la caja donde nos pide el certificate signing request.
Nos devolverá un texto que comienza con algo como ----BEGIN CERTIFICATE----. Copiamos el texto tal cual está en un fichero texto plano y lo nombramos certificate.pem. ¡Ojo! La última línea debe ser ----END CERTIFICATE----, no nos servirá una última línea vacía. Lo aviso para los usuarios del editor nano, que siempre añade esta línea al final.
Descargamos el certificado raíz root.crt y el certificado intermedio class3.crt.
# cat root.crt class3.crt > chained.crt Concatenamos los dos certificados en un único fichero, tal y como lo necesitará cherokee más adelante.
Activamos SSL, vamos en el panel de configuración de Cherokee haciendo uso de cherokee-admin, un interfaz web de administración muy sencillo, en General y en pestaña Network vamos a la opción SSL/TLS backend y escogemos OpenSSL/libssl. A continuación vamos a la pestaña Ports to listen, añadimos el puerto 443 y activamos la casilla TLS/SSL.
Pulsamos en la sección vServers, a la izquierda seleccionamos el servidor virtual sobre el que queremos aplicar el certificado. Luego pulsamos a la derecha en la pestaña Security, donde vamos a añadir todos los ficheros de certificado que se necesitan.
En Certificate añadimos la ruta a certificate.pem.
En Certificate key añadimos la ruta a private.key.
En Client certs. request tenemos tres opciones, skip para no pedir certificado de cliente, accept en el caso de que acepte certificado en el caso de que se le envíe o require, que exigirá un certificado de cliente válido para permitir el paso. En mi caso me basta con skip, ya que no estoy interesado en autenticación, solo en el cifrado.
En CA List añadimos la ruta a chained.crt.
Los certificados que generamos en CACert duran 6 meses, por lo que cuando caduque nuestro certificado tenemos que volver a cargar uno renovado, pero esto es muy sencillo. Vamos a CACert, iniciamos sesión, pusamos en “ver” en la sección “Certificados de servidor”, luego seleccionamos el certificado que está apunto de caducar (o ya caducado) y le damos a renovar. Luego nos mostrará el certificado, lo copiamos en un fichero certificate.pem y lo volvemos a cargar en Cherokee.
Si no vemos listado el certificado que queremos renovar, debemos pulsar en “ver todos los certificados”.
Si te ha resultado útil te agradecería que me ayudaras a mantener el blog,
También acepto donaciones a través de Bitcoin en esta dirección: 12Ktf11yD3FedJrRdoQFL5uvd8XFEgpQhB
Después de tanto tiempo parece que por fin es posible usar el DNIe en Gentoo satisfactoriamente. Aquí detallo las instrucciones, que por supuesto son válidas para otros sistemas diferentes, salvo que habría que proceder de forma análoga con comandos distintos en la instalación de los paquetes propios del sistema de paquetería que uses.
# emerge pcsc-tools pcsc-lite opensc Instalamos los paquetes necesarios.
# rc-update add pcscd default Añadimos pcscd al arranque.
# /etc/init.d/pcscd start Iniciamos el servicio pcscd
# emerge jss Network Security Services para Java necesario para muchos sitios web
Modificar el fichero de configuración /etc/opensc.conf: # card_driver dnie {
# # Enable/Disable user consent on signing (default: enable)
# user_consent_enabled = true;
# # Program to be used for ask confirmation (default: pinentry)
# user_consent_app = /usr/bin/pinentry;
# }
...
reader_driver pcsc {
...
# Connect to reader in exclusive mode?
# Default: false
# connect_exclusive = true;
...
# Enable pinpad if detected (PC/SC v2.0.2 Part 10)
# Default: true
enable_pinpad = false;
...
}
...
# PKCS #15
framework pkcs15 {
....
# Prefer pkcs15 emulation code before
# the normal pkcs15 processing.
# Some cards (like esteid and pteid) work in emu-only mode,
# and do not depend on this option.
#
# Default: no
try_emulation_first = yes;
....
}
...
# Parameters for the OpenSC PKCS11 module
app opensc-pkcs11 {
pkcs11 {
# Should the module support hotplug of readers as per PKCS#11 v2.20?
# This affects slot changes and PC/SC PnP, as v2.11 applications
# are not allowed to change the length of the slot list.
# Default: true
plug_and_play = false;# Maximum Number of virtual slots
...
$ dnie-tool -d -w Probamos que tenemos acceso al DNIe. Asegúrate de tener el lector conectado y el DNIe introducido en el lector. $ dnie-tool -d -w
Waiting for a card to be inserted...
DNIe Number: 99999999X
SurName: PEREZ
Name: JUAN LUIS
Añadimos los certificados raíz como autoridad certificadora en Firefox. Que los podemos bajar de aquí.
Añadimos el módulo para acceder al lactor en Firefox, en Editar->Preferencias->Avanzado->Cifrado->Dispositivos de seguridad->Cargar->Examinar… Y añadimos la ruta /usr/local/lib/pksc11/opensc-pkcs11.so.
En una entrada anterior explicaba como instalar SparkleShare desde un Overlay de Gentoo. En este caso vamos a instalar la última versión (0.4.0) de SparkleShare desde su repositorio oficial Git. Hay que tener en cuenta que tomamos como referencia la entrada anterior, por lo que se tiene en cuenta que hemos llevado a cabo los pasos anteriores y tenemos resueltas las dependencias de SparkleShare.
# emerge -C sparkleshare -q Desinstalamos la versión antigua de sparkleshare.
$ mkdir ~/src/ Creamos un directorio donde contener las fuentes si no existiera.
$ cd ~/src/ Nos movemos al direcotorio creado.
$ git clone https://github.com/hbons/SparkleShare.git Descargamos las fuentes de SparkleShare.
$ cd SparkleShare/ Entramos en el directorio de las fuentes.
$ ./autogen.sh --prefix=/usr/local Generamos el Makefile.
$ make Construimos…
$ su -c "make install" Y por último instalamos en /usr/local/.
Si ejecutamos desde consola sparkleshare start veremos como se inicia nuestro cliente…
Si te ha resultado útil te agradecería que me ayudaras a mantener el blog,
También acepto donaciones a través de Bitcoin en esta dirección: 12Ktf11yD3FedJrRdoQFL5uvd8XFEgpQhB
Hoy vamos a ver como instalar Sparkleshare en un servidor propio y su uso en una estación de trabajo. He leído hablar de él y también me parecía genial la idea de poder tener un algo similar a Dropbox pero en mi propio servidor. La idea es genial, en el servidor tenemos ssh como servicio y en los clientes instalamos Sparkleshare y Git.
En el lado del servidor solo es necesario tener en funcionamiento el servicio ssh, y al menos un usuario en el servidor que será el que tenga acceso a su carpeta compartida. En el lado del cliente será necesario tener instalado openssh para usarlo como cliente (que yo ya tenía instalado), git y sparkleshare.
# chmod g+s /home/sparkleshare (con esto conseguimos que los ficheros y directorios creados por usuario pertenezcan al grupo sparkleshare)
# su usuario -c “git init –bare /home/sparkleshare/usuario/usuario.git”
2. Preparar la máquina cliente:
Instalamos Sparkleshare en la máquina de trabajo cliente, también con Gentoo:
# layman -a betagarden Añadimos el overlay betagarden a nuestro portage.
# layman -S Sincronizamos todos nuestros overlays de terceros.
# echo "app-backup/sparkleshare ~amd64" >> /etc/portage/package.keywords/sparkleshare Aceptamos sparkleshare para instalar como inestable.
# emerge -avq sparkleshare Lo instalamos.
$ sparkleshare start Y lo ejecutamos como usuario.
3. Configurar Sparklshare en la máquina cliente:
Ponemos nuestro nombre y la dirección de correo-e a la que queremos que Sparkleshare nos envíe notificaciones.
¡Antes de continuar es importante este paso! En este momento Sparkleshare ha creado una pareja de claves pública y privada para su uso con ssh para la comunicación con el servidor. Tenemos que agregar la clave pública a nuestro usuario en nuestro servidor para permitir el acceso con las claves generadas por Sparkleshare.
$ ssh-copy-id -i .config/sparkleshare/sparkleshare.usuario@micorreo.com.key.pub usuario@miservidor Ejecutamos esto como usuario en la máquina cliente para copiar la clave pública en el servidor.
En la siguiente ventana de configuración ponemos el servidor con el nombre de usuario, por ejemplo: usuario@miservidor. Y en nombre de la carpeta ponemos la ruta completa al repositorio git en este caso sería /home/sparkleshare/usuario/usuario.git.
Bien, ahora sí podemos pulsar en “sincronizar”.
¡¡Y ahora a probarlo!!
5. Otras consideraciones para la configuración:
Debemos tener en cuenta que si nuestro puerto de acceso a ssh no es el puerto 22 por defecto, Sparkleshare no funcionará pues no tenemos en la interfaz ninguna forma de indicar el puerto de conexión. Sin embargo sí que hay una solución para ello. Haremos lo siguiente en el equipo cliente como usuario: $ nano -w ~/.ssh/config Creamos y editamos el fichero.
Host ejemplo.com
Port 1234
4. Opinión del estado actual del proyecto Sparkleshare:
Todavía es un proyecto joven al que le falta pulir muchas cosas y añadir muchas funciones más. Detecta bien los cambios de nombre de fichero, la adición de ficheros, la modificación de su contenido, la eliminación… Sin embargo el interfaz gráfico todavía deja bastante que desear. Se ve que se están centrando más en el comportamiento y funcionamiento de la sincronización.
Si te ha resultado útil y te gustaría compensarme invitándome a una cervecita o bien ayudánme con los gastos del blog:
Descargamos el kernel y la imagen de inicio de la instalación por red. Y los movemos a una carpeta llamada netboot.
Creamos una imagen de disco que será usada por Qemu: qemu-img create -f qcow hda.img 20G, el tamaño puede variar dependiendo de la necesidad de espacio que podamos tener.
Iniciamos la instalación de Debian: qemu-system-arm -M versatilepb -kernel netboot/vmlinuz-2.6.32-5-versatile -initrd netboot/initrd.gz -hda hda.img -append "root=/dev/ram"
Imagen del inicio del arranque de la instalación por red de Debian
Esperamos a que inicie el programa de instalación y seguimos las indicaciones en pantalla, en principio es una instalación normal como en un ordenador normal.
Instalación de Debian - Selección de idioma
Instalación de Debian - Instalación del sistema base
Para los fines que le daré a este sistema, no necesito por ejemplo un entorno de escritorio, pero sí que necesitaré un servidor ssh.
Instalación de Debian - Selección de programas
No debemos preocuparnos por no instalar un cargador de arranque, ya que le pasaremos los parámetros de arranque a Qemu.
Instalación de Debian - Cargador de arranque
Y por fin terminamos la instalación, debemos tener en cuenta que el sistema de instalación reinicia el sistema, por lo que volvería a iniciar el sistema de instalación. Así que lo mejor sería dejar que reinicie, y una vez que lo haya hecho, cerramos Qemu.
Instalación de Debian - Reiniciar sistema
Descargamos el kernel y la imagen de inicio que usaremos para iniciar el sistema instalado. Y para terminar solo queda probar nuestra nueva instalación con el comando que usaremos para arrancar nuestro sistema Debian: qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.img-2.6.32-5-versatile -hda hda.img -append "root=/dev/sda1"
Recompilar el kernel activando las siguientes características:
Device Drivers --->
Graphics support --->
<*> /dev/agpgart (AGP Support) --->
<*> Modul für deinen Chipsatz wählen
<*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->
<*> ATI Radeon
[*] Enable modesetting on radeon by default
Y también:
Device Drivers --->
Generic Driver Options --->
-*- Userspace firmware loading support
[*] Include in-kernel firmware blobs in kernel binary
(radeon/R700_rlc.bin) External firmware blobs to build into the kernel binary
(/lib/firmware) Firmware blobs root directory
Un ScreenCast es al vídeo lo que un SnapShot (pantallazo o captura de pantalla) a la fotografía. Hay algunos programas que realizan capturas de vídeo de lo que se muestra en nuestra pantalla, unos con mejores resultados que otros y también con mayor o menor dificultad de uso. Ejemplo de ello son Istanbul y RecordMyDesktop, dos soluciones que podrían funcionar muy bien. Sin embargo, no me permiten grabar sonido de un micrófono mientras graba la pantalla, para por ejemplo dar explicaciones mientras muestras algo. Cosa que puede ser bastante útil. Hace unos meses descubrí que ffmpeg es capaz de esto y me puse a hacer algunas pruebas para conseguir grabar vídeos con la característica de que se pudiera oír mi voz dando algunas explicaciones. En realidad no era para nada muy serio, pero en alguna ocasión me ha surgido la situación que querer explicar a alguien cómo hacer algo, y la verdad que tardaría un minuto en hacerlo con un vídeo así y no como sería con una explicación por escrito, que además si no me explico bien, quizás pueda llevar más a confusión. Veamos las opciones de ejecución por separado:
-i dispositivo se usa para indicar el dispositivo de entrada tanto para vídeo como para audio.
-f formatoes para indicar el formato de entrada ya sea de vídeo o de audio.
-r n consigue que se haga la grabación n fotogramas por segundo.
-s tamaño es la forma que tiene ffmpeg de recibir el tamaño de captura de pantalla, puede ser indicado de varias formas, como 640x480 o bien su equivalente vga. Podemos ver una lista de nombres para los diferetesta tamaños aquí o bien poner un tamaño diferente de la forma valorxvalor.
-b se usa para estipular la tasa de bits por segundo que se van a usar en la salida ya sea de vídeo o sonido, ejemplo: -b 128k.
-sameq consigue que se haga la captura con la misma calidad que tenga la propia entrada. Haciendo que la tasa de bits por segundo de la salida sea la necesaria como para que no sea apreciable ninguna pérdida de calidad con respecto a la entrada. Si usas esta opción, no es neceseario usar -b.
-async n muy útil para conseguir una buena sincronización del sonido de entrada y la imagen. De este modo, si grabamos nuestra voz mientras grabamos el vídeo veremos como nuestras palabras van en sincronía con el vídeo.
Algunos ejemplos:
$ ffmpeg -f oss -i /dev/dsp salida.mpg Para capturar sonido con OSS.
$ ffmpeg -f alsa -i plughw:1,0 salida.mpg Para capturar sonido con ALSA.
$ ffmpeg -f -x11grab -i :0.0 -s 1280x1024 -r 25 salida.mpg Para capturar vídeo de la pantalla.
$ ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 -sameq Desktop/out.mpg Para capturar vídeo de la webcam.
$ ffmpeg -async 1 -f alsa -i plughw:1,0 -f x11grab -s 1440x900 -r 25 -i :0.0 -b 128k Desktop/out.mpg Capturar vídeo y sonido a la vez.
Estamos de enhorabuena, Google al fin ha publicado su versión de Google Talk Plugin para los usuarios de GNU/Linux tanto en 32 bits como en 64 bits. Los distribuyen como paquetes Debian, pero no es problema, podemos descomprimirlos e instalarlos a mano en cualquier distribución GNU/Linux sin mucha complicación.
Descargamos el paquete .deb de este enlace. En mi caso reconoció que uso un sistema de 64 bits, supongo que influye el hecho de que uso un navegador compilado para 64 bits.
$ ar x google-talkplugin_current_amd64.deb Descomprimimos el paquete .deb.
# tar xzf data.tar.gz --exclude=opt --exclude=etc --strip-components 2 -C /usr
# tar xzf data.tar.gz --exclude=usr --exclude=etc --strip-components 2 -C /opt Extraemos solo los ficheros necesarios para instalar el plugin.
$ /opt/google/talkplugin/GoogleTalkPlugin Comprobamos si es capaz de encontrar las bibliotecas necesarias ejecutando este comando.
# ln -s /usr/lib/libssl.so /usr/lib/libssl.so.0.9.8
# ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8 Si nos da algún error, tenemos que crear enlaces simbólicos de las bibliotecas que nos pidiera.
Si algo te ha resultado útil, te ha ahorrado tiempo o dinero, o simplemente te ha gustado mi blog, puedes darme la voluntad para ayudarme a pagar los costos del sitio.