elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Temas
Páginas: 1 2 [3] 4 5 6 7 8 9
21  Foros Generales / Sugerencias y dudas sobre el Foro / Revista elhacker.net en: 13 Enero 2018, 19:33 pm
Hola compañeros ya es tiempo sin escribir ni nada, pero siempre os leo en las sombras  >:D

No sé si se habrá preguntado antes pero estoy aquí para proponer la idea de lanzar una revista ¿mensual? donde usuarios del foro compartan sus conocimientos en distintas secciones.

La revista se organizaría en secciones, el contenido de las mismas tendrá que hacer referencia al título de los subforos de este foro. Así quedaría una sección para Seguridad, Bugs/Exploits, Análisis de Malware, Programación (todos los lenguajes), Win/Linux, Crypto etc

Los usuarios no tendrían porque ser parte del staff, aquellos usuarios que no formen parte podrían aplicar para escribir un artículo. Se acordarían unas pautas de redacción y presentación como: fuente y tamaño, márgenes y demás.

No me enrollo más porque no se si gustará, tengo más ideas para este proyecto pero primero he de saber si la gente será capaz de aportar.

Make elhacker great again.

Saludos !
22  Seguridad Informática / Abril negro / [Abril Negro] S.P.O.K (Simple Production Of Keys) en: 20 Abril 2017, 21:21 pm
S.P.O.K

Versión Actual: v1.0.4

Simple Production Of Keys es una herramienta de cracking de contraseñas la cual implementa un algoritmo altamente eficiente para la generación de diccionarios de palabras formadas a partir de un alfabeto personalizable. La tool ha sido codeada en C++11 en GNU/Linux Fedora 24 x86_64, pero es multiplataforma.

ANTES DE NADA: Recomiendo leer el paper de mi investigación sobre este ámbito, ya que podreís encontrar ideas muy positivas y vanguardistas a parte de ver las entrañas de mi herramienta como son: las definiciones matemáticas, implementación y diseño, benchmark, coste operacional, escenarios de cracking, ahorro y comparativas con métodos tradicionales. Os invito a meteros en mi cabeza por unos minutos ;) (El paper está en Inglés y consta de 16 páginas).

Una vez invitados a leer el paper, si aún no lo habeís leído, el método de S.P.O.K ahorra un 6% comparado con el método tradicional de generación de palabras de longitud i,j generándo todas las palabras entre i y j usando sólo las de longitud j. En la sección de ideas futuras un metodo del 94% de ahorro es comentado. La versión Release en este mismo momento genera 2.5 mil millones de palabras por minuto en mi pc al escribir en fichero.

Ahora veremos que funcionalidades aporta la herramienta:

- Modo Verbose para imprimir el total de palabras por minuto, segundo y el tamaño escrito sobre el tamaño final del diccionario (ver fórmulas matemáticas en el paper).

- Modo de generación de palabras escritas a un diccionario. Por defecto genera todas las palabras de longitud 1 hasta 5 (utilizando sólo las palabras de longitud 5 (ver paper)). Si no se especifica se imprimen las words por pantalla (para uso de pipe por ejemplo).

- Modo customizable de alfabeto. Por defecto es abcdefghijklmnopqrstuvwxyz.

- Modo customizable de intervalo de generación de palabras. Permite especificar la longitud i,j de las palabras a generar utilizando sólo las palabras de máxima longitud.

- Modo de hasheado de palabras escritas a un diccionario. Si se especifica este parámetro y el modo verbose esta presente, se utilizará la fórmula matemática correspondiente para calcular el tamaño del diccionario. La herramienta permite hashear cada palabra con 1, 2 o 3 primitivas siendo estas: MD5, SHA-1 y SHA-256.

- Modo de guardado y carga de sesiones. Esta joyita os permite cerrar la herramienta durante su ejecucción sin preocupaciones guardando todo el input especificado y la última palabra generada. Al volverla abrir se retomará el progreso anterior. Tampoco generará palabras repetidas que ya hayan sido guardadas (ver paper).

Si después de emplear la herramienta o leer el paper quereís colaborar escribid aquí. También para reportar bugs: kub0x@elhacker.net

Cualquier duda sobre uso -> leer el paper ya que tiene su propia sección de uso aunque la misma herramienta incluye un apartado de help al no introducir ningún parametro.

Link al PAPER -> https://github.com/FreeJaus/gea-PRISM/blob/master/Research/spok_v.1.0.3.pdf (falta upgradear a 1.0.4, coming soon)
Link al SOURCE -> https://github.com/FreeJaus/gea-PRISM/tree/master/Programming/SPOK
Link descarga PROYECTO+SOURCES+EJECUTABLE GNU/LINUX -> https://github.com/FreeJaus/gea-PRISM/releases/tag/v.1.0.4

USUARIOS DE WINDOWS: Lo he compilado satisfactoriamente en 32bit pero al ser incapaz de encontrar las librerías y .lib de OpenSSL para x64, la versión para Windows tendrá que esperar.

Linkar con librerías: libssl, libcrypto, libpthread (En Linux). En Windows con las de OpenSSL bastaría.

Saludos, disfrutadlo y sed buenos ;)
23  Informática / Hardware / CPU no soportado después de update firmware UEFI en: 13 Marzo 2017, 11:19 am
Buenas,

el título lo dice todo. Va a hacer tres años desde que compre los componentes para mi PC, y hoy, pensándolo bien decidí instalar la update del firwmare para UEFI del fabricante. Para sorpresa al arrancar el PC tras la update me dice que "CPU is not in CPU supported list".

Por lo tanto busqué si mi CPU es soportada por el fabricante y por sorpresa, en la página oficial no es listada, pero entonces, ¿por qué con la versión del firmware por defecto es soportada y con la nueva actualización no?.

Motherboard: Asrock Pro 970 r2.0 versión firmware UEFI 2.80 (tras actualizar, esta versión es la que da problemas en la CPU). La versión inicial del firwmare era 1.80 creo recordar y con la misma funcionaba de maravilla.
CPU: AMD FX-9370.

Probraré a flashear con la versión 2.60 ya que la 1.80 no la encuentro en la página oficial. Me gustaría al menos saber por que una version mas moderna del firmware no soporta mi CPU y una más antigua si lo hace.

EDIT: Ando sin suerte, probando la 2.60 sigue saliendo el mismo mensaje de que no soporta mi CPU. He creado un post en el foro técnico de Asrock para ver si alguien puede facilitarme la versión original del firmware que venía al comprar la motherboard, la versión 1.80, ya que realmente necesito hacer un rollback  :P El link al post en cuestión es: http://forum.asrock.com/forum_posts.asp?TID=4604&PID=25124&#25124

EDIT2: Bueno buscando di con este enlace a la v1.80 y flasheando el firmware he tenido suerte y todo ha vuelto a la normalidad (http://drivers.softpedia.com/get/BIOS/Asrock/ASRock-970-Pro3-R20-BIOS-180.shtml). Ahora, la cuestión sigue en pie, porque deja mi CPU no soportada al actualizar a las versiones más modernas, mi entendimiento sobre firmware y low level me dice que el código del microcontrolador de UEFI ha cambiado no pudiendo comunicarse/reconocer la CPU. Seguiré probando versiones más modernas ya que los que me conocen saben que antepongo la seguridad ante cualquier otra cosa.

Saludos!
24  Foros Generales / Foro Libre / Metamatemática, origen y filosofía matemática. en: 14 Febrero 2017, 15:36 pm
Hola compañeros, hace tiempo que no creo un post tratando mis inquietudes y me gustaría que me intentaraís ayudar:

Hace ya unos años me picó el gusano de la matemática, a partir de estudiar a fondo las ramas de la criptografía que mas interés me generan, ya que si quieres crear contenido primero has de entenderlo, cuestionarlo, trabajarlo y conectarlo con tu pensamiento. Por muchas herramientas que te den es imposible que construyas una casa el primer día.

Muchas veces al estar contemplando los teoremas y métodos matemáticos de un campo concreto me sorprendo a mi mismo debatiendo internamente sobre el origen de los mismos y el por que de su existencia, a esto lo conocemos como Metamatemática, donde se discuten dichos axiomas y su aplicación en el mundo real, científico pero también ideal. Es la clave que a la mayoría de los estudiantes o amateurs les falta por analizar, ya que es donde más se afianza el conocimiento, pero bueno el tema de enseñarnos como a máquinas (aprendete esto y lo otro) iría en otro post y tampoco me interesa debatir aquí sobre el criterio académico-social (total todo seguirá igual y nosotros cada vez más viejos ;) ).

Últimamente leo bastante material académico para afianzar mis bases y poder progresar sin tener que estar un mes con un problema, pero me gustaría también incluir la Metamatemática en mis lecturas y quisiera preguntaros si conoceís autores tanto contemporáneos y antiguos que en sus obras discuta el por que de los métodos y su conexión con la naturaleza y la "realidad". Al ser posible incluir la obra que más os llame la atención. Conozco varias decenas de autores pero me interesaría leer vuestras recomendaciones.

Gracias por vuestra atención y un saludo!
25  Sistemas Operativos / GNU/Linux / Seguridad en GNU/Linux en: 6 Noviembre 2016, 17:57 pm
Buenas tardes compañeros,

llevo cosa de un año usando Fedora como OS principal, aunque tuve experiencias previas con otras distros, esta es la que más se ajusta a mis necesidades (por el momento).

Me gustaría saber que suites de seguridad u aplicaciones son las más utilizadas para esta temática (HIPS, IDS, AVs, Firewalls, anti-rootkits etc).

En Fedora 24 ahora mismo cuento con SELinux que por lo que veo es como un HIPS ya que monitorea ciertos recursos del sistema y previene en caso de mal funcionamiento o de compromiso, vi que también cumple la opción de Firewall.
Para rootkits cuento con RootkitHunter y chkrootkit. No tengo AV, no creo que sea necesario en Linux algo así al menos en mi caso ya que no descargo nada raro y si me explotan el navegador u otro servicio el AV no serviría de nada.

En Windows solía utilizar la suite de COMODO ya que tenía AV+FW+HIPS+Sandbox+CloudScan.

Saludos!
26  Seguridad Informática / Criptografía / [Taller] Chinese Remainder Theorem en: 14 Mayo 2016, 12:28 pm
Chinese Remainder Theorem

Buenas.

Hoy os traigo uno de los pilares matemáticos más impresionantes descubierto múltiples veces en la historia. Se le atribuye al gran Sun Tzu, es por eso que lo suelen nombrar Chinese Remainder Theorem (Teorema del resto chino), aunque otras culturas lo reinventaran con otro enunciado diferente ( para los amantes de la historia revisad: http://www.math.harvard.edu/~knill/crt/lib/Kangsheng.pdf )

¿De que trata este teorema? El siguiente planteamiento del mismo no difiere del planteamiento ancestral descrito por aquellas intrigantes culturas:

¿Cómo podemos hallar el número X que al dividir por 3 nos deja resto 2, al dividir por 5 nos deja resto 3 y al dividir por 7 nos deja resto 2? Simple, ¿verdad?. Es como si hubiera repartido una serie de objetos entre varias personas y hubiera olvidado la cantidad de objetos y solo me acuerdo de a cuantas personas he repartido y el resto de dichas operaciones.

El gran Grauss formalizó los teoremas de Euler, Lagrange, Fermat y Legendre entre tantos, formalizando de esta forma la aritmética modular en su obra maestra Disquisitiones Arithmeticae (si teneís una biblioteca en la uni corred a leerlo), y cómo no, no pudo dejar pasar la ocasión de plantear este mismo teorema, en su caso con calendarios y ciclos lunares.

Explicado el planteamiento, empecemos a adentrarnos en las profundidades matemáticas (ojalá algún día pongan LateX en este foro ... )

ATENCIÓN: Tanto la explicación algebraíca general como el ejemplo posterior son fruto de mi conocimiento y práctica, pudiendo haber mínimas diferencias con el proceso estándar/general.

Primero definamos lo que es una relación de congruencia:

3\equiv 7\pmod 4 lo expresamos como "3 es congruente a 7 módulo 4" porque "(4*1)+3=7" y porque "4 divide a 7-3".
3\equiv 11\pmod 4 "4 divide a 11-3" además "4*2 + 3 = 11"

De forma general tenemos:

b\equiv a\pmod n , su expresión en forma de ecuación sería "a = n*k + b", además "n | a-b" es decir "a-b es el múltiplo k de n". Si "a" es divisible entre "n" tendríamos 0\equiv a\pmod n

Si no entendiste la parte anterior, tranquilo, revisa este tema https://en.wikipedia.org/wiki/Modular_arithmetic y vuelve cuando quieras.

Por lo tanto el CRT se basa en resolver el siguiente sistema de congruencias:

Dada una coleción de pares (ai, ni) tal que ai < ni donde ai es el residuo y ni el módulo de cada congruencia,

hallar x tal que:

x\equiv a_{1}\pmod n_1
x\equiv a_{2}\pmod n_2
x\equiv a_{3}\pmod n_3
...
x\equiv a_i\pmod n_i

Es decir, x dejará residuo a_{1} al dividir por n_1, residuo  a_2 al dividir por n_2 etc.

Para que este sistema tenga solución, los módulos desde n_1 hasta n_i deben de ser coprimos es decir gcd(n1...ni)=1. En cristiano, ninguno de los módulos puede estar compuesto por factores primos de otro módulo.

Si la coprimalidad se cumple, entonces expresaremos el módulo total como:

N = n_1*n_2*n_3*...*n_i -> lcm(n_1...n_i)

y aplicamos la siguiente fórmula:

q = \sum_{k=0}^i a_k*N_k*[N_k^{-1}]_{n_k} Donde N_k= \frac{N}{n_k} y [N_k^{-1}]_{n_k} denota la multiplicativa modular inversa, 1\equiv N_k*t\pmod n_k

Si lo reescribimos tenemos:

q = \sum_{k=0}^i a_k*N_k*t_k

Una vez calculadas y almacenadas en "q" las sucesivas iteraciones, obtenemos el residuo de nuestro nuevo sistema de la siguiente forma:

u\equiv q\pmod N por lo tanto nuestra solucion al sistema final quedaría:

 x = N*k + u

Ejemplo:
x\equiv 2\pmod 3
x\equiv 3\pmod 5
x\equiv 2\pmod 7

Primero probamos que los módulos son coprimos entre sí. Para ello comprobamos que gcd(3,5)=1 gcd(3,7)=1 gcd(5,7)=1.
Ahora calculamos el módulo total o variable multiplicativa del módulo:

N = 3*5*7 = 105

y aplicamos la fórmula arriba descrita paso por paso:

q = \sum_{k=1}^i a_k*N_k*[N_k^{-1}]_{n_k}

Empezamos por k=1, por lo tanto tenemos:

a_1 = 2<br />n_1 = 3<br />N_1= \frac{N}{n_1} = \frac{105}{ 3} = 35
[N_1^{-1}]_{n_1} => para ello calculamos "t1" mediante la multiplicativa modular inversa de N1 en n1, 1\equiv 35*t_k\pmod 3, a través de euler t_1\equiv 35^{\phi(3)-1}\pmod 3 por lo tanto t1=2. Si hacemos 1=35*2 (mod 3) se satisface la relación.

Ahora multiplicamos a1*N1*t1 y lo dejamos en q:

q = 2*35*2 = 140

Sigamos

i=1

a2 = 3
n2 = 5
N2 = N / n2 = 105 / 5 = 21
[(N2)-1]n2 -> Resolvemos t2 para hallar la mult. inv. mod. 1=21*t2 (mod 5) de la siguiente forma: t2 = 21phi(5)-1 (mod 5), que equivale a t2 = 213 (mod 5), por lo tanto t2=1.

y sumamos en q:

q = q + a2*N2*t2 = q + 63 = 140 + 63 = 203

Última iteración

i = 2

a3 = 2
n3 = 7
N3 = N / n3 = 105 / 7 = 15
[(N3)-1]n3 -> Resolvemos t3 para hallar la mult. inv. mod. 1=15*t3 (mod 7) de la siguiente forma: t3 = 15phi(7)-1 (mod 7), que equivale a t3 = 155 (mod 7), por lo tanto t3=1.

y sumamos en q:

q = q + a3*N3*t3 = q + 30 = 203 + 30 = 233

Ahora falta el último paso para obtener la solución al sistema inicial:

Para ello computamos:

u = q (mod N)

u = 233 (mod 105)

u = 23

y la solución al sistema inicial sería:

x = u (mod N)

x = 23 (mod 105)

Para comprobar que la solución es fidedigna sustituimos x por 23 en el sistema inicial:

2 = 23 (mod 3)
3 = 23 (mod 5)
2 = 23 (mod 7)

Y como vemos se satisfacen las congruencias en su totalidad. Otras soluciones para X serían x = 105*k + 23 -> {23, 128, 233...}

Cosas a tener en cuenta:

En la vida real las multiplicativas modulares inversas se computan mediante el Extended Euclidean y no cómo yo he hecho en mi ejemplo, ya que necesitas la factorización de cada módulo mediante el procedimiento de Euler.

CONCEPTOS A TENER EN CUENTA:

https://en.wikipedia.org/wiki/Congruence_relation
https://en.wikipedia.org/wiki/Modular_multiplicative_inverse
https://en.wikipedia.org/wiki/Modulo_operation
https://en.wikipedia.org/wiki/Euler's_totient_function
https://en.wikipedia.org/wiki/Chinese_remainder_theorem
https://en.wikipedia.org/wiki/Pairwise_coprime
https://en.wikipedia.org/wiki/Disquisitiones_Arithmeticae
https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm#Computing_multiplicative_inverses_in_modular_structures

He implementado una función en C# la cual dadas dos listas que representan un sistema de congruencias, una de residuos y otra de módulos, devuelve una lista donde el primer elemento es X y el segundo elemento es N = n1*n2*..*ni. La multiplicativa inversa modular se computa de forma iterativa sin el Extended Euclidean, ya que "ai*ti" dejarán un múltiplo "ki" de "ni" pequeño.



Código
  1. private static BigInteger MultInv(BigInteger a, BigInteger b)
  2.        {
  3.            BigInteger inv = BigInteger.Zero, rem = BigInteger.Zero;
  4.            BigInteger i = BigInteger.One;
  5.            bool found = false;
  6.            while (!found)
  7.            {
  8.                inv = BigInteger.DivRem(BigInteger.Add(BigInteger.Multiply(b, i), BigInteger.One), a, out rem);
  9.                if (rem == BigInteger.Zero)
  10.                    found = true;
  11.                i++;
  12.            }
  13.            return inv;
  14.        }
  15.  
  16.        private static List<BigInteger> ChineseRT(List<BigInteger> residues, List<BigInteger> modules)
  17.        {
  18.            List<BigInteger> sol = new List<BigInteger>(2);
  19.            BigInteger N = BigInteger.One, ai = BigInteger.Zero, Ni = BigInteger.Zero, res = BigInteger.Zero;
  20.            foreach (BigInteger m in modules)
  21.                N = BigInteger.Multiply(N, m);
  22.            for (int i = 0; i < modules.Count; i++)
  23.            {
  24.                ai = residues[i];
  25.                Ni = BigInteger.Divide(N,modules[i]);
  26.                res += BigInteger.Multiply(BigInteger.Multiply(ai, Ni), MultInv(Ni, modules[i]));
  27.            }
  28.            res = BigInteger.Remainder(res, N);
  29.            sol.Add(res);
  30.            sol.Add(N);
  31.            return sol;
  32.        }
  33.  
  34.        static void Main(string[] args)
  35.        {
  36.            List<BigInteger> residues = new List<BigInteger>();
  37.            List<BigInteger> modules = new List<BigInteger>();
  38.            residues.Add(2); residues.Add(3); residues.Add(2);
  39.            modules.Add(3); modules.Add(5); modules.Add(7);
  40.            List<BigInteger> sol = ChineseRT(residues, modules);
  41.        }

EDIT: Seguiré adaptándolo a LateX.

Saludos!
27  Foros Generales / Sugerencias y dudas sobre el Foro / LateX en el foro en: 14 Mayo 2016, 10:28 am
Buenas gente,

siempre ha sido tedioso escribir notación matemática en este foro, y apuesto a que no soy el único que lo sufre, seguro que muchos de vosotros sufristeís o lo seguís haciendo. No tengo constancia de si esto se ha debatido anteriormente, pero me gustaría lanzar la siguiente propuesta:

¿Podría integrarse un plugin para LateX? Así como teneís GeSHi para representar múltiples lenguajes de marcado/programación/scripting, seguro que hay un plugin para LateX en SMF que solucione el tema. Otra cosa es que sea trivial ponerlo.

Espero vuestros comentarios.

Saludos!
28  Foros Generales / Sugerencias y dudas sobre el Foro / Avatar y HTTPS en: 12 Diciembre 2015, 19:53 pm
Buenas tardes foreros,

esta consulta va hacia mis compañeros del Staff de elhacker.net pero publico aquí para que otros usuarios, si lo desean, comenten.

A media tarde he cambiado mi avatar por los dos grandes del flamenco, he subido la foto a imgur.com, donde ellos usan HTTPS y para mi sorpresa no he podido realizar dicho cambio de  avatar a través de HTTPS por lo que he tenido que especificar HTTP, probadlo por vosotros mismos https://i.imgur.com/uDpxu8H.jpg

El tema es que sale un warning en el candado de la versión HTTPS del foro lo cual nos indica que hay contenido "no seguro" concretamente contenido que viaja a través de HTTP (la imagen del avatar) y no me gusta nada ver como algo va en plano, los que me conocen saben por que.

Espero respuestas y como no, solución, HTTPS no vale de nada si hay un mixed content ;)

Saludos!
29  Programación / Bases de Datos / Case sensitive charset español en: 12 Diciembre 2015, 15:58 pm
Buenas a todos, especialmente a drvy  :rolleyes:

Tengo un campo con primary key con el charset utf8_spanish_ci y el problema es que al ser case insensitive no distingue 'A' de 'a' por lo tanto no crea entradas si la upper o la lowercase ya existen. He visto que se arregla con el collate, pero cree la DB con phpMyAdmin porque mi tiempo es oro y la DB es algo trivial.

Agradecería cualquier tipo de ayuda, básicamente quiero algo case sensitive para solventar el problema con la clave primaria.

Os dejo un extracto del code SQL:

Código
  1.  `WORD` VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL DEFAULT '',

Saludos.
30  Seguridad Informática / Seguridad / [TUTORIAL] Certificado HTTPS ¡GRATIS! en: 11 Diciembre 2015, 07:46 am
Muy buenas a todos, sé que hace tiempo que no entro al foro pero sigo leyendo todo cada día desde modo invitado.

Hoy os traigo lo mejor de lo mejor, hace algo más de una semana, LetsEncrypt, una iniciativa de la EFF (Electronic Frontier Foundation), anunció su nueva herramienta la cual promueve el uso e instalación de certificados de forma gratuita. Bueno, ya en las charlas de mi git hablé de ello, pero todavía estaban en pañales y bueno ahora está en beta.

Haré una breve introducción del porque es una gran iniciativa que realmente está orientando el control de internet hacia nosotros, los usuarios, ya que la privacidad ahora está de nuestra parte.

INTRODUCCIÓN:

HTTPS se basa en la utilización de PKI + SSL/TLS. A través de estos estándares podemos garantizar la integridad, confiabilidad y la autenticidad de la conexión pertinente, gracias a la criptografía de clave pública y a los certificados X509v3. No os quiero aburrir con tecnicismos, podeís pedirme si quereis un tutorial extendido sobre criptografía asimétrica, TLS, PKI y certificados.

Cuando uno se conecta a una Web mediante HTTPS se realiza una negociación de claves para establecer una conexión segura, uno de los pasos de esta negociación tiene que ver con el certificado. Éste sólo es válido si ha sido firmado por una entidad certificadora (CA), y estas entidades obviamente cobran por certificado emitido, y sí, son cantidad muchas veces desorbitadas.

Gracias a la iniciativa LetsEncrypt podemos obtener un certificado de manera gratuita. ¿Pero, el certificado ya será válido? Sí, al 100%, puesto que el mismo es firmado por una CA de confianza (IdenTrust CA). ¿Y no pierden dinero las otras CA (competencia)? Sí, pero dar este paso era fundamental para retomar el control sobre nuestra privacidad.

Resumiendo, lo que quiero que entendaís es que podeís proteger el tráfico de vuestras Webs personales de ataques Man-In-The-Middle (MITM) sin gastar vuestro dinero en certificados costosos que para colmo hay que pagar por cada renovación del mismo. Esto supone una gran patada al gran hermano amigos.

INSTALACIÓN

Primero, remarcar que la herramienta sólo es empleable por ahora en GNU/Linux, preveen portarla pronto a Windows, pero como bien dije todavía están en Beta.

Para los interesados estoy utilizando CentOs. Abrid vuestra terminal, situaros en el directorio que queraís, descargadla mediante el cliente de git de la siguiente forma y acto seguido corred el cliente letsencrypt-auto para que instale las dependencias auxiliares necesarias (OJO: necesitareís permisos de root):

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto

Si no podeis correr el cliente letsencrypt-auto probad a ejecutarlo de la siguiente forma:

$ ./letsencrypt-auto --debug (esto sucede con versiones de Python obsoletas/antiguas.)

USO DE LA HERRAMIENTA

Aquí os explicare el método manual, el cual consiste en generar un par de claves pública/privada además del CSR. El CSR (Certificate Signing Request) es el archivo que contiene la información de nuestra entidad, dominios a proteger, algoritmos de firma digital y nuestra clave pública, que será enviado mediante el cliente de LetsEncrypt a su entidad certificadora (CA) para que nos lo firme y nos devuelva un certificado SSL/TLS.

Existen métodos automatizados que facilitan la obtención del certificado sin tanto rodeo, interesados -> https://letsencrypt.org/howitworks/

Os aviso de antemano que encontrareís MUY POCA info del método manual, todo lo que os voy a explicar a continuación es una recopilación de mi esfuerzo y horas invertidas en este proceso.

Primero generamos nuestro par de claves pública/privada junto al CSR, todo a la vez. En este comando incluiremos la información personal del sitio así como los dominios a proteger:

openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout privkey.pem -out signreq.der -subj "/C=SP/ST=BI/O=NoLucro,S.A./CN=dominio.com" -outform der -reqexts SAN -config <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:dominio.com,DNS:www.dominio.com,DNS:subdominio.com,DNS:www.subdominio.com"))

Os explico los parámetros:

-newkey: Genera un par de claves, en este caso RSA 2048 bit. También soporta 4096 bit.
-sha256: Algoritmo empleado para la verificación de la firma digital del certificado. Recordad, SHA-1 se considerá inseguro.
-nodes: La clave privada no será cifrada mediante criptografía simétrica.
-keyout: Archivo donde se guardará la clave privada, su contenedor es del tipo .pem.
-out: Archivo donde se guardará el CSR, IMPORTANTÍSIMO que sea .der pues LetsEncrypt no soporta .pem para el CSR.
-subj: Información personal del dueño de nuestra Web (nosotros). "C" es Country (país, 2 letras, SP=España), ST (ciudad, ¿2 letras?, BI=Bilbao), O (organicación), CN (dominio de la web).
-outform der: Como ya he dicho, este comando es fundamental para convertir el CSR en formado .der para que sea reconocible por LetsEncrypt.
-reqexts: Nos permite espicificar más de un dominio para el certificado, así un mismo certificado sirve para varios dominios/subdominios.
SAN: Subject Alter Name, campo del CSR donde podemos especificar más de un dominio, como ya he dicho previamente. Importante incluir los dominios sin www y con www, además de incluir el dominio del campo "CN".

Si todo va bien obtendreís el siguiente output al ejecutar el comando:

Generating a 2048 bit RSA private key
.........................................................................................+++
....................................................+++
writing new private key to 'privkey.pem'
-----


Ahora que tenemos el CSR, necesitamos que la entidad certificadora (CA) de LetsEncrypt nos lo firme con su clave privada, bueno, realmente firma el SHA256 de nuestro certificado y lo incluye en un nuevo campo, y ese resultado es lo que conocemos por certificado x509v3 o certificado SSL/TLS.

Para ello ejecutamos el cliente de LetsEncrypt de la siguiente forma:

./letsencrypt-auto certonly --authenticator manual --email vuestro@email.com --csr signreq.der --text --debug

Bueno no os preocupeis de la cascada de datos que se muestra en pantalla. Llegará un punto en el que el cliente se detenga y os pregunte si le dais consentimiento para almacenar vuestra IP, por seguridad, aceptaís y estareís en la siguiente fase, donde tendremos que provar a LetsEncrypt que somos los dueños de los dominios pertenecientes al CSR. Obtendreís algo como:

Make sure your web server displays the following content at
http://www.dominio.com/.well-known/acme-challenge/XU61P5E-sEefZB5vjllHeQWRpkDs2G_AvlxitI6hOIQ before continuing:

XU61P5E-sEefZB5vjllHeQWRpkDs2G_AvlxitI6hOIQ.BON7JEeVn9miBfADQ34eQIcUTsSTVsHRQqCeXuVUGVs


Simplemente nos dicen que creemos el directorio .well-known/acme-challenge en el directorio raíz de nuestro servidor. Una vez creado, en este ejemplo, crearemos el archivo XU61P5E-sEefZB5vjllHeQWRpkDs2G_AvlxitI6hOIQ con la siguiente cadena dentro XU61P5E-sEefZB5vjllHeQWRpkDs2G_AvlxitI6hOIQ.BON7JEeVn9miBfADQ34eQIcUTsSTVsHRQqCeXuVUGVs. Cuando hayais terminado visitad la URL en vuestro navegador para cercioraros de que la cadena es visible. Una vez completado el proceso presionad ENTER en la terminal donde estaís ejecutando el cliente LetsEncrypt.

Daros cuenta que las cadenas de arriba son un ejemplo, además tendreís que repetir este proceso por cada dominio especificado en el apartado SAN del CSR, ya que por cada dominio tendreís que probar a LetsEncrypt que sois vosotros sus respectivos dueños.

Si la verificación del challenge ha sido satisfactoria obtendreís un mensaje como este:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /home/kub0x/letsencrypt/0001_chain.pem. Your cert will expire on
   2016-03-10. To obtain a new version of the certificate in the
   future, simply run Let's Encrypt again.


Felicidades, ya teneis vuestro propio certificado gratuito firmado por una entidad de confianza, por lo que vuestro certificado es válido en cualquier plataforma, navegador etc. El siguiente paso os lo dejo a vosotros. Si teneis apache simplemente modificad vuestra configuración de VirtualHosts e indicar donde está la clave privada, el certificado que habeís obtenido y la certificate chain, pues sin esta última es imposible verificar que el certificado fue emitido por LetsEncrypt.

PROS:

- Certificado válido bajo cualquier plataforma y firmado por una entidad de confianza (CA), ya que LetsEncrypt delega en IdenTrust, CA (trust-anchor) confiada por todo tipo de plataformas. + info sobre la CA en: https://letsencrypt.org/certificates/
- Renovación del certificado gratuita.
- Dentro de poco implementarán la emisión de certificados mediante la prueba de DNS, junto a la previamente expuesta basada en HTTP.

CONTRAS:

- Se encuentra en fase Beta, por lo que requiere de un conocimiento avanzado (según el modo de instalación) y no está para nada libre de bugs.
- Los certificados tienen que ser renovados cada cierto tiempo, es una política de seguridad para evitar que estén activos largos periodos de tiempo.
- En algunos hostings gratuitos o administrados es necesario deshabilitar el módulo de apache mod_security puesto que obtendremos un error "403 forbidden". En nginx ni idea.
- No se puede obtener un certificado de tipo WildCard, es decir, no emiten certificados del tipo *.dominio.com. por lo que debemos especificar en el campo SAN del CSR todos los dominios a proteger.
- Por ahora no tiene soporte en Windows.

Estaré encantado en responder cualquier cuestión relacionada con el tema. Si me animais a hacer un tutorial sobre certificados, HTTPS, SSL/TLS, RSA e incluso la matemática interna, pues obviamente, lo realizaré muy agusto, pues ahora mi entretenimiento es la criptografía al 100%.

Saludos!
Páginas: 1 2 [3] 4 5 6 7 8 9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines