OCSP Stapling y no cachear errores OCSP en Apache

He tratado el tema de OCSP Stapling antes. Por ejemplo, OCSP Stapling y la privacidad de tus usuarios. Resumiendo: Online Certificate Status Protocol permite comprobar en tiempo real si un certificado X.509 está revocado o no, pero ello supone comprometer la privacidad de nuestros usuarios. Usando OCSP Stapling, el servidor web se hace cargo de solicitar el estado OCSP, se lo guarda mientras siga siendo válido y envía el resultado a cada navegador que se conecta para evitar que lo haga el propio navegador del usuario. Esto mejora la velocidad de respuesta percibida y no compromete la privacidad del usuario.

OCSP Stapling debería funcionar bien, pero de la teoría a la práctica siempre hay un trecho. Léase, por ejemplo, mi artículo OCSP y el depender de la profesionalidad ajena.

Leer más…

Borrar snapshots ZFS de forma automática y selectiva

Lo fácil y barato que resulta crear snapshots en ZFS tiene el efecto secundario de que los usemos constantemente y que, tarde o temprano, llenemos el disco duro y tengamos que hacer limpieza.

Limpieza...

Decidir qué borrar y qué conservar siempre es complicado. En mi caso hago snapshots varias veces por semana, al menos cada vez que hago un backup diario y cuando instalo software nuevo o reconfiguro un servicio en profundidad. A la hora de hacer limpieza mi criterio personal es el siguiente:

  • Salvo casos extremos, mantengo todos los snapshots hechos este año.
  • Para años previos, mantengo un snapshot al mes. No elijo cual conservo sino que lo hago al revés: De todos los snapshots de un mes dado, elijo cual me cargo. Repito el proceso hasta que solo me queda uno.
  • Puntualmente puedo conservar snapshots estratégicos. Por ejemplo, un snapshot inmediatamente previo a una reestructuración masiva del sistema de correo electrónico. Esto sirve tanto como medida de protección (siempre puedo volver a ese snapshot con un comando si las cosas se complican de verdad) como para conservar indefinidamente una copia del viejo estado del sistema como referencia futura.

¿Qué snapshot elimino? Intento borrar el snapshot que va a liberar más espacio. Esto no es trivial de evaluar en ZFS cuando vamos a borrar más de un snapshot.

Leer más…

¿Subir el framesize de Opus de 20 a 60 ms al recodificar audio de alta calidad?

Opus es la nueva generación de algoritmos de codificación de audio. En un único estándar (RFC 6716) se combinan algoritmos que permiten cubrir todo el espectro de audio moderno: desde voz monofónica de baja calidad y muy bajo bitrate hasta sonido multicanal de calidad transparente.

Otra ventaja de Opus respecto a sistemas como Vorbis es que se trata de un verdadero estándar abierto mundial con el soporte de la industria y desplegado, por ejemplo, en los navegadores web modernos que soportan WebRTC (se trata de un algoritmo exigido para todas las implementaciones WebRTC). Si a esto sumamos que su calidad es superior a la de la competencia y que su empleo (también para los creadores de software) es gratuito, la decisión está tomada.

Empecé a recodificar el audio de mis películas en Opus a partir del 10 de abril de 2015.

La conversión de un fichero WAV a Opus es bien sencilla, siempre que tengamos el software instalado:

Leer más…

Compilar la biblioteca "cryptography" con una versión de OpenSSL alternativa

Hablo un poco sobre la biblioteca Cryptography en el artículo La biblioteca "cryptography" o cómo generar CSRs en Python. Puedes leer los primeros párrafos para tener algo de contexto.

Si necesitas instalar Cryptography con una versión alternativa de OpenSSL, puedes indicar el path de instalación de la versión deseada de OpenSSL mediante variables de entorno.

Por ejemplo:

$ LDFLAGS="-L/usr/local/ssl/lib" \
  CFLAGS="-I/usr/local/ssl/include" \
  python3 -m pip install -U cryptography

Una vez compilado e instalado, podemos asegurarnos de qué versión de OpenSSL se está utilizando en Cryptography. Para ello escribimos este comando en el terminal:

$ python3 -c "from cryptography.hazmat.backends.openssl.backend import backend;print(backend.openssl_version_text())"

De esta manera verificamos que estamos usando la versión de OpenSSL que queremos usar.

Por supuesto, esto funciona tanto para Python 2 como para Python 3.

Tal vez te interese echarle un vistazo al hilo de la lista de correo.

Esta técnica es habitual al compilar código en lenguaje C, lo que es perfectamente apropiado en el caso de Cryptography porque, si bien es una librería para Python, contiene C en su interior.

PS: Los ejemplos que pongo son en Python 3 para que os vayáis acostumbrando, pero Cryptography funciona tanto en Python 2 como en Python 3.

La biblioteca "cryptography" o cómo generar CSRs en Python

OpenSSL es una biblioteca grande y compleja. Se utiliza para todo: criptografía simétrica, criptografía asimétrica, hashes, SSL, TLS y toda la gestión X.509: generar certificados X.509, generar CSRs, firmar certificados X.509 como autoridad de certificación y realizar todas las verificaciones necesarias. El resultado es una biblioteca grande y pesada en la que se encuentran problemas de seguridad con frecuencia y que evoluciona muy despacio.

Hace mucho que quiero utilizar alternativas a OpenSSL para algunas tareas, pero lo cierto es que hasta hace poco no había nada que le hiciese competencia. Esto ha cambiado -para algunas actividades- con la aparición de la biblioteca Cryptography.

Leer más…

HTTPS, "Mixed Content" y mi propia web personal

Aunque no tan rápido como algunos quisiéramos, HTTPS se está popularizando. Por el bien de todos. Yo actualicé mis propias webs en noviembre de 2014 como describo en mi artículo ¡Cifrad, cifrad, malditos!.

Además de la privacidad y la seguridad, cada vez hay más incentivos para migrar a HTTPS. Por ejemplo, hoy en día la navegación HTTPS puede ser más rápida que a través de HTTP normal y corriente. Comento algo al respecto en el artículo HTTP/2 ha llegado y aquí lo tienes funcionando.

A pesar de ello, el uso de HTTPS sigue siendo minoritario. Hay muchos motivos por los que una web no migra a HTTPS, la mayoría triviales y algunos graves y complicados. Un motivo frecuente, sobre todo en webs con publicidad [1], es lo que se llama Mixed Content.

La explicación simple de Mixed Content es la siguiente: para que una web sea segura no basta con que se sirva a través de HTTPS, sino que todos los objetos que esta página carga deben ser referenciados a través de HTTPS también. Por ejemplo, una web no es segura si se descarga por HTTPS, pero hace referencia a código Javascript que se descarga por HTTP.

Leer más…

La conversión de reglas de correo Thunderbird -> Sieve contraataca

Ha transcurrido un año desde el artículo Migrar Thunderbird de "mbox" a "IMAP" (VII): Filtrado en el servidor IMAP4 con Sieve y conversión de reglas Thunderbird. Todo ha funcionado a la perfección hasta el momento. Lo cierto es que el proyecto ha sido un completo éxito.

Esta semana me han surgido dos problemas simples de resolver, pero que vale la pena documentar. Este artículo expande Migrar Thunderbird de "mbox" a "IMAP" (VII): Filtrado en el servidor IMAP4 con Sieve y conversión de reglas Thunderbird. Léelo primero.

Leer más…

MPlayer y dónde guarda su configuración de brillo, saturación, contraste, etc

Cuando estás reproduciendo un vídeo con MPlayer puedes cambiar cosas como el brillo, saturación, color, etc., pulsando varias teclas. Esa configuración se mantiene entre ejecuciones de MPlayer. Esto puede ser lo que buscas o no. Hay veces que alteras la visualización para un vídeo en particular, pero no quieres que ese cambio se mantenga de forma persistente para otros vídeos.

A veces quieres devolver los valores alterados a su configuración por defecto. Lógico sería que esa configuración se guardase en algún sitio tipo ~/.mplayer/config, pero resulta que no es así.

Investigando e investigando descubro que MPlayer almacena esa configuración directamente en el driver XWindow. Se puede ver esa configuración con el comando xvinfo, donde nos aparecerá algo del tipo:

Leer más…

Bugs: Firefox y gstreamer 0.10

Firefox 40.0.3 solucionó un bug que me traía de cabeza: petes esporádicos cuando hay sonido en una web. Teniendo en cuenta que grabamos los podcasts por WebRTC, la cosa era tan grave que tenía una instalación de Firefox antigua paralela exclusivamente para este asunto.

Algo que me reducía la incidencia del problema era hacer lo siguiente:

  • En Firefox, entrar en about:config.
  • Buscar la configuración media.gstreamer.enabled y ponerla a false.

Por desgracia, este cambio reducía el problema, pero no lo solucionaba por completo.

Afortunadamente Firefox 40.0.3 arregló el problema y pude borrar la instalación antigua paralela y reactivar gstreamer.

Por si te interesa: el registro de cambios de Firefox 40.0.3.

Bugs: Firefox y " _XPrivSyncFunction: Assertion `dpy->synchandler == _XPrivSyncFunction'"

Hace unas cuantas versiones de Firefox que tengo petes muy frecuentes. Lanzándolo desde la línea de comandos, veo que falla una aserción con el siguiente error:

firefox: ../../src/XlibInt.c:595: _XPrivSyncFunction: Assertion `dpy->synchandler == _XPrivSyncFunction' failed.

Tras aburrirme de esperar a que Mozilla solucione el problema, hago una búsqueda por Internet y me encuentro este bug:

Bug 1196494 - _XPrivSyncFunction: Assertion `dpy->synchandler == _XPrivSyncFunction' failed with Firefox 40.0.2 (and also latest aurora build); older libX11?.

El problema parece estar solucionado desde mediados de octubre de 2015, pero aún tardará en estar disponible en las versiones públicas de Firefox.

Mientras tanto, un workaround que me funciona es:

  • En Firefox, entra en about:config.
  • Busca la configuración layers.offmainthreadcomposition.enabled y ponla a false.

Con este cambio ya no tengo problemas.

Cuando salga la próxima versión de Firefox (la versión actual en este momento es la 41.0.2), hay que comprobar si el bug sigue ahí o ya está solucionado.

Actualización 20151104: La versión 42 de Firefox sigue teniendo el mismo bug. Aparentemente el problema no estará solucionado para todo el mundo hasta la versión 44 de Firefox.

Actualización 20160510: Acaba de salir la versión 42 de Thunderbird y, naturalmente, tiene el mismo problema. La configuración se cambia en

Edit -> Preferences -> Advanced -> Config Editor