Más sobre el etiquetado EXIF de fotos en mi web: HDR

En mi artículo ¿Cómo monto mis páginas web de viajes? explicaba cómo creo los álbumes fotográficos de mis viajes. Pero si sois asiduos a mi página web habréis visto que últimamente estoy mostrando más información sobre las fotos, como detalles High Dynamic Range. Por ejemplo, en las últimas fotografías de Italia.

La mayor dificultad es el propio formato EXIF. Cada cámara incluye sus propias extensiones propietarias completamente indocumentadas. Intentar descifrarlas supone una tarea de chinos, complicada además porque EXIF es un formato barroco que ha envejecido muy mal. Es muy de los 80 y las extensiones se han hecho siempre de forma descoordinada, ad-hoc y de mala manera. Incluso un mismo fabricante puede usar extensiones propietarias diferentes para distintos modelos de sus propias cámaras... para indicar lo mismo. Un auténtico batiburrillo infumable.

Estuve preguntando aquí y allí sin mucho éxito. Al final tuve que invertir un día entero aprendiendo sobre EXIF más de lo recomendable para mi salud mental y escribir los parches yo mismo.

Las preguntas:

Mis parches para la librería Python ExifRead:

Leer más…

Bug iOS: Las fotos y vídeos borrados desde el ordenador siguen ocupando espacio

La versión 8.x de iOS tiene una novedad pequeña pero interesante: Las imágenes o vídeos borrados desde el teléfono aparecen en una carpeta nueva llamada "eliminado recientemente". Los ficheros permanecen ahí durante 30 días por si nos arrepentimos o hemos borrado el fichero por error.

En principio es algo útil e interesante. La única pega es que cuando borramos fotos y vídeos para hace sitio tendremos que borrarlas dos veces: la vez de siempre y luego borrarlas de la carpeta "eliminado recientemente".

Si usas el móvil para sacar fotos en plan serio tendrás un montón y lo normal será gestionarlas desde el ordenador. Es decir, enchufamos el móvil al ordenador y copiamos y borramos las fotos desde él.

Y aquí hay un bug interesante: Las fotos y vídeos borrados desde el ordenador desaparecen de nuestra vista, pero siguen ocupando espacio. Es decir, ya no las veremos del ordenador ni tampoco saldrán en el móvil. Ni siquiera en la carpeta "eliminado recientemente". No obstante iTunes nos indica que esas fotos siguen existiendo y siguen ocupando espacio. Espacio que no podemos recuperar de ninguna manera.

Leer más…

Backup y restauración de dispositivos iOS

El móvil es algo que llevas siempre encima y en donde tienes cosas importantes y delicadas: acceso a tu correo electrónico (lo que básicamente da acceso a todo), fotografías que no tienes en ningún otro sitio, conversaciones de chat, etc. Es imprescindible que el móvil esté cifrado y protegido con un mecanismo de acceso.

Pero siendo algo que llevamos por la calle lo podemos perder, nos los pueden robar o se nos puede caer al suelo. Es importante mantener una copia de seguridad frecuente y lo más completa posible.

En el caso de los dispositivos iOS de Apple la cosa pasa por iTunes. Es mejor no dejar por escrito mis opiniones sobre iTunes. Baste decir que tengo una máquina virtual exclusivamente para gestionar mi iPhone a través de ese... engendro del averno.

Leer más…

Soporte de generadores RSS personalizados en Nikola (II)

En un artículo anterior, Soporte de generadores RSS personalizados en Nikola, comentaba las dificultades para sustituir el generador RSS nativo de Nikola. El resultado propuesto requiere copiar un fichero de Nikola, modificarlo y alterar otro.

He discutido el tema con los desarrolladores de Nikola durante diez meses, sin éxito. Su propuesta es un auténtico chanchullo, pero al menos no requiere que modifique el código de Nikola cada vez que actualizo. Si quieres leer mi opinión del asunto...

Leer más…

Generación de certificados X.509 autofirmados con "Subject Alternative Name"

Los certificados X.509 usados en TLS requieren una firma digital que les de validez. Para que un navegador web los reconozca como válidos, hoy en día, es necesario que la firma la realice una autoridad de certificación. Espero que eso cambie en el futuro con iniciativas como DANE pero ahora mismo es lo que hay.

En ciertos casos (intranets, servicios para grupos cerrados de usuarios...) obtener esa firma puede ser complicado o inconveniente. De hecho existen entornos donde confirmar en una autoridad de certificación externa puede minar la seguridad del sistema.

En situaciones así hay dos prácticas habituales. La primera consiste en crear una autoridad de certificación interna y privada para la organización. La otra opción es emplear certificados autofirmados.

Internet está repleto de tutoriales sobre cómo hace las dos cosas empleando OpenSSL. Es rutina. Pero hace unas semanas me encontré con este warning al actualizar uno de mis productos:

/usr/local/lib/python3.3/site-packages/requests/packages/urllib3/connection.py:251: SecurityWarning: Certificate has no subjectAltName, falling back to check for a commonName for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/shazow/urllib3/issues/497 for details.) SecurityWarning

Leer más…

Cambio de propiedades en ficheros Matroska

Algunas películas en formato Matroska tienen las pistas mal configuradas. Por ejemplo, el idioma primario es el japonés en vez del castellano o los subtítulos por defecto son la traducción completa en vez de los forzados.

Tradicionalmente solucionaba este problema exportando todas las pistas y volviendo a montarlas de nuevo correctamente. Luego descubrí mkvpropedit.

Leer más…

Tkabber, XMPP, Tcl/Tk, OpenSSL y certificados X.509 con SHA256

Llevo usando Tkabber como cliente XMPP desde principios de 2004, cuando la red XMPP aún no se había estandarizado en el IETF y se llamaba Jabber. Llegué a él tras probar algunos otros y no he cambiado desde entonces. A pesar de su estética arcaica y de estar escrito en un lenguaje anticuado llamado Tcl/Tk. Sin embargo no es un cliente que recomiende. Se adapta bien a mis necesidades, pero mis necesidades son un poco especiales.

Todo fue bien hasta el 6 de marzo de 2015. Ese día intenté conectarme a XMPP como siempre y me saltó el siguiente mensaje de error:

tkabber_1.png

Leer más…

Cómo extraer los certificados raíz de las autoridades de certificación de un Mozilla Firefox

¿De dónde sacamos un listado de certificados raíz de autoridades de certificación X.509?. A veces necesitamos obtener esos certificados para, por ejemplo, instalarlos en un entorno empotrado que no los gestiona automáticamente.

Podemos sacar esos certificados raíz de un Linux actualizado pero hay una opción interesante: Mozilla ya se preocupa de mantener esos certificados actualizados y nuestra instalación de Firefox puede contener certificados adicionales que nos interesan, como certificados autofirmados de confianza o certificados corporativos privados. Las entidades de certificación presentes en el Firefox que usamos habitualmente pueden ser más útiles que los del propio sistema operativo.

En mi artículo anterior, Python 2.7.9 y Python 3.4.3 pasan a verificar las conexiones HTTPS por defecto, no comenté un caso real adicional: entorno empotrado desarrollado a medida que quiere comunicarse por HTTPS de forma segura.

Veamos qué hice.

En mi caso podría haber copiado los certificados reconocidos de mi sistema operativo pero mi instalación personal de Firefox es más fiable: he eliminado certificados (¿qué pinta el certificado raíz de la oficina postal de Hong Kong o de una entidad turca en mi navegador personal?) y he añadido certificados que me parecen importantes o que, sencillamente, necesito yo personalmente.

Leer más…

Python 2.7.9 y Python 3.4.3 pasan a verificar las conexiones HTTPS por defecto

Python tiene una política de actualizaciones muy clara: Las actualizaciones menores (en la versión 2.7.9, el "9") de las versiones activas de Python solucionan exclusivamente bugs de estabilidad y seguridad. Las actualizaciones deberían ser indoloras en el sentido de que ningún programa Python que funcionase antes debería fallar tras actualizar. Es decir se prohíben los cambios de comportamiento.

Pero a veces hay que saltarse las normas. Python 3 es el futuro del lenguaje y la rama 2 se considera cerrada, así que la versión 2.7 de Python va a ser mantenida hasta, al menos, 2020. La idea es meter presión para migrar a Python 3, pero permitiendo una migración tranquila y sosegada. 2020... Eso son muchos años simplemente parcheando los bugs mínimos para que Python 2.7 siga funcionando. En particular los protocolos de seguridad de red van variando y las valoraciones que se tenían en cuenta en 2010 (el año en que se publicó Python 2.7) no son válidas en 2015, ya no digamos 2020.

Por eso se definió, en marzo de 2014, el PEP 466: Network Security Enhancements for Python 2.7.x. En dicho PEP (Python Enhancement Proposal) se propone portar las mejoras de seguridad de red de Python 3.4 a la rama 2.7. Cosas como SNI, validación de certificados X.509, etc.

La sección Backwards compatibility considerations del PEP empieza con un párrafo interesante:

As in the Python 3 series, the backported ssl.create_default_context() API is granted a backwards compatibility exemption that permits the protocol, options, cipher and other settings of the created SSL context to be updated in maintenance releases to use higher default security settings. This allows them to appropriately balance compatibility and security at the time of the maintenance release, rather than at the time of the original feature release.

Leer más…