我的软件使用HTTPS连接连接到Dropbox以检索一些敏感数据。C#.NET - 固定证书颁发机构 - 我做的正确吗?
我想固定证书颁发机构以防止中间人攻击。
到目前为止,我有以下代码:
static bool VerifyServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
try
{
var currentCaPublicKey = chain.ChainElements.Cast<X509ChainElement>().Last().Certificate.GetPublicKeyString();
var caPublicKeys = new List<string>(){"00ad0e15cee443805cb187f3b760f97112a5aedc269488aaf4cef520392858600cf880daa9159532613cb5b128848a8adc9f0a0c83177a8f90ac8ae779535c31842af60f98323676ccdedd3ca8a2ef6afb21f25261df9f20d71fe2b1d9fe1864d2125b5ff9581835bc47cda136f96b7fd4b0383ec11bc38c33d9d82f18fe280fb3a783d6c36e44c061359616fe599c8b766dd7f1a24b0d2bff0b72da9e60d08e9035c678558720a1cfe56d0ac8497c3198336c22e987d0325aa2ba138211ed39179d993a72a1e6faa4d9d5173175ae857d22ae3f014686f62879c8b1dae45717c47e1c0eb0b492a656b3bdb297edaaa7f0b7c5a83f9516d0ffa196eb085f18774f"};
return caPublicKeys.Any(s => currentCaPublicKey.Equals(s));
}
catch (Exception ex)
{
Console.WriteLine(ex);
return false;
}
}
它工作正常,但我不知道是否我检查了正确的事情。任何建议从一些加密专家将不胜感激。
PS:如果有人正在寻找通过使用CA Dropbox,它们在那里可用:https://github.com/dropbox/dropbox-sdk-python/blob/master/dropbox/trusted-certs.crt – John
你的代码有多个未定义的符号,使它很难阅读。 (看起来他们正在编辑工件,比如'currentCaPk'。) – xxbbcc