내 소프트웨어는 중요한 데이터를 검색하기 위해 HTTPS 연결을 사용하여 Dropbox에 연결합니다.C# .NET - 인증서 고정 (Pinning) 인증서 권한 - 올바르게 처리하고 있습니까?
중간자 (man-in-the-middle) 공격을 막기 위해 인증 기관을 고정하고 싶습니다.
지금까지 나는 다음과 같은 코드가 있습니다 :
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