какие сертификаты необходимы для проверки подлинности сервера
Настройка уровней проверки подлинности сервера и шифрования
По умолчанию сеансы Службы удаленных рабочих столов настроены на согласование уровня шифрования между клиентом и сервером Узел сеансов удаленных рабочих столов. Чтобы повысить безопасность сеансов Службы удаленных рабочих столов, можно задать обязательное использование протокола TLS 1.0. Протокол TLS 1.0 обеспечивает проверку удостоверения сервера Узел сеансов удаленных рабочих столов и шифрование всех подключений между сервером Узел сеансов удаленных рабочих столов и клиентским компьютером. Для обеспечения повышенной безопасности с помощью протокола TLS необходимо правильно настроить сервер Узел сеансов удаленных рабочих столов и клиентский компьютер.
Примечание | |||||||||||||||||||
Уровень безопасности | Описание | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Внимание! | |||||||||||||||
Уровень шифрования | Описание | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Общедоступный поставщик | Enterprise PKI | |
---|---|---|
Доверие клиентов | Доверенный Windows по умолчанию | Автоматическая с некоторыми реализациями, в противном случае необходимо развернуть |
Cost | Да | Не типичный |
Пример имени службы | GraniteFalls.contoso.com | GraniteFalls.contoso.com или GraniteFalls.WestUS.CloudApp.Azure.Com |
DNS CNAME требуется | Да | Нет для имени службы домена Azure ( GraniteFalls.WestUS.CloudApp.Azure.Com ) |
Дополнительные сведения об использовании сертификата подпольной карты с помощью CMG см. в справке Set up a CMG.
Глобально уникальное имя
Набор масштабирования виртуальных машин
На домашней странице портала Azure выберите Создание ресурса в службах Azure.
Поиск набора масштабирования виртуальных машин. Нажмите Создать.
Выберите группу Подписка и Ресурсы, которую вы будете использовать для CMG.
Выберите область, которую вы будете использовать для CMG. Например, (США) Запад США.
Интерфейс отображает, доступно ли доменное имя или уже используется другой службой.
Не создавайте службу на портале, просто используйте этот процесс для проверки доступности имен.
Учетная запись хранилища CMG с поддержкой контента
Если вы также включаете CMG для контента, подтвердим, что это также уникальное имя учетной записи хранилища Azure. Если имя развертывания CMG уникально, а учетная запись хранилища — нет, диспетчер конфигурации не может получить службу в Azure. Повторите вышеперечисленный процесс на портале Azure со следующими изменениями:
Поиск учетной служба хранилища учетной записи.
Проверьте свое имя в поле служба хранилища учетной записи.
Выпуск сертификата
Сертификат проверки подлинности сервера CMG поддерживает следующие конфигурации:
Длина ключа 2048 или 4096 бит
Этот сертификат поддерживает основных поставщиков хранения для частных ключей сертификата (v3). Дополнительные сведения см. в обзоре сертификатов CNG v3.
Использование сертификата общедоступных поставщиков
Сторонний поставщик сертификатов не может создать сертификат для домена Azure, например, так как корпорация cloudapp.azure.com Майкрософт владеет этими доменами. Вы можете получить сертификат, выданный только для домена, который у вас есть. Основная причина получения сертификата у сторонного поставщика заключается в том, что ваши клиенты уже доверяют корневому сертификату поставщика.
Конкретный процесс получения этого сертификата зависит от поставщика. Дополнительные сведения можно получить у поставщика сторонних сертификатов.
Для общего имени сертификата веб-сервера (CN):
Чтобы определить имя службы, примените префикс имени развертывания () к доменным GraniteFalls именем организации ( contoso.com ).
Далее необходимо создать псевдоним DNS CNAME.
Использование корпоративного сертификата PKI
Выдача сертификата веб-сервера из PKI организации зависит от продукта. Инструкции по развертыванию сертификата службы для облачных точек распространения для служб сертификатов Active Directory. Этот процесс обычно применяется к сертификату проверки подлинности сервера CMG.
Для общего имени сертификата веб-сервера (CN):
Чтобы определить имя службы, у вас есть два варианта:
Используйте имя развертывания Azure. Этот параметр не требует псевдонима DNS CNAME. Например:
Если имя развертывания Azure изменится, потребуется перенастановка службы для изменения этого имени службы. Например, если имя службы находится в домене, вы не можете преобразовать классическую облачную службу cloudapp.net CMG в набор масштабов виртуальных машин. Если вы используете доменное имя для имени службы CMG, вы можете обновить DNS CNAME для нового имени развертывания.
Используйте это имя службы для общего имени сертификата (CN).
Создание псевдонима ЦНС CNAME
Если в имени службы CMG используется доменное имя организации (), необходимо создать запись канонического имени GraniteFalls.contoso.com DNS (CNAME). В этом псевдониме имя службы с именем развертывания.
Создание записи CNAME в общедоступных DNS организации. Служба CMG в Azure и все клиенты, которые ее используют, должны устранить имя службы. Например:
Contoso называет их CMG GraniteFalls.
В публичном пространстве имен DNS Contoso администратор DNS создает новую запись CNAME для имени службы с именем contoso.com GraniteFalls.contoso.com развертывания GraniteFalls.WestUS.CloudApp.Azure.Com Azure.
Клиентская политика Configuration Manager включает имя службы GraniteFalls.contoso.com CMG. Клиент решает имя службы с помощью псевдонима CNAME с именем GraniteFalls.WestUS.CloudApp.Azure.Com развертывания. Затем он может разрешить IP-адрес имени развертывания для связи со службой в Azure.
Дальнейшие действия
Продолжить настройку CMG, настроив Azure Active Directory (Azure AD):
Простая настройка взаимной проверки подлинности клиента и сервера с использованием TLS
Это руководство посвящено настройке защиты приложений с помощью TLS-аутентификации. При таком подходе возможность работы пользователей с приложением зависит от имеющихся у них сертификатов. То есть — разработчик может самостоятельно принимать решения о том, каким пользователям разрешено обращаться к приложению.
В учебном проекте, который будет здесь разобран, показаны основные настройки сервера и клиента. Их взаимодействие изначально осуществляется посредством HTTP. А это значит, что данные между ними передаются в незашифрованном виде. Наша задача заключается в том, чтобы обеспечить шифрование всего того, чем обмениваются клиент и сервер.
Мы рассмотрим следующие вопросы:
1. Запуск сервера
Для того чтобы организовать работу сервера — нам понадобится следующее:
В данном проекте содержится Maven-обёртка, поэтому запустить его можно и не устанавливая Maven. Тут будут приведены сведения и о стандартных командах, рассчитанных на mvn, и о командах, ориентированных на использование Maven-обёртки.
Если вы хотите запустить этот проект с использованием Java 8 — вы можете переключиться на более старую его версию с использованием нижеприведённой команды.
При работе с этой версией проекта рекомендовано следовать инструкциям, подготовленным специально для него. Найти их можно здесь.
Сервер можно привести в рабочее состояние, вызвав метод main класса App или выполнив следующую команду в корневой директории проекта:
Вот команда, рассчитанная на Maven-обёртку:
2. Отправка приветствия серверу (без шифрования)
Ответ должен выглядеть примерно так:
В клиенте реализован интеграционный тест, основанный на Cucumber. Его можно запустить, обратившись к классу ClientRunnerIT из IDE, или выполнив в корневой директории следующую команду:
При использовании Maven-обёртки это будет такая команда:
Тут имеется файл Hello.feature, который описывает шаги интеграционного теста. Этот файл можно найти в папке ресурсов теста клиентского проекта.
Есть и другой метод запуска и клиента, и сервера. Он представлен следующей командой, выполняемой в корневой директории проекта:
Вариант этой команды для Maven-обёртки выглядит так:
3. Включение HTTPS на сервере (односторонний TLS)
Речь идёт о следующих настройках:
Для того чтобы вышеописанные настройки вступили в силу — сервер надо перезапустить. Возможно, при этом вы увидите следующее исключение:
Причина его появления заключается в том, что серверу, для установки защищённого соединения с внешними сущностями, нужно хранилище ключей с сертификатом сервера. Сервер может предоставить более подробную информацию об этом в том случае, если воспользоваться следующими аргументами VM:
Для того решения этой проблемы нужно создать хранилище ключей, содержащее открытый и закрытый ключи для сервера. Открытый ключ будет передаваться пользователям. Так они смогут зашифровать данные, передаваемые серверу. Зашифрованные данные могут быть расшифрованы с использованием закрытого ключа сервера. Закрытый ключ сервера нельзя никому передавать, так как, имея этот ключ, злоумышленник может перехватить зашифрованные данные, которыми обмениваются клиент и сервер, и расшифровать их.
Создать хранилище ключей с открытым и закрытым ключами можно с помощью следующей команды:
Теперь нужно сообщить серверу о том, где именно находится хранилище ключей, и указать пароли. Сделаем это, отредактировав наш файл application.yml :
Замечательно! Только что мы настроили TLS-шифрование соединений между сервером и клиентом! Испытать сервер можно так:
Клиент можно запустить и прибегнув к классу ClientRunnerIT.
В результате можно будет увидеть следующее сообщение:
И приведём её к такому виду:
Попробуем снова запустить клиент. Это приведёт к выдаче такого сообщения:
Дело тут в том, что клиент собирается наладить обмен данными по HTTPS. Он, при выполнении процедуры рукопожатия, получает сертификат сервера, который он пока не может распознать. А это значит, что нам ещё нужно создать хранилище TrustStore. В таких хранилищах находятся доверенные сертификаты. Клиент сопоставляет то, что он получает в ходе процедуры рукопожатия, с тем, что есть в TrustStore. Если полученный им сертификат входит в список доверенных сертификатов — процедура продолжается. А прежде чем создавать TrustStore — нужно обзавестись сертификатом сервера.
Экспортировать сертификат сервера можно такой командой:
Теперь можно создать TrustStore для клиента и импортировать туда сертификат сервера такой командой:
TrustStore для клиента мы создали, но сам клиент пока об этом не знает. А это значит, что клиенту надо сообщить о том, что ему следует пользоваться TrustStore, указав адрес хранилища и пароль. Клиенту надо сообщить и о том, что включена аутентификация. Всё это делается путём приведения файла application.yml клиентского приложения к такому виду:
4. Аутентификация клиента (двусторонний TLS)
Приведём файл сервера application.yml к такому виду:
Если после этого запустить клиент, то он выдаст следующее сообщение об ошибке:
Это указывает на то, что клиент не обладает подходящим сертификатом. Точнее — у клиента пока вообще нет сертификата. Поэтому создадим сертификат следующей командой:
Нам ещё нужно создать TrustStore для сервера. Но, прежде чем создавать это хранилище, нужно иметь сертификат клиента. Экспортировать его можно так:
Теперь создадим TrustStore сервера, в котором будет сертификат клиента:
Мы создали для клиента дополнительное хранилище ключей, но клиент об этом не знает. Сообщим ему сведения об этом хранилище. Кроме того, клиенту нужно сообщить о том, что включена двусторонняя аутентификация.
Приведём файл application.yml клиента к такому виду:
Сервер тоже не знает о только что созданном для него TrustStore. Приведём его файл application.yml к такому виду:
Если снова запустить клиент — можно будет убедиться в том, что тест завершается успешно, и что клиент получает данные от сервера в защищённом виде.
Примите поздравления! Только что вы настроили двусторонний TLS!
5. Установление двустороннего TLS-соединения с использованием доверенного удостоверяющего центра
Есть и другой способ организации двусторонней аутентификации. Он основан на использовании доверенного удостоверяющего центра. У такого подхода есть сильные и слабые стороны.
1. Создание удостоверяющего центра
Обычно работают с уже существующими удостоверяющими центрами, которым, для подписи, нужно передавать сертификаты. Здесь же мы создадим собственный удостоверяющий центр и подпишем с его помощью сертификаты клиента и сервера. Для создания удостоверяющего центра воспользуемся такой командой:
Ещё можно воспользоваться существующим удостоверяющим центром.
2. Создание файла запроса на подпись сертификата
Вот её вариант для сервера:
Вот — эта команда для клиента:
Такой файл нужен удостоверяющему центру для подписи сертификата. Следующий шаг нашей работы заключается в подписании сертификата.
3. Подписание сертификата с помощью запроса на подпись сертификата
Вот соответствующая команда для клиента:
Вот команда для сервера:
4. Замена неподписанного сертификата подписанным
Экспортируем подписанный сертификат:
Выполним на клиенте следующие команды:
На сервере выполним такие команды:
5. Организация взаимодействия клиента и сервера, основанного исключительно на доверии к удостоверяющему центру
Теперь нужно настроить клиент и сервер так, чтобы они доверяли бы только удостоверяющему центру. Сделать это можно, импортировав сертификат удостоверяющего центра в хранилища TrustStore клиента и сервера.
Сделаем это, выполнив на клиенте следующую команду:
На сервере выполним такую команду:
В хранилищах TrustStore всё ещё хранятся собственные сертификаты клиента и сервера. Эти сертификаты нужно удалить.
Выполним на клиенте такую команду:
Вот — команда для сервера:
Если снова запустить клиент — можно видеть успешное прохождение теста. А это значит, что клиент и сервер успешно обмениваются данными, используя сертификаты, подписанные удостоверяющим центром.
6. Автоматизация различных подходов к аутентификации
Всё, о чём мы говорили выше, можно автоматизировать с помощью скриптов, которые находятся в папке script рассматриваемого нами проекта. Для запуска скриптов можете воспользоваться следующими командами:
Протестированные клиенты
Ниже приведён список протестированных клиентов. Настройки для HTTP-клиента, написанного на чистом Java, можно найти в классе ClientConfig. В директории service нашего проекта содержатся отдельные HTTP-клиенты, выполняющие демонстрационные запросы. Настройки HTTP-клиентов, основанных на Kotlin и Scala, включены в состав проекта в виде вложенных классов. Все примеры клиентов используют одну и ту же базовую конфигурацию SSL, созданную в классе SSLConfig.
- антхилл в мобайл легенд что
- Разбираемся с понятием развал схождения в автомобильном мире