Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Привет Хабр, это супер короткое и простое руководство для новичков о том, как подключаться по RDP по доменному имени, чтобы не вылезало назойливое предупреждение о сертификате, подписанным самим сервером. Нам понадобится WinAcme и домен.

Все, кто хоть раз пользовался RDP, видели эту надпись.

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

В руководстве приведены готовые команды для пущего удобства. Скопировал, вставил и заработало.

Так вот, это окно можно в принципе пропустить, если выдать сертификат подписанный сторонним, трастовым центром сертификации. В данном случае, Let’s Encrypt.

Сообщение об ошибке «Сервер, к которому вы подключены, использует сертификат безопасности, который не может быть проверен » часто возникает из-за проблем с сетью и подключением, вероятно, из-за ошибок имени хоста. При использовании Microsoft Outlook 2010 или 2013 эта ошибка может возникнуть, если введенные вами учетные данные почтового сервера неверны.

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Из-за этой ошибки вы не сможете использовать некоторые приложения, требующие Microsoft Outlook, или если вы хотите использовать свою любимую учетную запись электронной почты через Microsoft Outlook. В этой статье мы подробно рассмотрим потенциальные причины проблемы, а позже объясним возможные исправления, которые вы можете внедрить, чтобы решить проблему.

Организация взаимодействия клиента и сервера, основанного исключительно на доверии к удостоверяющему центру

Теперь нужно настроить клиент и сервер так, чтобы они доверяли бы только удостоверяющему центру. Сделать это можно, импортировав сертификат удостоверяющего центра в хранилища TrustStore клиента и сервера.

Сделаем это, выполнив на клиенте следующую команду:

keytool -v -importcert -file root-ca/root-ca.pem -alias root-ca -keystore client/src/test/resources/truststore.jks -storepass secret -noprompt

На сервере выполним такую команду:

В хранилищах TrustStore всё ещё хранятся собственные сертификаты клиента и сервера. Эти сертификаты нужно удалить.

Выполним на клиенте такую команду:

keytool -v -delete -alias server -keystore client/src/test/resources/truststore.jks -storepass secret

Вот — команда для сервера:

Если снова запустить клиент — можно видеть успешное прохождение теста. А это значит, что клиент и сервер успешно обмениваются данными, используя сертификаты, подписанные удостоверяющим центром.

Это руководство посвящено настройке защиты приложений с помощью TLS-аутентификации. При таком подходе возможность работы пользователей с приложением зависит от имеющихся у них сертификатов. То есть — разработчик может самостоятельно принимать решения о том, каким пользователям разрешено обращаться к приложению.

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Мы рассмотрим следующие вопросы:

  • Запуск сервера
  • Отправка приветствия серверу (без шифрования)
  • Аутентификация клиента (двусторонний TLS)
  • Установление двустороннего TLS-соединения с использованием доверенного удостоверяющего центра.
  • Автоматизация различных подходов к аутентификации

Вот некоторые важные термины, которыми мы будем пользоваться:

  • Идентификационные данные объекта: хранилище KeyStore, хранящее пару ключей — закрытый (private) и открытый (public).
  • TrustStore: хранилище KeyStore, содержащее один или большее количество сертификатов (открытых ключей). Это хранилище содержит список доверенных сертификатов. Оно хранит данные о приложениях, которым доверяет наше приложение.

Ниже вы найдёте несколько полезных ссылок:

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Всем известно, что при посещении сайта у которого “временно” что-то случилось c сертификатом вы обнаружите предупреждение, которое показывается, если сертификат безопасности не является доверенным net::ERR_CERT_AUTHORITY_INVALID?

Все современные браузеры показывают сообщение об ошибке HSTS

Что такое HSTS

Самый простой способ обхода данного запрета — это, разумеется, нажатие на вкладку “Дополнительные” и согласиться с Небезопасным режимом.

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Но не во всех браузерах как оказывается, есть данная возможность. Так я столкнулся с данной проблемой в Chrome на Mac OS

Разработчики данной операционной системы настолько обеспокоены безопасностью пользователей, что даже убрали доступ в «Небезопасном режиме» к сайту, несмотря на то, что это сайт владельца устройства.

Ну что ж, поскольку, вести разработку в других, более сговорчивых браузерах было не комфортно, вот способы как обойти эту проблему:

прямо на данной веб странице. Это даст возможность работать с сайтом без оповещение об ошибке на момент текущей сессии браузера, пока вы не закроете вкладку Chrome.

— Если же вам предстоит более длительная работа с сайтом, то рекомендую для этих нужд создать отдельного тестового пользователя на рабочем столе и указать ему необходимы флаги.

C:Program Files (x86)GoogleChromeApplicationchrome.exe» —ignore-certificate-errors

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Для Mac OS

Achtung! Данные манипуляции необходимо выполнять с выключенным Chrome приложением, иначе чуда не произойдет.

Если вы оставите сертификат ненадежным, то некоторые вещи не будут работать. Например, кэширование полностью игнорируется для ненадежных сертификатов.

Браузер напомнит, что вы находитесь в небезопасном режиме. Поэтому крайне не рекомендуется шастать по злачным сайтам Интернета с такими правами доступами.

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Надеюсь моя краткая статья кому-то пригодится при разработке и тестировании сайтов =)

Когда вы столкнетесь с этой проблемой, вы получите следующее полное сообщение об ошибке:

Проблема с сертификатом безопасности прокси-сервера. Имя в сертификате безопасности недействительно или не соответствует имени целевого сайта webmail.domain.com.

Outlook не может подключиться к прокси-серверу. (Код ошибки 0)

Возможные варианты сообщения об ошибке с сопровождающим кодом ошибки при возникновении ошибки могут быть следующими:

Проблема с безопасностью прокси-сервера сертификат,% s. Outlook не может подключиться к этому серверу. Проблема с сертификатом безопасности прокси-сервера% s. Имя в сертификате безопасности недействительно или не соответствует имени сайта. Outlook не может подключиться к этому серверу. Проблема с сертификатом безопасности прокси-сервера% s. Сертификат безопасности не получен от доверенного удостоверяющего центра. Outlook не может подключиться к этому серверу.

Согласно документации Microsoft, эта проблема может возникнуть, если выполняется одно или несколько из следующих условий:

Для подключения к серверу требуется центр сертификации (ЦС). Вы не доверяет центру сертификации в корне. сертификат может быть недействительным или отозван. сертификат не соответствует имени сайта. сторонняя надстройка или надстройка стороннего браузера препятствует доступу.

Если вы столкнулись с этой проблемой на своем ПК с Windows 11/10, вы можете попробовать наши рекомендуемые ниже решения без каких-либо конкретных закажите и посмотрите, поможет ли это исправить сообщение об ошибке Outlook. Проблема с сертификатом безопасности прокси-сервера.

Проверить сертификат прокси-сервераУстановить доверенный корневой сертификат Отключить стороннюю надстройку в Outlook Отключить надстройки стороннего браузераВручную настроить параметры прокси-сервера Exchange в Outlook

Давайте возьмем Ознакомьтесь с описанием процесса, связанного с каждым из перечисленных решений.

1] Проверить сертификат прокси-сервера

Для этого решения необходимо проверить сертификат, а затем обратиться к системному администратору, чтобы решить эту проблему. Проблема с сертификатом безопасности прокси-сервера.

Чтобы проверить прокси-сервер сертификат, выполните следующие действия:

В поле Действителен до должна быть указана дата, до которой сертификат действителен. Данные в поле Тема должны совпадать с названием сайта. Если это не так, обратитесь к ИТ-администратору.

2] Установите доверенный корневой сертификат

Когда возникает ошибка и появляется запрос В диалоговом окне Сертификат нажмите Установить сертификат . Нажмите Далее . Установите флажок Поместить все сертификаты в следующее хранилище ..Нажмите Обзор . Нажмите Доверенные корневые центры сертификации . Нажмите ОК . Нажмите Далее . Нажмите Готово ОК .

3] Отключить сторонние надстройки в Outlook

Еще одно жизнеспособное решение для исправления рассматриваемой ошибки-отключить сторонние надстройки. надстройка в Outlook. Для этого сначала нужно запустить Outlook в безопасном режиме, и, если Outlook успешно открывается в безопасном режиме, скорее всего, ошибка вызвана сторонними надстройками.

Чтобы отключить сторонние надстройки. Надстройки COM в Outlook, выполните следующие действия:

4] Отключите сторонние надстройки браузера

В зависимости от вашего браузера это решение требует, чтобы вы отключили сторонние надстройки браузера и просмотрите если это поможет решить проблему. В противном случае попробуйте следующее решение.

5] Вручную настройте параметры прокси-сервера Exchange в Outlook

Чтобы вручную настроить параметры прокси-сервера Exchange в Outlook, выполните следующие действия:

В качестве альтернативы, чтобы добиться того же результата, сделайте следующее:

Нажмите клавишу Windows + X , чтобы открыть меню опытного пользователя. Нажмите A на клавиатуре, чтобы запустить PowerShell в режиме администратора/с повышенными привилегиями. В консоли PowerShell введите или скопируйте и вставьте команду ниже и нажмите Enter. et-OutlookProvider EXPR-CertPrincipalName: $ null Выйти из PowerShell при выполнении командлета.

Читать также:  Как удалить сертификат из списка сертификатов криптопро

Вот и все!

Связанное сообщение : Ошибка 0x80004005, операция не удалась в Outlook

Почему моему Outlook не доверяют?

Если вы столкнулись с ошибкой сертификата безопасности Outlook.com или сообщением об ошибке. Сервер, к которому вы подключены, использует сертификат безопасности, который не может быть проверен-чаще всего распространенной причиной этой ошибки является неправильное имя хоста, настроенное в Microsoft Outlook.

Почему я получаю предупреждение о сертификате безопасности?

Причина, по которой вы можете получить сертификат безопасности предупреждение на вашем ПК с Windows 11/10 связано с неправильной датой и временем. Сертификаты безопасности используются веб-браузерами и компьютерами, чтобы убедиться, что конкретный сайт безопасен. Таким образом, если на вашем компьютере неправильная дата и время, это может привести к тому, что сертификаты окажутся недействительными, и ваш веб-браузер начнет выдавать предупреждения системы безопасности. Итак, убедитесь, что дата и время на вашем компьютере правильные.

Как мне избавиться от ошибок сертификата безопасности?

Чтобы избавиться от ошибок сертификата безопасности в Windows 11/10 , вам необходимо отключить эту опцию. Следуйте этим инструкциям:

Почему моему сертификату электронной почты не доверяют ?

Наиболее вероятная причина, по которой вашему сертификату электронной почты не доверяют, связана с неправильными настройками электронной почты. Когда вы получаете сообщение об ошибке сертификата небезопасно для своей электронной почты, это связано с тем, что вы синхронизировали учетную запись электронной почты, которая принадлежит вам или домену вашей организации, но есть несоответствие в настройках SMTP/IMAP, настройках порта или домене. настройки имени.

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Когда вы столкнетесь с этой проблемой, вы получите следующее полное сообщение об ошибке;

Проблема с сертификатом безопасности прокси-сервера.Имя в сертификате безопасности недействительно или не соответствует имени целевого сайта webmail.domain.com.

Outlook не может подключиться к прокси-серверу. (Код ошибки 0)

  • Проблема с сертификатом безопасности прокси-сервера% s. Outlook не может подключиться к этому серверу.
  • Проблема с сертификатом безопасности прокси-сервера% s. Имя в сертификате безопасности недействительно или не соответствует имени сайта. Outlook не может подключиться к этому серверу.
  • Проблема с сертификатом безопасности прокси-сервера% s. Сертификат безопасности не получен от доверенного удостоверяющего центра. Outlook не может подключиться к этому серверу.
  • Для подключения к серверу требуется центр сертификации (ЦС).
  • Вы не доверяли центру сертификации в корне.
  • Сертификат может быть недействительным или отозванным.
  • Сертификат не соответствует названию сайта.
  • Сторонняя надстройка или сторонняя надстройка браузера препятствует доступу.

Проблема с сертификатом безопасности прокси-сервера — ошибка Outlook

Если вы столкнулись с этой проблемой на своем ПК с Windows 11/10, вы можете попробовать наши рекомендуемые решения ниже в произвольном порядке и посмотреть, поможет ли это исправить сообщение об ошибке Outlook. Проблема с сертификатом безопасности прокси-сервера.

  • Проверить сертификат прокси-сервера
  • Установите доверенный корневой сертификат
  • Отключить стороннюю надстройку в Outlook
  • Отключить сторонние надстройки браузера
  • Настройка параметров прокси-сервера Exchange вручную в Outlook

Давайте посмотрим на описание процесса, связанного с каждым из перечисленных решений.

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Это решение требует, чтобы вы проверили сертификат, а затем обратитесь к системному администратору, чтобы решить эту проблему. Проблема с сертификатом безопасности прокси-сервера проблема.

Чтобы проверить сертификат прокси-сервера, сделайте следующее:

  • Затем щелкните значок замка в адресной строке.
  • Во всплывающем меню щелкните Безопасное соединение.
  • Щелкните значок сертификата безопасности, чтобы просмотреть сертификат безопасности.
  • На странице свойств сертификата безопасности щелкните вкладку Сведения.
  • Теперь запишите информацию в полях, выделенных на изображении выше.

В поле Действителен до должна быть указана дата, до которой сертификат действителен. Данные в поле «Тема» должны совпадать с названием сайта. Если это не так, обратитесь к своему ИТ-администратору.

  • Когда возникает ошибка и появляется диалоговое окно «Сертификат», нажмите «Установить сертификат».
  • Нажмите «Далее.
  • Установите флажок Поместить весь сертификат в следующее хранилище.
  • Щелкните Обзор.
  • Щелкните Доверенные корневые центры сертификации.
  • Щелкните ОК.
  • Щелкните Готово.

Еще одно жизнеспособное решение для исправления рассматриваемой ошибки — отключить стороннюю надстройку в Outlook. Для этого вам сначала нужно запустить Outlook в безопасном режиме, и если Outlook успешно открывается в безопасном режиме, скорее всего, ошибка вызвана сторонними надстройками.

Чтобы отключить сторонние надстройки COM в Outlook, сделайте следующее:

  • Запустите Outlook в безопасном режиме.
  • Теперь снимите флажок для сторонних надстроек, которые вы хотите отключить.
  • Перезапустите Outlook.

В зависимости от вашего браузера для этого решения необходимо отключить сторонние надстройки браузера и посмотреть, поможет ли это решить проблему. В противном случае попробуйте следующее решение.

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Чтобы вручную настроить параметры прокси-сервера Exchange в Outlook, сделайте следующее:

  • Откройте Microsoft Outlook.
  • Теперь введите адрес ниже в поле Подключаться только к прокси-серверам, у которых есть это основное имя в поле сертификата.
  • Нажмите клавишу Windows + X, чтобы открыть меню опытного пользователя.
  • Коснитесь A на клавиатуре, чтобы запустить PowerShell в режиме администратора / с повышенными правами.
  • В консоли PowerShell введите или скопируйте и вставьте команду ниже и нажмите Enter.

Set-OutlookProvider EXPR -CertPrincipalName: $ null

Связанное сообщение: Ошибка 0x80004005, сбой операции в Outlook

Если вы столкнулись с Ошибка сертификата безопасности Outlook.com или сообщение об ошибке Сервер, к которому вы подключены, использует сертификат безопасности, который не может быть проверен. — наиболее распространенной причиной этой ошибки является неправильное имя хоста, настроенное в Microsoft Outlook.

Причина, по которой вы можете получать предупреждение о сертификате безопасности на вашем ПК с Windows 11/10, связана с неправильной датой и временем. Сертификаты безопасности используются веб-браузерами и компьютерами, чтобы убедиться, что конкретный сайт безопасен. Таким образом, если на вашем компьютере неправильная дата и время, это может привести к тому, что сертификаты будут отображаться недействительными, и ваш веб-браузер начнет выдавать предупреждения системы безопасности. Итак, убедитесь, что дата и время на вашем компьютере правильные.

Чтобы избавиться от ошибок сертификата безопасности в Windows 11/10, вам необходимо отключить эту опцию. Следуйте этим инструкциям:

  • Откройте Панель управления.
  • Выберите Свойства обозревателя.
  • Щелкните вкладку Дополнительно.
  • Прокрутите вниз до раздела Безопасность.
  • В разделе «Безопасность» снимите флажок «Предупреждать о несоответствии адреса сертификата».
  • Перезагрузите компьютер.

Почему моему сертификату электронной почты не доверяют?

Наиболее вероятная причина того, что вашему сертификату электронной почты не доверяют, — неправильные настройки электронной почты. Когда вы получаете сообщение об ошибке сертификата небезопасно для своей электронной почты, это связано с тем, что вы синхронизировали учетную запись электронной почты, которая принадлежит вам или домену вашей организации, но есть несоответствие в настройках SMTP / IMAP, настройках порта или домене. настройки имени.

Качаем WinAcme

Качаем WinAcme с их сайта. Архив лучше всего распаковать туда, куда вы не доберетесь, исполняемые файлы и скрипты вам еще пригодятся в будущем для автоматического обновления сертификата. Лучше всего вытряхнуть архив в C:WinAcme.

Протестированные клиенты

Пользуетесь ли вы взаимной проверкой подлинности клиента и сервера в своих проектах?

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Что вызывает сообщение об ошибке «Сервер, к которому вы подключены, использует сертификат безопасности, который не может быть проверен»?

Эта ошибка может появиться из-за того, что MS Outlook не может завершить процесс подключения, будь то учетная запись электронной почты или что-то еще. Обычно это вызвано некоторыми из следующих проблем:

  • Неверное имя хоста: во многих случаях, когда пользователи настраивают MS Outlook для новой учетной записи, они ошибочно вводят неправильное имя хоста, и, поскольку, когда имя хоста неверно, нет никаких шансов на какое-либо соединение.
  • Интернет-провайдер изменил имя почтового сервера: другая причина может заключаться в том, что интернет-провайдер изменил свой почтовый сервер, то есть его имя, и, таким образом, вы перенаправляетесь со старого адреса на новый, и этот новый адрес отсутствует в их списке сертификатов SSL
  • Блокировка портов: если вы находитесь в школе, университете или любом другом подобном месте, которое находится под ограничениями, и некоторые из портов SSL, которые использует почтовый клиент MS Outlook, заблокированы, вы не сможете подключиться к учетной записи электронной почты, и вы будете получить эту ошибку.
  • Неправильные порты в конфигурации: если вы ввели неправильные номера портов для своего почтового сервера во время настройки учетной записи, вы получите эту ошибку. Поскольку неправильные номера портов означают отсутствие соединения почтового клиента и почтового сервера.
  • Проблема с временем / датой: если на вашем компьютере установлены неправильные день / время, это может привести к появлению этого сообщения об ошибке.
  • Проблемы с сертификатом. Иногда причиной этой проблемы могут быть недействительные сертификаты между почтовым сервером и почтовым клиентом. Если сертификаты вашего MS Outlook недействительны для почтового сервера, к которому вы хотите подключиться, вы получите эту ошибку.
Читать также:  Сертификат соответствия на смесь сухую кладочную смесь

Теперь, чтобы решить проблему, вы можете использовать решения, приведенные ниже.

Решение 1. Сопоставьте имя сертификата

Первое решение, которое вам нужно найти, это то, что имя сертификата в MS Outlooks совпадает с именем почтового сервера. Для этого следуйте данной инструкции:

  • Как только вы получите сообщение об ошибке, нажмите « Просмотреть сертификат» .
  • Затем нажмите « Выдано имени » и убедитесь, что имя совпадает с именем почтового сервера.
  • Если это не так, измените его и попробуйте подключиться снова. Надеюсь, это решит вашу проблему.

Важно отметить, что это может не сработать, если сертификат имеет несколько имен. В таком сценарии вам нужно попробовать разные доступные имена и посмотреть, сработает ли какое-либо из них. В случае, если они этого не делают, вам следует связаться с вашим интернет-провайдером по поводу любых изменений, внесенных в их DNS, и запросить дополнительную помощь.

Решение 2. Используйте домен вашей хостинговой компании в качестве почтового сервера (при использовании общего веб-хостинга)

Поскольку на общем веб-хостинге компания веб-хостинга размещает множество почтовых серверов во многих доменах, и все они указывают на один и тот же адрес, учитывая тот же адрес почтового сервера. Кроме того, эти веб-хостинговые компании не могут продлить SSL для каждого домена, так как это очень дорого, поэтому они делают это только для своего собственного доменного имени. Таким образом, в такие моменты возникают проблемы с сертификатом, из-за которых вы не можете подключиться к своему почтовому серверу, используя собственное доменное имя, и получаете предупреждение о сертификате SSL.

Поэтому в качестве почтового сервера рекомендуется использовать доменное имя вашего хостинга:

Например: mail.yourhostingdomain.com вместо mail.yourdomain.com

Решение 3. Добавьте порты без SSL

Иногда в университетах, школах и других местах существуют некоторые ограничения, и порты многих популярных почтовых серверов блокируются, а также наиболее распространенные порты SSL, например, порт 995 SSL POP, IMAP 993 и SMPTP 465. В таком случае, что вы можете попробовать добавить порты без SSL и подключиться к этим портам, поскольку они не могут быть заблокированы в вашей сети. Вы можете сделать это, следуя инструкциям в следующем решении. Порты:

Порт POP без SSL: 110 Порт IMAP без SSL: 143 Порт SMTP без SSL: 587

Решение 4. Измените исходящий порт SMTP на 26

Многие интернет-провайдеры блокируют SMTP-порт 25 из-за рассылки спама и т. Д., Поэтому, если ваш интернет-провайдер также заблокировал его, вам необходимо изменить исходящий SMTP-порт на 26. Вот как это сделать:

  • Перейдите в Файл и на вкладке Информация щелкните Параметры учетной записи, а затем снова выберите Параметры учетной записи из раскрывающегося списка.
  • Выделите свою учетную запись электронной почты и нажмите Изменить .
  • Теперь нажмите « Дополнительные настройки» и перейдите на вкладку « Дополнительно ».
  • Измените исходящий порт SMTP на 26 .
  • Щелкните ОК.

Рекомендуется не устанавливать сертификаты, если это не специальный сертификат или сертификат только для определенного почтового сервера.

Хорошо то, что вам вообще не нужно устанавливать сертификаты при подключении ко многим популярным почтовым серверам.

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

Запуск сервера

Для того чтобы организовать работу сервера — нам понадобится следующее:

  • Eclipse, Intellij IDEA (или любой другой текстовой редактор вроде VIM)
  • Доступ к терминалу
  • Копия этого проекта

Если вы хотите приступить к экспериментам и при этом ничего не устанавливать — можете открыть вышеупомянутый проект в онлайновой среде разработки Gitpod.

В данном проекте содержится Maven-обёртка, поэтому запустить его можно и не устанавливая Maven. Тут будут приведены сведения и о стандартных командах, рассчитанных на mvn, и о командах, ориентированных на использование Maven-обёртки.

Если вы хотите запустить этот проект с использованием Java 8 — вы можете переключиться на более старую его версию с использованием нижеприведённой команды.

git checkout tags/java-8-compatible

При работе с этой версией проекта рекомендовано следовать инструкциям, подготовленным специально для него. Найти их можно здесь.

Сервер можно привести в рабочее состояние, вызвав метод main класса App или выполнив следующую команду в корневой директории проекта:

cd server/ && mvn spring-boot:run

Вот команда, рассчитанная на Maven-обёртку:

cd server-with-spring-boot/ && ./../mvnw spring-boot:run

Подписание сертификата с помощью запроса на подпись сертификата

Вот соответствующая команда для клиента:

keytool -v -gencert -infile client/src/test/resources/client.csr -outfile client/src/test/resources/client-signed.cer -keystore root-ca/identity.jks -storepass secret -alias root-ca -ext KeyUsage=digitalSignature,dataEncipherment,keyEncipherment,keyAgreement -ext ExtendedKeyUsage=serverAuth,clientAuth

Вот команда для сервера:

Отправка приветствия серверу (без шифрования)

Сейчас сервер работает на порте, используемом по умолчанию (8080) без шифрования. С помощью следующей команды, задействующей curl, можно обратиться к конечной точке hello:

Ответ должен выглядеть примерно так:

Обратиться к серверу можно и с использованием клиента, код которого находится в директории client. Клиент зависит от других компонентов проекта. Поэтому, прежде чем его запускать, нужно выполнить в корневой директории проекта команду mvn install или ./mvnw install.

В клиенте реализован интеграционный тест, основанный на Cucumber. Его можно запустить, обратившись к классу ClientRunnerIT из IDE, или выполнив в корневой директории следующую команду:

cd client/ && mvn exec:java

При использовании Maven-обёртки это будет такая команда:

cd client/ && ./../mvnw exec:java

Тут имеется файл Hello.feature, который описывает шаги интеграционного теста. Этот файл можно найти в папке ресурсов теста клиентского проекта.

Есть и другой метод запуска и клиента, и сервера. Он представлен следующей командой, выполняемой в корневой директории проекта:

mvn clean verify

Вариант этой команды для Maven-обёртки выглядит так:

./mvnw clean verify

Клиент, по умолчанию, отправляет запросы к localhost, так как он рассчитан на то, что сервер выполняется на том же компьютере, что и он сам. Если сервер работает на другой машине — соответствующий URL можно передать клиенту при запуске, воспользовавшись следующим аргументом VM:

Открываем 80 порт

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

New-NetFirewallRule -DisplayName 80-TCP-IN -Direction Inbound -Protocol TCP -Enabled True -LocalPort 80

Добавляем А запись

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Просто добавляем A запись и вписываем в неё IP адрес сервера. На этом работа с доменом окончена.

Автоматизация различных подходов к аутентификации

Всё, о чём мы говорили выше, можно автоматизировать с помощью скриптов, которые находятся в папке script рассматриваемого нами проекта. Для запуска скриптов можете воспользоваться следующими командами:

  • ./configure-one-way-authentication — настройка односторонней аутентификации.
  • ./configure-two-way-authentication-by-trusting-each-other my-company-name — настройка двусторонней аутентификации.
  • ./configure-two-way-authentication-by-trusting-root-ca my-company-name — настройка двусторонней аутентификации с использованием удостоверяющего центра.

Создание удостоверяющего центра

Обычно работают с уже существующими удостоверяющими центрами, которым, для подписи, нужно передавать сертификаты. Здесь же мы создадим собственный удостоверяющий центр и подпишем с его помощью сертификаты клиента и сервера. Для создания удостоверяющего центра воспользуемся такой командой:

Читать также:  Где взять личный сертификат для электронной подписи

keytool -v -genkeypair -dname «CN=Root-CA,OU=Certificate Authority,O=Thunderberry,C=NL» -keystore root-ca/identity.jks -storepass secret -keypass secret -keyalg RSA -keysize 2048 -alias root-ca -validity 3650 -deststoretype pkcs12 -ext KeyUsage=digitalSignature,keyCertSign -ext BasicConstraints=ca:true,PathLen:3

Ещё можно воспользоваться существующим удостоверяющим центром.

Замена неподписанного сертификата подписанным

В хранилище идентификационных данных сервера и клиента всё ещё хранится неподписанный сертификат. Сейчас можно заменить его на подписанный. У инструмента keytool есть одна не вполне понятная особенность. А именно — он не позволяет напрямую импортировать в хранилище подписанный сертификат. Если попытаться это сделать — будет выведено сообщение об ошибке. Сертификат, подписанный удостоверяющим центром, должен быть представлен в файле identity.jks.

Экспортируем подписанный сертификат:

keytool -v -exportcert -file root-ca/root-ca.pem -alias root-ca -keystore root-ca/identity.jks -storepass secret -rfc

Выполним на клиенте следующие команды:

keytool -v -importcert -file root-ca/root-ca.pem -alias root-ca -keystore client/src/test/resources/identity.jks -storepass secret -noprompt
keytool -v -importcert -file client/src/test/resources/client-signed.cer -alias client -keystore client/src/test/resources/identity.jks -storepass secret
keytool -v -delete -alias root-ca -keystore client/src/test/resources/identity.jks -storepass secret

На сервере выполним такие команды:

Создание файла запроса на подпись сертификата

Для того чтобы подписать сертификат — нужен .csr-файл (Certificate Signing Request, файл запроса на подпись сертификата). Создать его можно с помощью особой команды.

Вот её вариант для сервера:

Вот — эта команда для клиента:

keytool -v -certreq -file client/src/test/resources/client.csr -keystore client/src/test/resources/identity.jks -alias client -keypass secret -storepass secret -keyalg rsa

Такой файл нужен удостоверяющему центру для подписи сертификата. Следующий шаг нашей работы заключается в подписании сертификата.

Включение HTTPS на сервере (односторонний TLS)

Теперь давайте разберёмся с тем, как защитить сервер с помощью TLS. Сделать это можно, добавив соответствующие свойства в файл application.yml, хранящий настройки приложения.

Речь идёт о следующих настройках:

server:
port: 8443
ssl:
    enabled: true

Для того чтобы вышеописанные настройки вступили в силу — сервер надо перезапустить. Возможно, при этом вы увидите следующее исключение:

IllegalArgumentException: Resource location must not be null

Причина его появления заключается в том, что серверу, для установки защищённого соединения с внешними сущностями, нужно хранилище ключей с сертификатом сервера. Сервер может предоставить более подробную информацию об этом в том случае, если воспользоваться следующими аргументами VM:

Для того решения этой проблемы нужно создать хранилище ключей, содержащее открытый и закрытый ключи для сервера. Открытый ключ будет передаваться пользователям. Так они смогут зашифровать данные, передаваемые серверу. Зашифрованные данные могут быть расшифрованы с использованием закрытого ключа сервера. Закрытый ключ сервера нельзя никому передавать, так как, имея этот ключ, злоумышленник может перехватить зашифрованные данные, которыми обмениваются клиент и сервер, и расшифровать их.

Создать хранилище ключей с открытым и закрытым ключами можно с помощью следующей команды:

Теперь нужно сообщить серверу о том, где именно находится хранилище ключей, и указать пароли. Сделаем это, отредактировав наш файл application.yml:

server:
  port: 8443
  ssl:
    enabled: true
    key-store: classpath:identity.jks
    key-password: secret
    key-store-password: secret

Замечательно! Только что мы настроили TLS-шифрование соединений между сервером и клиентом! Испытать сервер можно так:

Клиент можно запустить и прибегнув к классу ClientRunnerIT.

В результате можно будет увидеть следующее сообщение:

java.net.ConnectException: Connection refused (Connection refused)

Возникает такое ощущение, что клиент пытается поприветствовать сервер, а сервер ему найти не удаётся. Проблема заключается в том, что клиент пытается обратиться к серверу, работающему на порте 8080, а сервер ждёт запросов на порте 8443. Исправим это, внеся некоторые изменения в класс Constants. А именно — найдём эту строку:

И приведём её к такому виду:

Попробуем снова запустить клиент. Это приведёт к выдаче такого сообщения:

javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Экспортировать сертификат сервера можно такой командой:

Теперь можно создать TrustStore для клиента и импортировать туда сертификат сервера такой командой:

TrustStore для клиента мы создали, но сам клиент пока об этом не знает. А это значит, что клиенту надо сообщить о том, что ему следует пользоваться TrustStore, указав адрес хранилища и пароль. Клиенту надо сообщить и о том, что включена аутентификация. Всё это делается путём приведения файла application.yml клиентского приложения к такому виду:

client:
  ssl:
    one-way-authentication-enabled: true
    two-way-authentication-enabled: false
    trust-store: truststore.jks
    trust-store-password: secret

Разрешаем выполнение скриптов

Чтобы WinAcme смог без проблем импортировать новый сертификат, нужно разрешить выполнение скриптов. Для этого переходив в папку /Scripts/

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Перед запуском WinAcme нам нужно разрешить выполнение двух скриптов. Для этого двойным кликом запустите PSRDSCerts.bat из папки со скриптами.

Аутентификация клиента (двусторонний TLS)

Следующий шаг нашей работы заключается такой настройке сервера, чтобы он требовал бы аутентификации клиентов. Благодаря этим настройкам мы принудим клиентов идентифицировать себя. При таком подходе сервер тоже сможет проверить подлинность клиента, и то, входит ли он в число доверенных сущностей. Включить аутентификацию клиентов можно, воспользовавшись свойством client-auth, сообщив серверу о том, что ему нужно проверять клиентов.

Приведём файл сервера application.yml к такому виду:

server:
  port: 8443
  ssl:
    enabled: true
    key-store: classpath:identity.jks
    key-password: secret
    key-store-password: secret
    client-auth: need

Если после этого запустить клиент, то он выдаст следующее сообщение об ошибке:

javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate

Это указывает на то, что клиент не обладает подходящим сертификатом. Точнее — у клиента пока вообще нет сертификата. Поэтому создадим сертификат следующей командой:

keytool -v -genkeypair -dname «CN=Suleyman,OU=Altindag,O=Altindag,C=NL» -keystore client/src/test/resources/identity.jks -storepass secret -keypass secret -keyalg RSA -keysize 2048 -alias client -validity 3650 -deststoretype pkcs12 -ext KeyUsage=digitalSignature,dataEncipherment,keyEncipherment,keyAgreement -ext ExtendedKeyUsage=serverAuth,clientAuth

Нам ещё нужно создать TrustStore для сервера. Но, прежде чем создавать это хранилище, нужно иметь сертификат клиента. Экспортировать его можно так:

keytool -v -exportcert -file client/src/test/resources/client.cer -alias client -keystore client/src/test/resources/identity.jks -storepass secret -rfc

Теперь создадим TrustStore сервера, в котором будет сертификат клиента:

Мы создали для клиента дополнительное хранилище ключей, но клиент об этом не знает. Сообщим ему сведения об этом хранилище. Кроме того, клиенту нужно сообщить о том, что включена двусторонняя аутентификация.

Приведём файл application.yml клиента к такому виду:

client:
  ssl:
    one-way-authentication-enabled: false
    two-way-authentication-enabled: true
    key-store: identity.jks
    key-password: secret
    key-store-password: secret
    trust-store: truststore.jks
    trust-store-password: secret

Сервер тоже не знает о только что созданном для него TrustStore. Приведём его файл application.yml к такому виду:

server:
  port: 8443
  ssl:
    enabled: true
    key-store: classpath:identity.jks
    key-password: secret
    key-store-password: secret
    trust-store: classpath:truststore.jks
    trust-store-password: secret
    client-auth: need

Если снова запустить клиент — можно будет убедиться в том, что тест завершается успешно, и что клиент получает данные от сервера в защищённом виде.

Примите поздравления! Только что вы настроили двусторонний TLS!

Устанавливаем сертификат

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Дальше скопируйте строку ниже и введите имя домена, по которому хотите подключатсяь к серверу и выполните команду.

После этого сертификат подписывающий домен встанет на место старого. Обновлять вручную ничего не нужно, через 60 дней программа продлит сертификат сама.

Готово! Вы великолепны и избавились от надоедливой ошибки.

А какие системные ошибки раздражают вас?

Настройте взаимную аутентификацию клиента и сервера с помощью TLS

Установление двустороннего TLS-соединения с использованием доверенного удостоверяющего центра

Есть и другой способ организации двусторонней аутентификации. Он основан на использовании доверенного удостоверяющего центра. У такого подхода есть сильные и слабые стороны.

  • Клиентам не нужно добавлять в свои хранилища сертификат сервера.
  • Серверу не нужно добавлять в своё хранилище все сертификаты клиентов.
  • Меньше времени уходит на поддержку такой конфигурации, так как срок действия может истечь лишь у сертификата удостоверяющего центра.

Рассмотрим пошаговый план действий по установлению двустороннего TLS-соединения с использованием доверенного удостоверяющего центра.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *