5

既知の証明書のみを受け入れるように .NET アプリケーションを制限したいと考えています。では、.NET で証明書のピン留めを強制するにはどうすればよいでしょうか? ベストプラクティスは何ですか? 拇印を確認するだけでいいですか?

4

2 に答える 2

5

OWASPごとに、.NET のServicePointManagerクラスを使用して、証明書と公開キーのピニングを実装できます。

于 2013-07-23T03:44:35.677 に答える
4

https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning#.Net

この URL にはすでに良い例があります。

// Encoded RSAPublicKey
private static String PUB_KEY = "30818902818100C4A06B7B52F8D17DC1CCB47362" +
    "C64AB799AAE19E245A7559E9CEEC7D8AA4DF07CB0B21FDFD763C63A313A668FE9D764E" +
    "D913C51A676788DB62AF624F422C2F112C1316922AA5D37823CD9F43D1FC54513D14B2" +
    "9E36991F08A042C42EAAEEE5FE8E2CB10167174A359CEBF6FACC2C9CA933AD403137EE" +
    "2C3F4CBED9460129C72B0203010001";

public static void Main(string[] args)
{
  ServicePointManager.ServerCertificateValidationCallback = PinPublicKey;
  WebRequest wr = WebRequest.Create("https://encrypted.google.com/");
  wr.GetResponse();
}

public static bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain,
                                SslPolicyErrors sslPolicyErrors)
{
  if (null == certificate)
    return false;

  String pk = certificate.GetPublicKeyString();
  if (pk.Equals(PUB_KEY))
    return true;

  // Bad dog
  return false;
}
于 2016-05-02T07:46:13.917 に答える