miércoles, 12 de marzo de 2025

Modos de Encriptación con Cloudflare

El tema que abordaré acontinuación es considerando la forma y los conceptos que implementa Cloudflare.
Los modos de encriptación y los tipos de certificados SSL/TLS no son exclusivos de Cloudflare. Sin embargo, la forma en que Cloudflare implementa estos modos y los términos específicos que usa pueden ser particulares de su plataforma.


Modos de Encriptación (SSL/TLS)

La idea de diferentes modos de encriptación, como "Full" o "Full (Strict)", es un concepto general en la seguridad web. Se basa en cómo una conexión segura es establecida entre un cliente (como un navegador) y un servidor de origen. Cloudflare simplemente facilita la gestión de estos modos dentro de su plataforma.


En general, los modos SSL/TLS incluyen:

  • Flexible (propio de Cloudflare): La conexión entre el cliente y Cloudflare es segura, pero la conexión entre Cloudflare y el servidor de origen no usa SSL.



  • Full: Usa SSL entre Cloudflare y el origen, pero sin validar el certificado del origen.



  • Full (Strict): Requiere SSL entre Cloudflare y el origen, y el certificado del origen debe ser válido y confiable.





Otros proveedores de CDN y seguridad web pueden ofrecer configuraciones similares, aunque con nombres o implementaciones distintas.


Tipos de Certificados

Los certificados SSL/TLS mencionados (Universal, Avanzado, Personalizado, Keyless) son categorías que Cloudflare usa, pero la idea general detrás de estos tipos de certificados es común en la industria:


  • Certificados gratuitos (como los de Let’s Encrypt o los que Cloudflare proporciona automáticamente).
  • Certificados avanzados o gestionados (más configurables, pero aún automatizados).
  • Certificados personalizados (cuando el cliente usa su propio certificado).
  • Certificados sin clave (Keyless SSL) (para permitir la protección sin exponer claves privadas).

Otros proveedores como AWS CloudFront, Fastly o Akamai también ofrecen opciones de administración de certificados SSL/TLS con características similares.

En resumen, aunque los términos específicos pueden ser exclusivos de Cloudflare, los conceptos detrás de la encriptación SSL/TLS y los tipos de certificados son estándares de la industria.

Keyless SSL

Por motivos regulatorios, muchas organizaciones no pueden compartir sus claves privadas. Con Keyless SSL  (SSL sin llave), estas organizaciones aún pueden usar TLS y aprovechar la nube manteniendo la clave segura.

SSL sin clave se basa en el hecho de que solo hay un momento en el que se utiliza la clave privada durante el protocolo de enlace TLS, que ocurre al comienzo de una sesión de comunicación TLS. SSL sin llave funciona dividiendo los pasos del protocolo de enlace TLS. Un proveedor de nube que ofrece SSL sin clave mueve la parte de la clave privada del proceso a otro servidor, generalmente un servidor que el cliente mantiene en las instalaciones. En lugar de utilizar la clave privada directamente para generar claves de sesión, el proveedor de la nube obtiene las claves de sesión de la empresa a través de un canal seguro y utiliza esas claves para mantener el cifrado. Por tanto, se sigue utilizando una clave privada, pero no se comparte con nadie ajeno a la empresa.


Keyless SSL sólo es "sin llave" desde el punto de vista del proveedor de la nube: nunca ven la clave privada de su cliente, pero el cliente aún la tiene y la usa. Mientras tanto, la clave pública todavía se usa en el lado del cliente como de costumbre.

Session Keys

Una clave de sesión es cualquier clave de cifrado utilizada para cifrar simétricamente una sola sesión de comunicación. Una sesión se lleva a cabo a través de una red y comienza cuando dos dispositivos se reconocen mutuamente y abren una conexión virtual. Finaliza cuando los dos dispositivos han obtenido la información que necesitan entre sí y envían mensajes "terminados", finalizando la conexión.


Encritación

Recientemente estoy cursando un training asignado por la compañía. Y quiero compartir breves resumen de algunos tópicos. En esta ocasión hablaré brevemente sobre la Encriptación.

Que es la Encriptación?

Se puede definir como el cifrado o codificación de datos para que sólo las partes autorizadas puedan entender la información. El cifrado es el proceso de convertir texto sin formato legible por humanos en texto incomprensible, también conocido como texto cifrado.
El cifrado requiere el uso de una clave criptográfica: un conjunto de valores matemáticos que tanto el remitente como el destinatario acuerdan.




2 tipos de Encriptación

Los dos tipos principales de cifrado son el cifrado simétrico y el cifrado asimétrico. El cifrado asimétrico también se conoce como cifrado de clave pública.

Cifrado simétrico

En el cifrado simétrico, solo hay una clave y todas las partes que se comunican utilizan la misma clave (secreta) tanto para el cifrado como para el descifrado.


Cifrado asimétrico

En el cifrado asimétrico o de clave pública, hay dos claves: una clave se utiliza para el cifrado y una clave diferente para el descifrado. La clave de descifrado se mantiene privada, mientras que la clave de cifrado se comparte públicamente, para que cualquiera pueda usarla. El cifrado asimétrico es una tecnología fundamental para TLS.


¿Qué es una clave criptográfica?

En criptografía, una clave es una cadena de caracteres utilizada dentro de un algoritmo de cifrado para alterar datos para que parezcan aleatorios. Al igual que una clave física, bloquea (cifra) los datos para que sólo alguien con la clave correcta pueda desbloquearlos (descifrarlos). 


SSL/TLS requiere el uso de lo que se llama una clave pública y una clave privada, y en el caso de una empresa que utiliza el protocolo para proteger el tráfico hacia y desde su sitio web (consulte HTTPS), la clave privada normalmente permanece en posesión de la empresa. Pero cuando una empresa pasa a la nube y un proveedor proporciona cifrado TLS, el proveedor tiene la clave privada.

jueves, 2 de enero de 2025

¿Quién inventó los patrones de diseño?

Continuando con la saga de Patrones de diseño, hoy quiero contextualizar un poco y conversar del origen. Como había mencionado en post anterior, los patrones son soluciones a problemas habituales en el coding, y, cuando una solución se repite una y otra vez, este pasa a ser bautizado con un nombre y explicar su solución a detalle. De esta manera nace un patrón.

De acuerdo a la fuente estudiada,  en 1977 surge un libro llamado "A Pattern Language"/"El lenguaje de patrones". Su contenido es orientada a la arquitectura urbana escrito por Christopher Alexander.


Básicamente, contempla una seria de patrones para describir por ejemplo: alto y tipos de ventanas, niveles de un edicto, zonas verdes de un emplazamiento, etc.

En 1995, esta idea fue traslada a las diversas problemas y soluciones que se pueden tener a la hora de codificar un software. Los autores de esta genial idea son Eric Gamma, John Vlissides, Ralph Johnson y Richard Helm en su publicación "Patrones de diseño".



Este libro presenta 23 patrones que resuelven problemas de diseño orientado a objetos. Desde entonces, se han descubierto numeroso patrones de diseño.


martes, 31 de diciembre de 2024

Introducción a Patrones de Diseño

 Tal como hablé en otro post, tenemos 2 conceptos: Patrones Arquitectónicos y Patrones de Diseño de Software. Me enfocaré en este último en esta serie de post.

Los patrones de diseño son soluciones habituales a problemas frecuentes en el desarrollo de software. Siempre me ha encantado la analogía, el cual dice, que son como planos para construir un puente, en donde, se considera: 

  • El tráfico de personas o vehículos
  • condiciones climáticas
  • el entorno geográfico
  • etc.
Estos patrones no son porciones de código que puedan llegan a copiarse y pegar en nuestro proyecto, sino más bien, son conceptos que deben de entenderse, asimilarse y luego implementar en tu proyecto según la naturaleza de tu proyecto.



¿En qué consiste un patrón?

La gran mayoría son descritos para que puedan ser reproducidos en el contexto que a ti te envuelve. Y esta descripción contiene estas secciones:
  • Propósito: Explica el problema y la solución.
  • Motivación: Explica en detalle el problema y la solución brindada.
  • Estructura: Indica una estructura de clases y su relación.
  • Código:  Es un ejemplo  para facilitar la asimilación.

Clasificación de los patrones

Debido a que un patrón varía en su complejidad y el objetivo a resolver es que surgen 3 grupos:
  1. Patrones Creaciones: Ofrecen mecanismos para creación de objetos y facilitan la flexibilidad y reutilzación de código.
  2. Patrones Estructurales: Explican como se ensamblan los objetos y clases para mantener la flexibilidad y eficiencia
  3. Patrones de Comportamiento: Buscan una comunicación efectiva y la asignación de responsabilidades entre los objetos.

En otro post abordaré cada vez mas amplio estos conceptos. Nos vemos en el siguiente post.

PATRONES ARQUITECTÓNICOS y PATRONES DE DISEÑO. Es lo mismo?

Quiero compartir una pequeña introducción a este tema. Muchas veces se confunde patrones de diseño con patrones arquitectónicos.

Patrones de Diseño

Un patrón de diseño son soluciones habituales a problemas que ocurren con frecuencia en el diseño de piezas, módulos, etc. Estos patrones no son código que puedas llegar y copiar, más bien, es una conceptualización que tu podrás adaptar para encajar a la resolución que buscas en tu aplicación.   Acá voy a mencionar algunos que he tenido la oportunidad de usar: 

  • fachada, 
  • abstract factory,
  • singleton,
  • fábrica.
  • entre otros
Existen muchos más que te recomiendo revisar en el libro REFACTORING GURU (muy bueno). En otros post voy a ir desarrollando mas este tema, con su tipos y características.

PatronesArquitectónicos

Se enfocan en la resolución de problemas en aplicaciones completas a más alto nivel para obtener la mejor performance, asegurar que tenga escalabilidad, soporte latencia, tolerancia a fallos, etc. Aquí puedo mencionar algunos de estos patrones:
  • microservicios, 
  • EDA (Event Driven Architecture)
  • Capas, 
  • MVC, 
  • CQRS, 
  • entre otros.

Los patrones arquitectónicos pueden aplicar patrones de diseños para su implementación en sus piezas más pequeñas.
No confundir tampoco con las buenas prácticas de desarrollo como lo son SOLIC que quizás voy a compartir en otro post.



Este es un resumen muy breve, si quieres agregar más a esto: bienvenido y gracias. Espero tus comentarios 👇

lunes, 29 de diciembre de 2014

Generar Password Aleatoriamente

Si en alguna ocasión te has visto en la necesidad de generar password aleatoriamente, aquí les dejo un enlace muy bueno donde ejemplifican como realizar este método en nuestras aplicaciones.

Link: https://alskare.wordpress.com/2009/10/13/c-generador-de-passwords-aleatorios/

Espero les sirva

Gridview y RowEditing: Error ParameterCountException

Hola amigos, despues de tanto tiempo vuelvo a hacer entradas a mi blog. Bueno hoy me topé con un problemita en ASP.NET utilizando el Gridview dentro de un UpdatePanel. El grid ejecuta el evento RowEditing. Al ejecutarlo me daba el siguiente error: ParameterCountException!!!

Y googleando encontre la solución al problema: basta con declarar en el ScriptManager el atributo ScriptMode="Release"

Espero les sirva!!

Saludos.

miércoles, 9 de febrero de 2011

Acentos y Javascript Alert

Saludos amigos, un gran saludo después de tanto tiempo. El día de hoy me topé con el problema que en el proyecto que estoy desarrollando en ASP.NET, necesitaba enviar una serie de alert tras una serie de validaciones, el cual tengo un archivo *.js que contiene dichas funciones de validaciones. El caso es que dentro de los alert me topé con el problemas de los acentos y las Ñ/ñ, que no se mostraban correctamente al lado del cliente, en algunas ocaciones por el tema de codificación.


Navegando por ahi encontré la solución: Cuando requieras emplear acentos o la "Ñ/ñ" debes de reemplazarlas por unicode.

\u00e1 -> á
\u00e9 -> é
\u00ed -> í
\u00f3 -> ó
\u00fa -> ú
\u00c1 -> Á
\u00c9 -> É
\u00cd -> Í
\u00d3 -> Ó
\u00da -> Ú
\u00f1 -> ñ
\u00d1 -> Ñ



viernes, 12 de noviembre de 2010

Desarrollador 5 Estrellas - 4ta Estrella Cardspace

Hola amigo, para aquellos que están dando las pruebas de la certificación desarrollador 5 estrellas, y van por la 4ta en este momento, aqui les dejo el link de la prueba correspondiente a Cardspace, yo me base en esta y obtuve el 80%. http://ring0a.blogspot.com/2010/09/desarrollador-cinco-estrellas-4-1.html, en un proximo post les publicaré las respuestas.


Espero les sirva
Saludos.

miércoles, 10 de noviembre de 2010

Balsamiq Mockups:Creación de bosquejos sobre interfaces gráficas

Hola amigos, saben que hace unos meses atras necesitaba un software que me permitiera realizar bosquejos sobre interfaces gráficas de paginas web o de aplicaciones de escritorio que en mi trabajo me toca desarrollar.
Y por ahi encontré esta herramienta llamada Balsamiq Mockups
Bueno para poder instalar el programa (que es muy liviano) tenés que instalar el programa de Adobe Air. Está todo comprimido en el archivo Megaupload. Obviamente no es gratuito pero después de tanto buscar consegui el serial para que todos los T! lo puedan utilizar ilimitadamente...

http://www.megaupload.com/?d=142MQMNA

Organization name: leexij@gmail.com
Serial Key: eNrzzU/OLi0odswsqslJTa3IzHJIz03MzNFLzs+tMTQyNrcwsTQyAIEa5xpDAIFxDy8=


viernes, 5 de noviembre de 2010

BEGIN TRAN, COMMIT, ROLLBACK & GOTO

En muchas ocaciones tenemos que llevar un control sobre las transacciones que se realizan en la base de datos. Y TRAN nos permite poder ejecutar nuestras instrucciones SQL como una unica instrucción, donde todas fracasan o todas tienen exito y se completan.

Si alguna de las operaciones de una transacción falla hay que deshacer la transacción en su totalidad para volver al estado inicial en el que estaba la base de datos antes de empezar. Esto se consigue con la sentencia ‘ROLLBACK TRAN’.

Si todas las operaciones de una transacción se completan con éxito hay que marcar el fin de una transacción para que la base de datos vuelva a estar en un estado consistente con la sentencia ‘COMMIT TRAN’.

Otra sentencia muy útil es GOTO, el cual nos permite ejecutar un camino alternativo de existir un error o una condición no cumplida, en SQL Server 2005 existe una nueva funcion de TRY y CATCH (el cual trataremos en otro Post).

Bueno aqui les muestro un ejemplo de como utilizarla en SQL Server (en mi caso SQL Server 2000).

ALTER PROCEDURE [DBO].[SP_Biotoscana_PreAviso]
@ACCION INT = 0,
@ERRORID INT OUTPUT,
@MSGReturn INT OUTPUT,
---------------------------------------------------------
@IDLINEA CHAR(5) = '1',
@IDPROD CHAR(30) ='',
@DESTINO CHAR(10) = '',
@LOTE CHAR(25) = '',
@FECVENC SMALLDATETIME = NULL,
@NUMOC CHAR(10) = '',
@NUMIMP CHAR(10) = '',
@PAIS CHAR(3) = '',
@CANTIDAD FLOAT = 0,
@UNIDAD CHAR(10) = '',
@PRECUNIT FLOAT = 0,
@MONEDA CHAR(4) = '',
---------------------------------------------------------
@NUMREF CHAR(15) = '',
@TIPOCOMPRA VARCHAR(15) = '',
@RUTPROV VARCHAR(100) = ''
AS
BEGIN
DECLARE @CORR CHAR(10)
SET @CORR = ''

IF @ACCION = 1
BEGIN
BEGIN TRAN

SET @CORR = (SELECT Lastbatnbr7+1 from SETUPWEB)
SET @MSGReturn = CAST((SELECT Lastbatnbr7+1 from SETUPWEB) AS INT)

update SETUPWEB set Lastbatnbr7= @CORR

INSERT INTO PRE_WEBHEADER (
CodLab,Corr, Crtd_DateTime, Crtd_Prog, Crtd_User,
Lupd_DateTime,Lupd_Prog,Lupd_User,NoteId,
RefLab,Status,TranType,VendId
) VALUES (
'49', @CORR,GETDATE(),'INTZ', 'NFS',
GETDATE(),'INTZ', 'NFS', 0,
@NUMREF, 'H',@TIPOCOMPRA,@RUTPROV
)

INSERT INTO PRE_WEBLINE
(
Corr,Crtd_DateTime,Crtd_Prog, Crtd_User,
CuryId,ExpDate,InvtId, LineRef,
LotSerNbr, Lupd_DateTime, Lupd_Prog,Lupd_User,
OrdNbr,OpenLine,Pais,QtyOrig,RefNbr,SiteId,
ShipperId,Status_Muestreo,TranDate,Unid,UnitPrice, QtyRcvd
)
VALUES
(
@CORR, GETDATE(), 'INTZ', 'NFS',
@MONEDA,@FECVENC,@IDPROD,@IDLINEA,
@LOTE,GETDATE(), 'INTZ', 'NFS',
@NUMOC, 'A', @PAIS,@CANTIDAD,@NUMREF, @DESTINO,
@NUMIMP,0, GETDATE(), @UNIDAD,@PRECUNIT, 0
)

SELECT @ERRORID = @@ERROR
IF (@ERRORID <> 0) GOTO PROBLEM
COMMIT TRAN

PROBLEM:
IF (@ERRORID <> 0) BEGIN
ROLLBACK TRAN
END
END
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Espero que sea de ayuda. Saludos.

jueves, 4 de noviembre de 2010

Enviar Email con C# (C Sharp)

Hola amigos! Aqui publico el código que utilizé hace unos días para poder enviar e-mail desde mi aplicacion en C#.

Lo primero, tenemo

s que hacer la llamada a la librería:



using System.Net.Mail;

Una vez hecho esto, nos creamos el objeto que enviara el mail:


MailMessage objMail;

Ahora empezamos a rellenar los datos necesarios. Vamos a incorporar un destinatario del correo, la dirección desde la que se envía, un email en copia, otro en copia oculta y un fichero adjunto:


//'Creamos el objeto del correo
objMail = new MailMessage();
objMail.From = new MailAddress("direccion@origen.com");
//Remitente

objMail.To.Add("direccion@destino.com");
//Email a enviar
objMail.CC.Add("copia@destino.com");
//Email a enviar copia
objMail.Bcc.Add("oculto@destino.com");
//Email a enviar oculto

Indicamos un asunto:


objMail.Subject = "Asunto";

Y añadimos el contenido:


objMail.Body = "contenido";

Aquí podemos indicar si debe mantener un formato de HTML o no:


objMail.IsBodyHtml = true; //Formato Html del email

Le añadimos un adjunto


objMail.Attachments.Add(new Attachment(Adjunto));

OJO: tiene que ser la ruta absoluta del fichero, no la relativa.

Ahora que tenemos el contenido del mensaje, establecemos los datos del servidor de correo:


SmtpClient SmtpMail = new SmtpClient();
SmtpMail.Host = Servidor;
//el nombre del servidor de correo
SmtpMail.Port = Puerto;
//asignamos el numero de puerto

Añadimos las credenciales si hace falta:


SmtpMail.Credentials = 
new
System.Net.NetworkCredential(Usuario, Clave);

Y ya solo nos queda enviar el e-mail:


SmtpMail.Send(objMail); //Enviamos el correo

Y con eso estamos listos!!! espero les sirva.

Saludos.