我的软件使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我不知道我是否在检查正确的东西。一些加密专家的任何建议将不胜感激。
我必须为两个不同的公司制作相同的程序(不同的标识,不同的名称).我希望在发布时自动完成此操作.
我想使用资源文件或附属程序集,但我不知道如何继续.
您认为哪种方式最好?
谢谢.
编辑:
"user1"和"user2"在下面的示例中指向相同的引用是否正常?
我知道我将相同的变量'notUsed'传递给两个参数,但它还没有实例化,因此它不包含对任何内容的引用.看到user1和user2相互链接,我感到非常震惊.
static void CheckPasswords(out string user1, out string user2)
{
user1 = "A";
user2 = "B";
Console.WriteLine("user1: " + user1);
Console.WriteLine("user2: " + user2);
}
public static void Main()
{
string notUsed;
CheckPasswords(out notUsed, out notUsed);
}
Run Code Online (Sandbox Code Playgroud)
控制台显示:
user1: B
user2: B
Run Code Online (Sandbox Code Playgroud)