Могу ли я гарантировать, используя C#, что X509Certificate был выдан доверенным центром?
Если я использую X509Certificate.CreateFromSignedFile чтобы получить сертификат, используемый для подписи файла, могу ли я подтвердить, что он был подписан доверенным центром-и не является ли он просто "самозаверяющим" сертификатом?
Я хочу извлечь имя" субъекта " (компании) из сертификата, чтобы убедиться, что неуправляемая библиотека DLL, которую я использую, не нарушена (я не могу ее проверить, так как она обновляется часто и независимо) и официальна.
Однако я обеспокоен тем, что поддельная DLL может быть подписана с помощью "самоподписанный" сертификат и возврат оригинального названия компании. Итак, я хочу убедиться, что сертификат был выдан Versign, Thwate или подобным образом (все, что установлено в репозитории cert на машине, будет нормально).
Как я могу это сделать, если вообще могу, при использовании X509Certificate.CreateFromSignedFile? Или же он делает это автоматически (т. е. "самоподписанный" сертификат не пройдет)?
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 () ?