Могу ли я гарантировать, используя C#, что X509Certificate был выдан доверенным центром?


Если я использую X509Certificate.CreateFromSignedFile чтобы получить сертификат, используемый для подписи файла, могу ли я подтвердить, что он был подписан доверенным центром-и не является ли он просто "самозаверяющим" сертификатом?

Я хочу извлечь имя" субъекта " (компании) из сертификата, чтобы убедиться, что неуправляемая библиотека DLL, которую я использую, не нарушена (я не могу ее проверить, так как она обновляется часто и независимо) и официальна.

Однако я обеспокоен тем, что поддельная DLL может быть подписана с помощью "самоподписанный" сертификат и возврат оригинального названия компании. Итак, я хочу убедиться, что сертификат был выдан Versign, Thwate или подобным образом (все, что установлено в репозитории cert на машине, будет нормально).

Как я могу это сделать, если вообще могу, при использовании X509Certificate.CreateFromSignedFile? Или же он делает это автоматически (т. е. "самоподписанный" сертификат не пройдет)?

2 2

2 ответа:

Если это не действительный сертификат, вы получите исключение. Что касается того, что вы хотите проверить название компании и т. д... Вот код:

  ServicePointManager.ServerCertificateValidationCallback +=
            new System.Net.Security.RemoteCertificateValidationCallback(customXertificateValidation);

    private static bool customXertificateValidation(
        object sender, X509Certificate cert,
        X509Chain chain, System.Net.Security.SslPolicyErrors error)
    {

        // check here 'cert' parameter properties (ex. Subject) and based on the result 
        // you expect return true or false

        return false/true;
    }

EDIT: приведенный выше код подходит только при запросе https ресурса, который получен не валидным(самоподписанным, просроченным...сертификат и т. д.). Что касается извлечения подписей из подписанных файлов, пожалуйста, проверьте здесь: извлечение цифровых подписей из подписанных файлов с помощью .NET

Разве недостаточно метода Verify () ?