Я разрабатываю систему аутентификации с пользовательскими сертификатами на основе C# и MVC, и у меня возникли некоторые проблемы.
Я использую безопасность SSL с сертификатом CA и хочу вернуть некоторые сертификаты на стороне клиента. Когда я запускаю свое приложение на локальной стороне, я получаю личный сертификат, и моя система аутентификации работает правильно.
Однако, когда я запускаю то же приложение на стороне сервера, я не получаю никакого личного сертификата, если он установлен в навигаторе...
Здесь у вас есть код C#, который я разрабатываю.
private X509Certificate2 GetClientCertificate()
{
X509Store userCaStore = new X509Store(StoreName.My,StoreLocation.CurrentUser);
try
{
userCaStore.Open(OpenFlags.OpenExistingOnly);
X509Certificate2Collection certificatesInStore = userCaStore.Certificates
.Find(X509FindType.FindByTimeValid, DateTime.Now, true);
X509Certificate2 clientCertificate = null;
if (certificatesInStore.Count > 0)
{
clientCertificate = certificatesInStore[0];
}
else
{
return null;
}
return clientCertificate;
}
catch
{
throw;
}
finally
{
userCaStore.Close();
}
}
Request.RequestContext.HttpContext.Request.ClientCertificate
. Это свойство заполняется только тогда, когда клиент выбирает отправку сертификата клиента, в противном случае оно пусто или имеет значение null. - person Crypt32   schedule 19.01.2018To get the client certificate, is necessary that the server certificate was valid ?
-- да. Клиент сначала проверяет сертификат сервера. При проверке и запросе сервером клиент инициирует аутентификацию клиента с использованием сертификата клиента. Запрос клиентского сертификата настраивается на веб-сервере (например, в IIS). - person Crypt32   schedule 19.01.2018