Как получить сертификат клиента в моем приложении mvc?

Я разрабатываю систему аутентификации с пользовательскими сертификатами на основе 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();
    }
}

person jld    schedule 19.01.2018    source источник
comment
Конечно, вы не получите никакого сертификата, потому что этот код работает на сервере, а не на клиенте.   -  person Crypt32    schedule 19.01.2018
comment
И зачем отображать окно для выбора одного из личных сертификатов?   -  person jld    schedule 19.01.2018
comment
При локальном запуске кода и клиентское, и серверное приложение запускаются под одной и той же учетной записью безопасности на одном компьютере, и это работает. Когда сервер и клиент работают на разных машинах, предоставленный вами фрагмент кода работает только на сервере.   -  person Crypt32    schedule 19.01.2018
comment
вы можете узнать больше об этом в аналогичной теме, в которой я участвовал: stackoverflow.com/questions/46686462/   -  person Crypt32    schedule 19.01.2018
comment
да, я читал эту документацию раньше, но как взять тему клиентского сертификата? я весьма озадачен   -  person jld    schedule 19.01.2018
comment
В коде контроллера или представления вы можете получить доступ к сертификату клиента в контексте http: Request.RequestContext.HttpContext.Request.ClientCertificate. Это свойство заполняется только тогда, когда клиент выбирает отправку сертификата клиента, в противном случае оно пусто или имеет значение null.   -  person Crypt32    schedule 19.01.2018
comment
Чтобы получить сертификат клиента, необходимо, чтобы сертификат сервера был действительным? Хотя в обоих случаях локальная или серверная сторона пуста или нулевая.   -  person jld    schedule 19.01.2018
comment
To get the client certificate, is necessary that the server certificate was valid ? -- да. Клиент сначала проверяет сертификат сервера. При проверке и запросе сервером клиент инициирует аутентификацию клиента с использованием сертификата клиента. Запрос клиентского сертификата настраивается на веб-сервере (например, в IIS).   -  person Crypt32    schedule 19.01.2018