Как получить сертификат клиента из запроса RESTFul и проверить сертификат на сервере в C #? - PullRequest
0 голосов
/ 19 февраля 2019

Я изучал эту тему в течение последних 2 недель, и я нашел так много информации, что я поражен.Я собираюсь начать с нуля.Я новичок в этом, как никогда раньше ничего не делал с сертификатами.Я создал RESTful веб API, который ловит запросы от почтальона.В запросе я отправляю CERT (my-cert.cer).Я хотел бы использовать контроллер API для захвата CERT из запроса и проверки того, что находится на сервере.Можно ли даже захватить CERT так, как я это делаю?Я не нашел ни одного хорошего рабочего примера.Пожалуйста, помогите!

Вот мой метод GET

public class clientController : ApiController
{
    public string Get(int id)
    {
        X509Certificate2 cert = Request.GetClientCertificate();
        X509Certificate2 cert2 = RequestContext.ClientCertificate;

        logger.addLine(LogLineType.Message, "CERT " + cert + "\n", "page", null);
        logger.addLine(LogLineType.Message, "CERT 2" + cert2 + "\n", "page", null);
        System.Console.WriteLine("cert : " + cert);
        System.Console.WriteLine("cert2 : " + cert2);

        GetClient getClient = new GetClient();
        string response = getClient.RetrieveClientRequest(id).ToString();
        return response; } }

1 Ответ

0 голосов
/ 19 февраля 2019

Согласно MSDN

var cert = Request.GetClientCertificate();

получит вам сертификат, отправленный с запросом.Для проверки теперь у вас есть два варианта.

1) проверка с использованием OCSP2) позвоните

cert.Verify(); 

, чтобы проверить цепочку локально, используя сертификаты в хранилище сертификатов.Это означает, что он ищет сертификат в локальном хранилище сертификатов или некоторые другие сертификаты, которые использовались для создания цепочки доверия для сертификата.

Вся тема очень широка.Если ваш сертификат был подписан каким-либо органом, то есть цепочка.a знаки b, b знаки c и c подписывают ваше свидетельство (d).Обычно у вас есть центр сертификации (CA), который подписывает запросы на сертификат для пользователей / компьютеров.Сертификат этого CA (в верхнем регистре это обычно a или b) развернут на всех машинах одной компании.

С помощью Verify () вы ищите сам сертификат, знает ли его машина.Если нет, вы идете вверх по цепочке и, как только у вас есть тот, который использовался для подписи, вы доверяете всему дереву.

d был подписан c => d неизвестно, но естьподпись ц.c тоже не известен, но подпись говорит нам, что она была подписана b.Затем b устанавливается в доверенные сертификаты вашей машины и поэтому известен.Таким образом, вы доверяете b, что позволяет доверять c и, следовательно, доверять d.

Конечно, это ничего не говорит о отзыве.Я не уверен, если .Verify () проверит список отзыва.Лучше использовать OCSP, если он у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...