Ho creato la mia auto firmato la certificazione e installato alla radice attendibili del mio cliente e utilizzato per pfx [lato server] per confermare che la certificazione e l'autenticazione è in corso senza intoppi, senza erroriÈ possibile a chiunque creare una certificazione falsa?
Ma c'è una domanda che realmente mi confonde c'è un modo per un hacker di falsificare l'autenticazione con il mio cliente? con il suo falso certificato e server?
Esempio:
Il mio codice per convalidare la certificazione è
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;
}
Così qualcuno potrebbe creare un certification.pfx falso e associarlo al suo server di falso e collegare il mio cliente al suo server di falso?
Sì che può, * sulla sua macchina solo * . Questo non sarebbe un "Main In the Middle", l'attaccante controlla un endpoint, non c'è molto che tu possa fare al riguardo. Puoi inserire l'impronta digitale del certificato, ma un'idea più intelligente sarebbe inserire l'impronta digitale della CA e controllare che, in questo modo, puoi emettere nuovi certificati (ad esempio, devi cambiare il nome DNS a cui ti stai connettendo, bisogno di un nuovo certificato e quindi di una nuova impronta digitale). Aggiungerò del codice veloce per mostrare come. –
Quindi Ssl serve solo per proteggere il mio client-server dall'attacco MITM ma non per controllare l'EndPoint del mio client? –
Non è possibile proteggere l'endpoint. Se l'utente finale può eseguire codice arbitrario, hai perso. Tutto ciò che un utente malintenzionato deve fare è collegare il proprio debugger e possono fare tutto ciò che vogliono con il programma in esecuzione. Puoi renderlo duro con loro, ma non puoi fermarlo. L'unico modo per "fermarlo" è che l'utente finale non deve poter eseguire tutto ciò che desidera. Un esempio di questo è un iPhone ** non-jailbroken **, un utente può eseguire solo app dall'app store e il negozio non ha strumenti di debug, quindi l'utente finale non può attaccare il programma. Ma se jailbroken ... sei dove hai iniziato, non puoi fermarlo. –