He creado mi auto-certificación firmada e instalado a raíz de confianza de mi cliente y se utiliza para .PFX [servidor] para confirmar que la certificación y la autenticación se va sin problemas, sin ningún error¿Es posible que alguien cree una certificación falsa?
Pero hay una pregunta que realmente me confunde ¿hay alguna forma de que un hacker falsifique la autenticación con mi cliente? con su falso certificado y servidor?
Ejemplo:
Mi código para validar la certificación es
private static bool OnCertificateValidation(
object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
if (CaVerify(chain) && ServerVerify(certificate)) return true;
}
return false;
}
public static bool CaVerify(X509Chain chain)
{
if (chain.ChainElements.Count > 0)
{
var certHash = chain.ChainElements[chain.ChainElements.Count - 1].Certificate.GetCertHash();
if (certHash.Length == ApiCertHash.Length)
{
for (var idx = 0; idx < certHash.Length; idx++)
{
if (certHash[idx] == ApiCertHash[idx])
{
return true;
}
}
}
}
return false;
}
public static bool ServerVerify(X509Certificate certificate)
{
var certHash = certificate.GetCertHash();
if (certHash.Length == ApiCertHash.Length)
{
for (var idx = 0; idx < certHash.Length; idx++)
{
if (certHash[idx] == ApiCertHash[idx])
{
return true;
}
}
}
return false;
}
Así Podría alguien crear un certification.pfx falso y asociarlo a su servidor falso y conectarse a mi cliente a su servidor falso?
Sí que puede, * en su máquina sólo * . Eso no sería un "Principal en el medio", el atacante controla un punto final, no hay mucho que puedas hacer al respecto. Puedes poner la huella digital del certificado, pero una idea más inteligente sería colocar la huella digital de la CA y verificar que, de esa manera, puedas emitir nuevos certificados (digamos que necesitas cambiar el nombre DNS al que te estás conectando, lo harías necesita un nuevo certificado y, por lo tanto, una nueva huella digital cert). Añadiré un código rápido para mostrar cómo. –
¿Entonces Ssl es solo para proteger mi cliente-servidor del ataque MITM pero no para controlar el EndPoint de mi cliente? –
Es imposible proteger el punto final. Si el usuario final puede ejecutar código arbitrario, ha perdido. Todo lo que un atacante tiene que hacer es adjuntar su propio depurador y pueden hacer lo que quieran con el programa en ejecución. Puedes hacer que sea difícil para ellos, pero no puedes detenerlo. La única forma de "detenerlo" es que el usuario final no debe tener permitido ejecutar lo que quiera. Un ejemplo de esto es un iPhone ** sin jailbreak **, un usuario solo puede ejecutar aplicaciones desde la tienda de aplicaciones, y la tienda no tiene herramientas de depuración, por lo que el usuario final no puede atacar el programa. Pero si está en jailbreak ... está donde comenzó, no puede detenerlo. –