Hola mundo,

Finalmente y después de tanta espera, Let’s Encrypt ha entrado en fase de Public Beta, es decir ya cualquiera que desee probarlo puede entrar y generar sus certificados.

Para quienes no conozcan que es Let’s Encrypt, es una nueva Autoridad de Certificación, abierta y gratis. Es administrado por la Internet Security Research Group (ISRG), y es patrocinado por las mas importantes Fundaciones de Internet, tales como la EFF, Mozilla, y también por grandes empresas como Cisco, Facebook, Ident Trust, Internet Society, entre otros.

La idea de Let’s Encrypt es que cualquiera tiene derecho de poder ofrecer seguridad a través de la encriptación (HTTPS) en sus sitios web, antes de la llegada de Let’s Encrypt, uno tenía que pagar a una Autoridad de certificación tales como Symantec, GoDaddy, DigiCert, Verizon, etc… cierta cantidad desde unos cientos y hasta los miles de USD dependiendo el nivel de certificación deseada.

Pero para la mayoría de usuarios un certificado de validación de nombre de dominio es mas que suficiente y esto es lo que ofrece Let’s Encrypt, que tus usuarios tengan plena seguridad de que los datos que viajan desde su máquina a tu servidor/sitio no puede ser leída por nadie mas, pues el certificado sólo puede provenir del servidor donde reside el dominio auténtico y no de un suplantador (ó de una agencia de espionaje cofcofNSAcofcof)

 

Instalación

Primero que nada, todo lo siguiente debes correrlo en el servidor en donde residen los dominios para los que quieres generar los certificados, pues Let’s Encrypt debe poder escribir ciertos archivos en su WebRoot (a.k.a. DocumentRoot) para poder validar efectivamente que eres el dueño del dominio y tienes control sobre él.

Paso 1, Debes tener Git instalado y clonar el depósito:

user@webserver:~$ git clone https://github.com/letsencrypt/letsencrypt.git

Paso 2, Córrelo una vez para que pueda instalar todas sus dependencias (la mayoría bibliotecas en python), por tanto debes tener privilegios de administrador ya sea acceso a root directo o por medio de sudo, posteriormente generará una nueva llave privada y con el email que le especifiques creará una nueva cuenta para ti en los servidores de Let’s Encrypt, todo esto es un proceso automático. NOTA: De momento no le especifiques ningún dominio.


root@webserver:~$ cd letsencrypt
root@webserver:~/letsencrypt$ ./letsencrypt-auto --email tudireccion@deemail.com --agree-tos

Paso 3, Let’s Encrypt tiene plugins para poder leer archivos de configuración de Apache, saber que dominios tienes, donde están y modificar estas configuraciones para añadir los certificados de manera automágica, pero esto es un grave problema para los que tenemos servidores web con algún tipo de panel de control que genera sus propias configuraciones y sobreescribirían los cambios hechos por Let’s Encrypt, otra opción es que dejes a Let’s encrypt levantar un web server standlone, pero esto implica que debes detener tu web server principal.

En mi caso estos 2 primeros métodos no son una opción, así que me fuí por la tercera, puedes darle a Let’s Encrypt el path al DocumentRoot de tu dominio para que realice la validación con unos archivos especiales que debe guardar allí. Aclarado esto, digamos que tienes tus dominios en /var/www/$dominio, por ejemplo /var/www/fulanito.com, correríamos lo siguiente:


root@webserver:~/letsencrypt$ ./letsencrypt-auto certonly --webroot -w /var/www/fulanito.com/ -d fulanito.com

¡Y listo!, generará automáticamente tu CSR (Certificate Signing Request), lo firmará, lo enviará a los servidores de Let’s Encrypt, estos validará que existan los archivos en fulanito.com/.well-known/acme-challenge/ y de ser así devolverá el certificado firmado. Se generarán 4 archivos en /etc/letsencrypt/live/fulanito.com/


root@webserver:~# ls /etc/letsencrypt/live/fulanito.com/
cert.pem  chain.pem  fullchain.pem  privkey.pem

Los cuales contienen:

  • cert.pem – contiene el certificado firmado
  • chain.pem – certificado “intermedio”
  • fullchain.pem – contiene ambos cert.pem y chain.pem, para los servicios que soporten este formato
  • privkey.pem – la llave privada del certificado

Configurar el webserver (Apache y NginX)

Esto sería lo único a añadir en tu virtualhost de Apache, (si antes no usabas SSL, asegúrate de activar los módulos y habilitar el virtualhost de SSL que contiene las entradas para el puerto 443)


<VirtualHost ww.xx.yy.zz:443>
        ...
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/fulanito.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/fulanito.com/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/fulanito.com/chain.pem
        ...
</VirtualHost>

Y para NginX, algo como lo siguiente:


server {
    listen      ww.xx.yy.zz:443;
    server_name fulanito.com www.fulanito.com;
    ssl         on;
    ssl_certificate      /etc/letsencrypt/live/fulanito.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/fulanito.com/privkey.pem;
    ...

Y eso es todo, espero este artículo les sirva en algo y les ayude a brindar mas seguridad a sus sitios web. Como ven es bastante fácil utilizar Let’s Encrypt.

Sólo resta mencionar que quienes tienen su hosting/cloud server/dedicado con ideaslabs.com pueden solicitar su certificado gratis y se les será configurado casi al instante sin costo alguno ;)

Saludos!

El martes 10 de Noviembre, 2009. Google anunció “su” lenguaje de programación Go, hecho por, en palabras de Miguel de Icaza: “The Most brilliant programmer alive” Rob Pike… :-|

Empezando por la sintaxis, no me gustó. Es como una horrible mezcla de C++ con JS y algo de Java.

Seguido por ¿otro lenguaje de programación?, no entiendo el porqué, en el video se dice que porque necesitamos un lenguaje en que se desarrolle más rápido, que compile rápido, que corra rápido. De querer sólo esto, se podría haber optimizado el bytecode de Python y ya ¿no?, pero en su lugar juntas a Robert Griesemer, Rob Pike y Ken Thompson y escribes todo un nuevo lenguaje, con una nueva sintaxis, nuevos paradigmas y nuevos procesos.

No sé, se me hace muy “windowsero”: ¿dns?, no! hagamos WINS. ¿nfs, ftp, etc? no! hagamos SMB.

Hacer algo como Google Wave, innovar la forma de comunicarnos y liberar el framework wow!, pero… ¿un nuevo lenguaje? come on google!

Esta vez sólo veo una táctica de posicionamiento monopólico, de verdad requerían de un lenguaje moderno, veloz y… ¿nuevo? que tal: ¿ Gnome’s Vala?, ¿qué tiene de diferente Google Go de Gnome’s Vala?

Why Vala?

Many developers want to write GNOME applications and libraries in high-level programming languages but can’t or don’t want to use C# or Java for various reasons, so they are stuck with C without syntax support for the GObject type system. The Vala compiler allows developers to write complex object-oriented code rapidly while maintaining a standard C API and ABI and keeping the memory requirements low

Google no pudo googlear y buscar en donde apoyar al software libre. Y la prueba está en el nombre. ¿Qué tal el Issue 9 en el bug tracker de Google Go?:

http://code.google.com/p/go/issues/detail?id=9

I have been working on a programming language, also called Go, for the last 10 years. There have
been papers published on this and I have a book.

I would appreciate it if google changed the name of this language; as I do not want to have to
change my language!

Como dice Shermie: “¿Cómo hace el bisteck? tssssssssssk”

Puedes presionar en el “issue 9” para que cambie el nombre o bien en la petición online: http://www.petitiononline.com/gglgoi9/

Shame on you Google!

Apenas hace 5 años Google cambió al mundo. Al mundo del Internet al menos, al ciberespacio.

Apenas hace 5 años presumía con total emoción mi super nueva cuenta recién salidita de GMail, el nuevo servicio de e-mail con el que Google cambió al mundo, antes de GMail nadie daba mas de 10 Megabytes, no habían servicios de clud-computing, ni VPS’s, ni ningún servicio basado en grandes “almacenajes”, los servicios de hospedaje eran de 100,200,500 MB, unos cuantos se aventuraban a ofrecer un majestuoso Gigabyte.

No había Twitter ni facebook, las redes sociales apenas maduraban, lo mas conocido era orkut y fue adquirido por Google.

Google demostró como podía tomar una tecnología, un producto y mejorarlo miles de veces revolucionándolo e imponiendo una tendencia, una pauta, una moda.

Pues 5 años después el mundo ha cambiado mucho, la cacareada “web 2.0” está en pleno auge, cada vez mas personas están conectadas ya no sólo por computadoras, si no PDA’s, celulares, smartphones, netbooks, etc. Y Google, lo ha vuelto a hacer. En mayo de este año, se anunció un producto al mundo: Google Wave, ó mejor escrito: \/\/ave

Muy pocos sabían al respecto, algunos mas nos enteramos porque era en su momento un “trend topic” en el Twitter, una cosa llevó a otra y terminé viendo el famoso video de 1 hora y 20 minutos de la presentación de Google Wave, y dije: “NO MAMES! pinche Google es un monstruo” sabía que había llegado al mundo otro movimiento, otra moda, otra gran OLA.

En resumen Google Wave es:

  • Un nuevo producto de Google, sin entrar en “fanboyismos“, innovación y calidad garantizada.
  • USA XMPP. Si conoces que es XMPP desde aquí ya sabes que es algo GRANDE.
  • Un nuevo esquema de comunicación, es un nuevo paradigma! “Rich Content” en toda su expresión, documentos con widgets integrados que manejan imágenes, video, documentos, archivos, etc. (¡No mas “attachments“!)
  • Verdadero User Friendly. Galerías listas, videos “embebidos” sin una línea de código, upload de archivos vía “drag & drop“.
  • Tiempo Real. Todo, absolutamente todo lo que haces en un documento de google wave ó simplemente conocido como un “wave” se realiza en tiempo real, es decir, los cambios que haces en un Wave, se mandan al servidor en tiempo real, letra por letra, click por click, y consecuentemente, todos aquellos con los que compartas el Wave ven estos cambios… EN TIEMPO REAL.
  • Colaborativo.  En realidad mas que una feature, es una consecuencia de la tecnología anteriormente descrita “en tiempo real” significa que mientras tu escribes algo otro mas puede avanzar con el siguiente párrafo y otro mas puede corregirte tus faltas horrográficas, y otro mas añadir los diagramas necesarios, etc, etc. Colaborativo.
  • Privado y público. Puedes compartir un wave con quien quieras. la tarea con tus compañeros de clase, el proyecto con tus colaboradores, las fotos con tu familia, etc. ?, y mas interesante aún, puedes compartir un Wave con todo el mundo. Esta característica es la que ha dado a pensar a muchos que en un futuro no muy lejano Google Wave pueda mandar a la banca a las redes sociales existentes (puedes mandar tu estado a todos tus contactos (twitter), o todas las fotos (flickr), o Publicar un ensayo/libro/comic, etc, etc..
  • Extensible, hay programas/extensiones/”bots” que agregan mas funcionalidades a Wave, como editores de diagramas en tiempo real, traductores en tiempo real, etc. Y unos mas que te permiten conectarte a otros servicios, por ejemplo publicar desde wave un post en tu blog, ó mandar un Tweet a tu Twitter ó publicar una foto en Flickr desde Wave. Por lo que podrás inevitablemente hacer todo desde un sólo lugar, tu Wave.

Hasta aquí, para alguien no técnico (o pseudo blogstar o alguien que gane lo mismo que un programador [chiste local :-P] ) o poco docto en el tema Google Wave puede representar “otra red social diferente”, “el twitter de google”, “una herramientas colaborativa fashion/el groupware de google”, “google docs 2.0”, “google apps 2.0”, “otra buzzword”, etc, etc.

Pero si ves el segundo punto, sí el recalcado, Google Wave vá más allá.

XMPP ó “Extensible Messaging and Presence Protocol” (Protocolo extensible de mensajería y comunicación de presencia) es un protocolo ideado para el intercambio de datos en XML y mas importante es un protocolo abierto, originalmente ideado para Mensajería instantánea, y seguramente lo has usado sin saber, XMPP es el protocolo usado para la mensajería Jabber, y Jabber a su vez es la base de Google Talk, luego entonces Google Talk es un sistema con protocolo XMPP.

Pero XMPP se siguió desarrollando para tener mas características (envío de archivos por ejemplo) y desde el principio se diseñó para ser descentralizado. ¿Y que coño significa eso? Que no existe un servidor “principal” o “central” de XMPP, como no lo hay de Jabber. Y mejor aún, pueden haber infinidad de servidores XMPP, y todos pueden convivir con todos. Cada servidor opera sobre cierto dominio, y los usuarios de dicho servidor se denotan con el formato de e-mail: usuario@servidor.com.

Es por esto, que un usuario con cuenta @jabber.org, por ejemplo la mía: maop@jabber.org puede mandarle mensajes a malfonso@gmail.com y como yo tengo un servidor jabber propio pues maop@jabber.org y malfonso@gmail.com también le puede mandar mensajes a me@maop.tk, y se pueden tener en sus “contact list” y etc, etc. (¿notaron el “yo tengo un servidor jabber propio”?)

Así es, cualquiera puede tener un servidor XMPP, y después de tanta vuelta y explicación: ¡ASÍ ES! ¡cualquiera podrá tener su servidor de WAVE!

Y como dijera cantinflas “¡Ahí está el detalle!”

La verdadera razón por la que Google Wave revolucionará nuevamente nuestras vidas es porque: detrás de este producto hay un proyecto OpenSource (waveprotocol.org) hecho sobre estándares abiertos (XMPP). Y cualquiera puede instalar este sistema en sus servidores propios, una universidad, una empresa, una institución pública, etc, etc. Tal y como en la actualidad cualquiera puede instalar un servidor de correo.

Y así vemos todo el panorama, Google Wave representa una nueva forma de comunicación, mejor que el e-mail, mejor que la mensajería instantánea, mejor que las herramientas colaborativas actuales, mejor que algunas de las redes sociales actuales (aunque en lo personal creo que en este punto le falta mucho aún), Y a aquellos que no sean factibles de reemplazar, contará con conectores hacia estos servicios, dándote un punto central desde donde controlar todos tus servicios.

Así que trata de imaginarte en 5 años,

  • Enviando la tarea al wave de tu profesor
  • Codificando la nueva página de tu cliente mientras éste ve en tiempo real cómo lo haces, ó probando el producto y enviándote bugs.
  • Enseñándole a tus alumnos en tiempo real hasta sus terminales (en sitio o no ;) ) subiendo el material de estudio, realizando exámenes, recibiendo tareas; mientras tú, tu alumno, tu director y los padres de familia, ven en tiempo real todo esto.
  • Discutiendo sobre seres míticos en un foro de mitología hecho con Wave, viendo en tiempo real las opiniones de todos los participantes de todo el mundo.
  • Dándole soporte técnico a tus usuarios, dándoles comandos y manuales en tiempo real.
  • Presentándo tus slides en una reunión vía Wave, todos viendo y escuchando lo mismo, con asistentes locales y remotos.
  • Viendo un video de una película o una conferencia con amigos/compañeros online y comentándolo en tiempo real.

Finalmente, el usuario es quien decide que uso darle.

Pero de una vez, por favor, por favor por lo que mas amen NO SUBAN PENDEJADAS DE CADENITAS, NI PUBLICIDAD, NI SUS FOTOS DE EMOS. =)

Bienvenido al futuro.

Mi primera vez con Google Wave

Mi primera vez con Google Wave

Disclaimer: Este post fue escrito para personas no/medio técnicas, que no conocían que es wave, y para aclarar ciertos puntos de porqué es tán importante y quitar algo de FUD que he leído en algunos blogs tipo “mis primeras impresiones”. Sé que falta mucho para que Wave salga al público, sé que waveprotocol.org no tiene interfaz web aún, sé que los gadgets/robots aún están en estado de prueba.

P.D. Lo siento aún no tengo invitaciones, y parece que ya no van a dar.

motorolaA1200 cherokeeWhy should someone want to run a web server on his cellphone? Of course because he can =), just for the fun!

So, how to compile cherokee for Motorola A1200i:

First we need to build a “toolchain” a development environment that can compile binaries for the CPU architecture of the phone, in this case: ARM Linux

Such toolchain can be download from here: http://lsb.blogdns.com/ezx-crosstool

Pretty easy, just run ./build.sh you need build-essential (gcc and company), flex and bison, go for a cup of cofee and let the automagic work, this will compile a GCC compatible with your phone among some other utilities.

Now fetch last release of cherokee: http://www.cherokee-project.com/ , unpack and prepare yourself to compile it.

I based in this document: http://www.cherokee-project.com/doc/cookbook_embedding_cherokee.html after a few of  “try and fail” tests i end with this configuration:


export AR=/home/maop/ezx-crosstool-0.6/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux/bin/arm-linux-ar
export LD=/home/maop/ezx-crosstool-0.6/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux/bin/arm-linux-ld
export CC=/home/maop/ezx-crosstool-0.6/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux/bin/arm-linux-gcc
ac_cv_func_shm_open=no ac_cv_lib_rt_shm_open=no ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes \
 ./configure --host=arm-linux--prefix=/mmc/mmca1/cherokee --enable-static --enable-shared=no --enable-static-module=all \
 --disable-tls --enable-beta --enable-trace --enable-nls=no --disable-largefile --disable-admin --disable-epoll --disable-ipv6 \
CC=/home/maop/ezx-crosstool-0.6/gcc-arm-iwmmxt/gcc-3.3.6-glibc-2.3.2/arm-linux/bin/arm-linux-gcc

As you can see i set –prefix to “/mmc/mmca1/cherokee” this mean that we’ll “install” cherokee on our memory stick this way we avoid to hack motorola’s linux system. Also this mean that you have to create that path on your development machine, try mkdir -p /mmc/mmca1/cherokee and chown youruser:yourgroup -R /mmc

Now type “make” so compile of cherokee begins.

After make is done, type “make install” and all files will copy to /mmc/mmca1/cherokee

Now just transfer the “cherokee” directory to your SD card with your favorite transfer method (bluetooth, ftp, ssh, smb, usb mount, etc), then open eKonsole (you have shell in your phone right?) or telnet or sshd into it, change to the right directory: cd /mmc/mmca1/cherokee and simply run cherokee by typing: sbin/cherokee

And that’s all, of course you have to configure your phone to “USB Network” in your “USB Mode” settings, then open a browser in your machine, and type the IP of the phone et voilá! cherokee serving web pages right from your cell phone.

Dude, i remember the times of my night sessions with my 80386 coding in GW-Basic. Now our cellphones have more power than those old machines.

You can see cherokee in action in this video (if you can’t see it come to my site and see it =):

Cherokee running on a Motorola A1200i


Next post: “how to get your unix powertools in your A1200” (vim, bash, sshd, strace, python, perl, ruby, php, vmstat, nano, etc)

Saludos!