我已經創建了我的自簽名的證書,並將其安裝到我的客戶的信任的根,用於.PFX [服務器端]來確認認證和認證進展順利,沒有任何錯誤任何人都可以創建虛假認證嗎?
但是有一個問題,真的混淆我有沒有什麼辦法讓黑客僞造我的客戶端的身份驗證?用他的假證書和服務器?
例子:
我的代碼來驗證認證
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;
}
所以可能有人創建一個假certification.pfx和其關聯到他的假服務器和我的客戶端連接到他的假服務器?
是的,他能,*他的機器上只* 。這不會是一個「主要在中東」,攻擊者控制一個端點,對此你可以做的事情不多。你可以把在證書的指紋,但一個更聰明的想法是把CA的指紋和檢查,這樣你可以發佈新的證書(說你需要改變你要連接的DNS名稱,你會需要一個新的證書併爲此頒發新的證書指紋)。我將添加一些快速代碼來演示如何。 –
因此,Ssl只是爲了保護我的客戶端服務器免受MITM攻擊,而不是控制客戶端的EndPoint? –
保護端點是可行的。如果最終用戶可以運行任意代碼,那麼你已經丟失了。攻擊者所要做的就是附加他自己的調試器,他們可以在正在運行的程序中做任何他們想做的事情。你可以讓它變得很難,但是你無法阻止它。 「阻止它」的唯一方法是不允許最終用戶運行他們想要的任何東西。一個例子是** un-jailbroken ** iPhone,用戶只能從應用程序商店運行應用程序,而商店沒有調試工具,因此最終用戶無法攻擊該程序。但如果越獄...你是你開始的地方,無法阻止它。 –