Получить доступ к сертификату сервера из ASP.NET (C #)

#c# #server #certificate

#c# #сервер #сертификат

Вопрос:

Используя серверные переменные ( Request.ServerVariables["CERT_SERVER_ISSUER"] ), я могу получить строку, представляющую эмитента сертификата сервера, используемого в соединении.

Я хотел бы получить доступ к фактическому сертификату ( X509Certificate если это возможно), чтобы я мог дополнительно проверить сертификат.

Я хочу проверить сертификат сервера в моем ASP.NET код, чтобы убедиться, что никто просто не нажал «.. продолжить в любом случае». В частности, я хочу проверить корневой центр сертификации.

Насколько я понимаю — обычно браузеры не представляют сертификат клиента — так:

 HttpContext.Current.Request.ClientCertificate
  

будет нулевым / пустым… Я ищу сертификат сервера и, если возможно, полную цепочку сертификатов сервера, чтобы я мог проверить корневой центр сертификации.

Ответ №1:

Вы можете получить сертификаты из хранилища сертификатов, вы можете сделать это по имени субъекта, отпечатку пальца или чему-то еще, если хотите. Вам нужно будет определить, какой из них у вас есть в наличии, и изменить «тип поиска» в этом примере:

 X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);

X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Subject Name", false);
if (certs.Count > 0)
{
    // do something with: certs[0];
};

store.Close();
  

Комментарии:

1. Вы можете использовать переменные сервера HTTPS_SERVER_ISSUER и HTTPS_SERVER_SUBJECT для поиска сертификата learn.microsoft.com/en-us/previous-versions/iis/6.0-sdk /…