Foro de elhacker.net

Seguridad Informática => Criptografía => Mensaje iniciado por: alzehimer_cerebral en 9 Enero 2011, 18:01 pm



Título: Certificados digitales autofirmados
Publicado por: alzehimer_cerebral en 9 Enero 2011, 18:01 pm
Hola foro,

por lo que he LEIDO se que un certificado digital firmado por una CA ofrece:
Autentificacion, Privacidad, Integridad del mensaje y garantiza no repudio.

Con un certificado digital autofirmado la autentificacion no se garantiza (el servidor podria ser otro al quien dice ser el certificado), pero las otras 3 caracteristicas si que se siguen garantizando verdad??

SALU2

alzehimer_cerebral



Yo estoy hablando del protocolo SSL, en cuanto a autentificacion si esta firmado por una CA se sabe que el servidor es quien dice ser, en cuanto a la privacidad claro que existe ya que todo el dialogo va cifrado con una clave simetrica, el no repudio se garantiza por la firma digital, y la integridad se garantiza gracias a las funciones resumen.

Al usar certificados autofirmados lo unico que no se grantiza es la autenticacion correcta, pero el resto de caracteristicas si se mantienen verdad?



Pero esa no es mi pregunta...

MOD: No hagas double posting (y menos triple posting). Si tenes que agregar algo a tu mensaje, modfica el mensaje existente.


Título: Re: Certificados digitales autofirmados
Publicado por: rdzlcs en 9 Enero 2011, 19:06 pm
Citar
Cuando los navegadores no admiten el cifrado potente. Aunque un certificado SSL admita un cifrado de 128 ó 256 bits, algunos navegadores y sistemas operativos más antiguos aún no pueden conectarse a este nivel. Sin un certificado SGC en el servidor web, los navegadores web y los sistemas operativos que no admiten el potente cifrado de 128 bits sólo recibirán un cifrado de 40 ó 56 bits. Los usuarios que dispongan de las siguientes versiones de navegadores y sistemas operativos podrán, de forma temporal, conseguir el cifrado SSL de 128 bits si visitan un sitio web con un certificado SSL con SGC.


Creo que hay recién pasa a ser inseguro, las huellas digitales son muy seguras en la actualidad, y no creo que alguien puede emular de alguna forma esta, a menos que la amenaza este dentro de un servidor...

Saludos


Título: Re: Certificados digitales autofirmados
Publicado por: alzehimer_cerebral en 9 Enero 2011, 19:14 pm
PREGUNTA: Si el servidor utiliza un certificado autofirmado!!! Suponiendo que el servidor es quien dice ser, se puede garantizar privacidad y la integridad del mensaje??

Es sencilla y directa la pregunta.

Salu2.

alzehimer_cerebral


Título: Re: Certificados digitales autofirmados
Publicado por: APOKLIPTICO en 9 Enero 2011, 20:58 pm
Si el servidor utiliza un certificado autofirmado, y no comparte su certificado previamente con los que quieran acceder al servidor, no se va a poder garantizar la autenticidad del mensaje. Por ende, no se va a poder tampoco garantizar la privacidad o la integridad del mensaje.

Si uno recibe en una conexion segura un certificado que no esta firmado por una CA conocida, el explorador te va a avisar. Sin embargo, con ataques tipo man in the middle, se podria facilmente modificar y ver el mensaje.

APOKLIPTICO


Título: Re: Certificados digitales autofirmados
Publicado por: alzehimer_cerebral en 9 Enero 2011, 21:29 pm
Gracias por las respuestas...

Voy hacer un esfuerzo en dejar claro lo que quiero hacer y se haciendo esto la conexion es segura!!!

Estoy programando una aplicacion en Java que se conecta a un servidor por Https, dicho servidor tiene un servidor autofirmado creado por mi.  Las personas que quieran utilizar la aplicacion de la que hablo deben añadir manualmente el certificado automirmado al truststore de sus ordenadores (para que confien en el certificado autofirmado del server).  Partiendo de que los clientes añadan el certificado autofirmado a sus truststores... entonces la comunicacion seria autentificada?? seria cifrada?? seria propensa a modificaciones de los datos sin que los clientes lo detectaran??

Yo pienso que no, ademas la aplicacion se encarga de conectar a servidores con certificados que han sido creados por mi, por lo tanto apuntan a servers mios no ha servers de otros que se harian pasar por mi...

Haber si me podeis asegurar si este tipo de comunicaciones serian seguras, me encuentro en una etapa de pruebas en la cual no quiero invertir en gastos de CA pero en la cual necesito saber si estoy garantizando la seguridad que acredita el protocolo SSL a pesar de que use certificados autofirmados.

Saludos y gracias por los aportes.

alzehimer_cerebral


Título: Re: Certificados digitales autofirmados
Publicado por: APOKLIPTICO en 12 Enero 2011, 19:16 pm
Si las personas que van a entrar a tu servidor con anterioridad instalaron su certificado en el truststore, entonces no va a haber problemas. El tema es que el certificado sea realmente de verdad, es decir, que cuando se lo bajen y lo instalen, nadie lo spoofee.


Título: Re: Certificados digitales autofirmados
Publicado por: el-brujo en 13 Enero 2011, 18:18 pm
la única diferencia que yo sepa que hay, en uno firmado por una CA y otro firmado por ti mismo es que el navegador se va a quejar y te va a avisar (es molesto y pierdes tiempo), el resto es igual, son igual de seguros y válidos.

El único "problema" es que firmado por una CA vale dinero y firmarlo por uno mismo es gratis.


Título: Re: Certificados digitales autofirmados
Publicado por: APOKLIPTICO en 14 Enero 2011, 01:38 am
No son igual de seguros y validos. Son spoofeables facilmente a menos que se haya establecido el certificado por un canal seguro alternativo.


Título: Re: Certificados digitales autofirmados
Publicado por: alzehimer_cerebral en 14 Enero 2011, 14:07 pm
Jajajaj es un tema muy lioso. He leido mucho y cuando digo mucho es mucho y sigo sin tener las cosas claras.

En el supuesto caso de que distribuya mis certificados autofirmados de forma personal, darselos mediante un soporte fisico en la mano, y que luego los clientes lo añadieran a su truststore via keytool por ejemplo...

Yo considero que la comunicacion podria garantizar las 4 caracteristicas del protocolo SSL:

-Autenticidad.
-Privacidad.
-No repudio.
-Integridad del mensaje.

Si el certificado autofirmado llega por un medio electronico entonces pienso que la autenticidad no se garantiza, ya que no sabes si donde te conectas es realmente quien el certificado dice ser..  En realidad esto no me afecta ya que la aplicacion de la cual hablo se conecta a mi servidor por lo tanto si que se que es realmente mio ;).

Me parece una tonteria gastarme dinero en que me lo firme una CA...

Si alguien tiene buena informacion sobre el dialogo SSL estaria interesado el hecharle un vistazo para profundizar un poco mas en el tema, cualquier cosa dejais un enlace si no os importa.

Un saludo foreros.

alzehimer_cerebral


Título: Re: Certificados digitales autofirmados
Publicado por: APOKLIPTICO en 15 Enero 2011, 03:57 am
Mira, si vos podes enviar por otro canal seguro el certificado, no tiene por que ser fisico, pero tiene que haber un secreto compartido o una VPN segura, entonces podes asegurar las 4 caracteristicas del protocolo SSL (O mejor dicho TLS).


Título: Re: Certificados digitales autofirmados
Publicado por: novanoticia en 17 Diciembre 2011, 08:55 am
Hola a todos,
hay otro metodo aunque tendría que repasar el tema para hacer una key de aplicación bastante segura.

consiste en lo siguiente,

creas una llave publica y en vez de ser esa la que das , la conservas seguramente, y utilizas la llave privada junto con datos del registro o del ordenador donde se ha instalado para tener que se utilize la llave privada como key de aplicación,

Es decir consistiría en lo que se llama criptografía asimetrica (donde es la clave publica la que se comparte) , pero en el caso que yo he esplicado sería criptografía asimetrica inversa, no he encontrado ninguna pagina que hable sobre ello,
vamos, en resumen el problema de utilizar una criptografía asimetrica tradicional estaría sobre todo en que si envias la llave publica esta solo sirve para descifrar sin embargo si implementas la clave privada dentro de tu aplicación podrías utilizarla para cifrar los datos del registro (nombre, usuario, email, y algunos datos que identifican unicamente al ordenador donde lo ha instalado) y enviarla al creador de la aplicación para que compruebe que coinciden el el registro inicial y que el equipo sea unico.

La llave pública es el candado y su pareja es la llave de metal (llave privada) que lo abre. Por supuesto, esta pareja debe ser fabricada una para la otra.

digamos que el candado lo guardo y solo distribuyo copias de la llave de metal,
http://www.alcancelibre.org/article.php/20070620210641855

la llave privada puede descifrar (como la llave publica) y cifrar ¿que cifrafía? pues los datos que he dicho antes, sin que sea visible para el usuario coge unos parametros del sistema además de su email, por ejemplo, su nombre dirección, ...etc y lo cifra y me lo envia a mi, el que he hecho la aplicación, y yo lo puedo descifrar con mi llave publica y confirmar que los datos que me ha mandado corresponden a los datos que tengo yo cuando se registró, si no coinciden o hay dos equipos utilizando estos datos pues entonces habría que darle avertencia de que está utilizando el software ilegalmente...etc.

lo importante es que el cliente pueda cifrar esos datos con la copia de la llave privada , cosa que no podría hacer si lo que distribuyo es la clave publica.

la forma de identificar al equipo como unico puede ser del siguiente modo:

Con la creación de un identificador unico global GUID de un ordenador http://www.subgurim.net/Articu los/csharp/97/guid-identificad or-global-unico.aspx
también con SID: http://technet.microsoft.com/e s-es/library/cc780850(WS.10).a spx

si no estoy equivocado, por ejemplo, los archivos de windows disponen de un identificador unico para todos los archivos de un equipo
acabo de encontrar sobre ese tema este enlace http://forums.techarena.in/windows-server-help/10000.htm
de tal forma que cuando se instala la aplicacion si se obtiene ese SID se puede identificar de forma unica al equipo, esto para windows, en linux no se si será exactamente igual,
si se regenera el SID de los archivos sería como si instalas de nuevo el sistema operativo
con lo cual este ultimo metodo llevaría a tener que volver a registrar la aplicación con los mismos datos pero con distinto SID para los archivos, con lo cual el Creador de la aplicación tendría que llevar un registro de datos_registro + SID_de_sistema (que solo podría ser una combinación unica).




espero que me deis vuestra opinion sobre esta idea,

gracias

 

perdonar que no me esplique extensamente es que hace tiempo tuve esa idea pero no he repasado el tema como

tengo algo que escribí hace tiempo:

generar clave publica y clave privada en windows ej.
 
en el programa :
 
clave publica para desemcriptar los datos enviados con clave privada,
 
datos enviados con clave privada:
 
¿como crear un certificado con la llave privada ¿o publica? en dicho ordenador?
 
enviar el certificado cifrado con la llave privada proporcionada como licencia.

y un codigo en c#:


validar através de internet el certificado (comunicación servidor de software y software instalado)
 
http://www.accv.es/
 
http://www.programandoamedianoche.com/2009/08/utilizar-certificados-digitales-desde-net/
 
http://en.juantxu.net/doku.php/ssl PARA HACER EL CERTIFICADO A PARTIR DE CLAVES
 
http://thinkingindotnet.wordpress.com/2007/04/06/trucos-habilitar-ssl-en-iis-70-usando-certificados-firmados-por-nosotros/
 
 
PARA CREAR LA CLAVE PUBLICA Y LA CLAVE PRIVADA EN C#
COLOCAR EN EL PROGRAM.CS
 
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
 
namespace CrearClavesPublicasPrivadas
{
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Label label1;
        private System.ComponentModel.Container components = null;
        public Form1()
        {
            InitializeComponent();
        }
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }
        #region Código generado por el Diseñador de Windows Forms
        ///
        /// Método necesario para admitir el Diseñador. No se puede modificar
        /// el contenido del método con el editor de código.
        ///
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Font = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.button1.Location = new System.Drawing.Point(8, 8);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(104, 48);
            this.button1.TabIndex = 0;
            this.button1.Text = "Generar claves";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // textBox1
            //
            this.textBox1.Font = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.textBox1.Location = new System.Drawing.Point(120, 40);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(144, 26);
            this.textBox1.TabIndex = 1;
            this.textBox1.Text = "";
            //
            // label1
            //
            this.label1.Location = new System.Drawing.Point(120, 8);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(152, 24);
            this.label1.TabIndex = 2;
            this.label1.Text = "Nombre clave";
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(280, 94);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
        }
        #endregion
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }
        private void button1_Click(object sender, System.EventArgs e)
        {
            if (textBox1.Text != "")
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(4096);
                string PCB = RSA.ToXmlString(true);
                string CPubB = RSA.ToXmlString(false);
                string nombre = textBox1.Text;
                nombre += "PCB.xml";
                StreamWriter PCAwriter = new StreamWriter(nombre);
                PCAwriter.Write(PCB);
                PCAwriter.Close();
                string nombre2 = textBox1.Text;
                nombre2 += "CPubB.xml";
                StreamWriter CPubAwriter = new StreamWriter(nombre2);
                CPubAwriter.Write(CPubB);
                CPubAwriter.Close();
                MessageBox.Show("LAS CLAVES FUERON CREADAS CON EXITO", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            else
            {
                MessageBox.Show("DEBE LLENAR EL CAMPO NOMBRE CLAVE.", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

espero que os resulte interesante


Título: Re: Certificados digitales autofirmados
Publicado por: novanoticia en 17 Diciembre 2011, 09:01 am
Mira, si vos podes enviar por otro canal seguro el certificado, no tiene por que ser fisico, pero tiene que haber un secreto compartido o una VPN segura, entonces podes asegurar las 4 caracteristicas del protocolo SSL (O mejor dicho TLS).

yo por ejemplo lo de la firma autofirmada lo he utilizado en mis correos, ¿por que?, porque si soy yo el unico que sabe las claves de mi servidor de correo puedo garantizar que soy yo el que puede firmar ese correo ya que soy el autentico propietario,

me acuerdo que hace ya tiempo era muy facil enviar un correo haciendose pasar por otro simplemente con poner la dirección del otro, con la firma autofirmada o averiguas la password de mi correo o no puedes suplantarme la identidad , sobre todo por ejemplo para hacer spam con mi dirección, bueno es decir podrás hacer spam pero si mi correo lo envio con la firma autofirmada (como minimo) estoy garantizandole al otro que lo he enviado con mi servidor de correo.

os voy a poner otro ejemplo:
este pasa un certificado de un almacen a otro y se lo añade al servidor IIS

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.IO;
using Microsoft.Web.Administration;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            X509Store store0 = new X509Store(StoreName.My, StoreLocation.LocalMachine);
            X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);

            //ojo al dato, lo paso de mi store personal al root, para meterlo en mi store personal solo hay que hacer click en el certificado,
            //aunque esto se puede implementar con codigo, hay muchas posibilidades.
           //el el siguiente post voy a poner como se hace para:
           //COMO CREAR UNA FIRMA DIGITAL AUTOFIRMADA Y SER NOSOTROS LA ENTIDAD CERTIFICADORA DEL MISMO Y PODER UTILIZARLO EN LOS CORREOS


            store0.Open(OpenFlags.ReadWrite);
            store.Open(OpenFlags.ReadWrite);
            X509Certificate2Collection collection = store0.Certificates.Find(X509FindType.FindByIssuerName, "localhost", false);
            store.AddRange(collection);
            store.Close();
            using (ServerManager serverManager = new ServerManager())
            {
                Configuration config = serverManager.GetApplicationHostConfiguration();
                ConfigurationSection accessSection = config.GetSection("system.webServer/security/access","Default Web Site");
                accessSection["sslFlags"] = @"Ssl";
                serverManager.CommitChanges();
            }
            using (ServerManager serverManager = new ServerManager())
            {
                Configuration config = serverManager.GetApplicationHostConfiguration();
                ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
                ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
                ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default Web Site");

                if (siteElement == null) throw new InvalidOperationException("Element not found!");

                ConfigurationElementCollection bindingsCollection = siteElement.GetCollection("bindings");
                ConfigurationElement bindingElement1 = bindingsCollection.CreateElement("binding");
                bindingElement1["protocol"] = @"https";
                bindingElement1["bindingInformation"] = @"*:443:";
                //En la linea siguiente es mi pequeña aportación casi todo lo demás lo podeis encontrar en internet
                ConfigurationMethod method = bindingElement1.Methods["AddSslCertificate"];
                ConfigurationMethodInstance mi = method.CreateInstance();
                //falta ver si la huella digital es la misma en todos los ordenadores
                string prueba="";
                int i=0;
                prueba = collection[0].GetCertHashString().ToString();
                mi.Input.SetAttributeValue("certificateHash",prueba);
                mi.Input.SetAttributeValue("certificateStoreName", store.Name );
                mi.Execute();
                bindingsCollection.Add(bindingElement1);
                serverManager.CommitChanges();
                
            }
        }
        private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
        {
            foreach (ConfigurationElement element in collection)
            {
                if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
                {
                    bool matches = true;
                    for (int i = 0; i < keyValues.Length; i += 2)
                    {
                        object o = element.GetAttributeValue(keyValues);
                        string value = null;
                        if (o != null)
                        {
                            value = o.ToString();
                        }
                        if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
                        {
                            matches = false;
                            break;
                        }
                    }
                    if (matches)
                    {
                        return element;
                    }
                }
            }
            return null;
        }
    }


}


Título: Re: Certificados digitales autofirmados
Publicado por: novanoticia en 17 Diciembre 2011, 11:21 am
Hola , soy yo de nuevo,
sobre el uso de las firmas digitales autofirmadas

"Descripción del certificado autofirmado en Exchange 2007":
http://technet.microsoft.com/es-es/library/bb851554(EXCHG.80).aspx

Pues resulta que pregunte sobre la utilidad de las firmas autofirmadas en la Infojobs Comunidades Expertos y
resulta que parecía que estaba preguntando una tontería,
de hecho me pasó con muchas preguntas que puse,
y le dije al moderador que me diera de baja,

y resulta que microsoft lo está utilizando desde el 2007 en sus servidores Exchange, toma castaña.

Por poner otro ejemplo,

En mi servidor web (hosting AXARNET) ya existe la posibilidad de crear para tu hosting una firma digital autofirmada,
Lo han puesto muy recientemente,

y no es el unico que lo hace solo tienes que buscarlo en internet


Título: Re: Certificados digitales autofirmados
Publicado por: novanoticia en 17 Diciembre 2011, 11:53 am
COMO CREAR UNA FIRMA DIGITAL AUTOFIRMADA Y SER NOSOTROS LA ENTIDAD CERTIFICADORA DEL MISMO Y PODER UTILIZARLO EN LOS CORREOS
este ejemplo es para entorno windows.

primero con un programa o programandolo nosotros mismos se crea la firma digital
una cosa a tener en cuenta son marcar los propositos para los que sirve la firma (yo por defecto he marcado todos),
y ponerle una caducidad,
y se guarda con formato .p12 with chain,

se ejecuta dicha firma y se instala (almacen por defecto),

se le da a ejecutar "mmc.exe" y se añade de contenido (en archivo) "certificados" y aparecen las carpetas de los certificados,

nos vamos a la carpeta de certificados raiz de confianza e importamos dicha firma .p12,
si al crear la firma rellenamos hemos rellenado el campo email con uno de los emails de los que tenemos en el apartado de cuentas de correo, podremos seleccionar la firma cuando, en las propiedades de dicho email, le marcamos que use el certificado, si no lo hemos rellenado o no coincide no lo mostrará.

le damos a las opciones de seguridad para que firme los mensajes y cifre,

cuando mandamos el mensaje lo firma con la firma digital y lo cifra,

cuando la otra persona recibe nuestro email, es cuando ella puede respondernos y cifrar el mensaje con nuestra firma.

si nos envia su firma digital nosotros podremos hacer lo mismo.

he editado los post varias veces para corregir expresiones, hacer indicaciones o para que sea más comprensible.


Título: Re: Certificados digitales autofirmados
Publicado por: APOKLIPTICO en 19 Diciembre 2011, 02:19 am
No revivir posts antiguos!