【发布时间】:2018-03-28 08:53:15
【问题描述】:
我的软件使用 HTTPS 连接到 Dropbox 以检索一些敏感数据。
我想固定证书颁发机构以防止中间人攻击。
到目前为止,我有以下代码:
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:如果有人正在寻找 Dropbox 使用的 CA,他们可以在那里找到:github.com/dropbox/dropbox-sdk-python/blob/master/dropbox/…
-
您的代码有多个未定义的符号,难以阅读。 (看起来他们正在编辑工件,例如
currentCaPk。)