Перейти к содержанию

TLS-сертификат

Введение

Чтобы обеспечить безопасность соединения между клиентом и SCADA-сервером, передаваемые данные шифруются. В случае перехвата пакетов в локальной сети, злоумышленник не сможет прочитать содержимое или подменить данные, так как для расшифровки сеанса требуются ключи, которыми располагают только участники соединения. Для шифрования данных используется протокол TLS, а для подтверждения подлинности узла — TLS-сертификат.

Термины и сокращения

TLS (англ. transport layer security — протокол защиты транспортного уровня) — криптографический протокол шифрования и аутентификации, обеспечивающий защищенную передачу данных между клиентом и сервером.

TLS-сертификат — электронный документ, связывающий идентификатор сервера (например, доменное имя или IP-адрес) с его публичным ключом. Сертификат позволяет клиенту проверить подлинность сервера в процессе установления TLS-соединения.

Информация

В некторых источниках TLS-сертификаты иногда называют SSL-сертификатами. Это название сложилось исторически: SSL и TLS относятся к одному семейству протоколов, однако SSL на сегодняшний день устарел и не используется.

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

Сертификаты подписываются центрами сертификации (CA — Certificate Authority). Если сертификат подписан центром сертификации, которому клиент доверяет, клиент может проверить цепочку доверия от сертификата сервера до доверенного корневого сертификата.

Расположение

Служебные файлы сертификата в "Симплайт 5" формируется автоматически при установке системы и находятся в каталоге:

  • ОС Windows: C:\Users\Public\Documents\SimpLight_5.0\certs
  • ОС Linux: /var/lib/simplight/common/certs

"Симплайт 5" обычно выпускает сертификат на 6 лет.

Состав каталога

rootCA.crt — корневой сертификат CA

Сертификат центра сертификации, который поставляется разработчиком системы. Он устанавливается автоматически во время инсталляции системы.
cert.crt — сертификат сервера

Сертификат, который сервер предъявляет клиенту при установлении TLS-соединения.

Сертификат содержит:
  • публичный ключ сервера;
  • идентификаторы, для которых выдан сертификат (например, IP-адреса или доменные имена);
  • срок действия;
  • сведения о центре сертификации, выдавшем сертификат;
  • цифровую подпись центра сертификации.
Клиент проверяет сертификат сервера, в том числе его срок действия, соответствие имени или IP-адреса и цепочку доверия до доверенного CA.
priv.key — приватный ключ сервера

Приватный ключ сервера — скрытый ключ, соответствующий публичному ключу, содержащемуся в cert.crt.

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

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

Файл priv.key необходимо защищать:
  • он не должен быть доступен неавторизованным пользователям или третьим лицам;
  • доступ к нему должна иметь только служба сервера "Симплайт 5" и необходимые системные компоненты;
  • резервные копии, содержащие priv.key, должны храниться с ограничением доступа, поскольку компрометация приватного ключа может поставить под угрозу безопасность TLS-соединений.
Компрометация приватного ключа может позволить злоумышленнику использовать соответствующий сертификат сервера, поэтому при подозрении на утечку необходимо перевыпустить сертификат.

Принцип работы

Внимание

Для установки TLS-соединения клиента с сервером, помимо валидного сертификата и приватного ключа, необходимо, чтобы на обоих устройствах были правильно настроены время и часовой пояс.

Упрощенно установление TLS-соединения происходит следующим образом:

  1. Клиент инициирует подключение к серверу.
  2. В процессе TLS-рукопожатия сервер предъявляет клиенту сертификат cert.crt.
  3. Клиент проверяет сертификат: срок его действия, соответствие имени или IP-адреса сервера и цепочку доверия до доверенного CA.
  4. Если сертификат не прошел проверку, TLS-соединение не устанавливается. Клиент отображает предупреждение или сообщение об ошибке.
  5. Если сертификат прошел проверку, клиент и сервер продолжают TLS-рукопожатие, согласовывают параметры соединения и устанавливают сеансовые ключи.
  6. После завершения TLS-рукопожатия передаваемые данные защищаются с помощью установленных сеансовых ключей.

Перевыпуск сертификата

Перевыпуск может потребоваться, например, в следующих случаях:

  • срок действия текущего сертификата истек либо еще не начался;
  • изменился IP-адрес сервера;
  • необходимо добавить дополнительные IP-адреса или доменные имена;
  • изменилось сетевое окружение сервера;
  • есть подозрение на компрометацию приватного ключа;
  • сервер был восстановлен из резервной копии и сертификат не соответствует текущей конфигурации.

Перевыпустить TLS-сертификат сервера можно с помощью соответствующей кнопки в панели управления HMI-клиента.

При перевыпуске система генерирует новую ключевую пару (priv.key и публичный ключ), формирует новый сертификат (cert.crt) и подписывает его существующим корневым сертификатом (rootCA.crt).

Дополнительные IP-адреса

При перевыпуске сертификата появляется диалоговое окно "Дополнительные IP-адреса". Оно предназначено для указания дополнительных IP-адресов сервера, по которым клиенты могут устанавливать TLS-соединение. Например, сервер может иметь несколько сетевых интерфейсов или быть доступен одновременно из локальной сети и через VPN. Указанные адреса включаются в сертификат сервера и позволяют клиенту проверить соответствие адреса подключения сертификату.

Если вам не нужно указывать дополнительные адреса, а необходимо просто обновить сертификат, просто оставьте это поле пустым и нажмите "Ок".

Компрометация приватного ключа

Если есть основания полагать, что файл priv.key стал доступен злоумышленникам (например, резервная копия была скомпрометирована или сервер подвергся хакерской атаке), необходимо как можно скорее перевыпустить сертификат.

Сертификат внешнего CA

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

Разместите служебные файлы в каталоге certs с именами:

  • cert.crt — сертификат сервера;
  • priv.key — соответствующий ему приватный ключ.

При замене сертификата убедитесь, что публичный ключ в cert.crt соответствует priv.key, а сертификат содержит все необходимые имена и IP-адреса, по которым клиенты подключаются к серверу.

После того как вы заменили файлы, обязательно перезапустите сервер.

Диагностика сертификатов

Информация

Команды в этом подразделе приведены для PowerShell (Windows) и Bash (Linux). Для их выполнения в системе должен быть установлен OpenSSL — утилита командной строки, входящая в состав одноименного криптографического пакета. Команды идентичны для обеих оболочек.

Установка OpenSSL в ОС Windows

01. Откройте PowerShell от имени администратора и установите службу OpenSSL:
winget install ShiningLight.OpenSSL

02. Определите путь к исполняемому файлу openssl.exe:
Get-ChildItem "C:\Program Files" -Filter openssl.exe -Recurse -ErrorAction SilentlyContinue

03. Убедитесь, что путь есть в переменной окружения Path.
04. Для проверки версии установленной службы выполните команду:
openssl version

Чтобы получить более подробную информацию о центре сертификации, сроке действия сертификата, доверенных IP-адресах и других важных деталях, перейдите в каталог certs и выполните следующую команду:

openssl x509 -in cert.crt -text -noout
Чтобы сравнить публичные ключи, сначала выполните команду для файла сертификата cert.crt:

cert.crt
openssl x509 -in cert.crt -pubkey -noout
Затем для файла приватного ключа priv.key

priv.key
openssl pkey -in priv.key -pubout

Команда покажет публичный ключ в терминале:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Rr3EYTDu6tFJy+H5wtp
Yfl7+f6JhXAbUoUN3EGrGDC4INKMt0PNlo1jjT3fhJA6LSwsA+rDKTGswE6GpZXB
6ZhjYFsQudS/Qsl7mDUZtVu/osGPxPi/AXsdots8sPBtZzetr+NjcAX4SHDq6vSs
YEaSllMEJ+TgSEDICjYBMccajpTfwqbOfiZyiN1d3CQkSaxjrEFdmJBTLqbdpju7
kx59WC1wF77mJSErZa3jH99o3rn7AMk9w/Fcui5kij8vi91gHGj7IuePYBRWrayT
uVYY5/WX7tvSlM/nXfrvnrMio0r5mlu1vGcoBh0MW+2zIHwqdTjecZMoCrrTy6HI
uwIDAQAB
-----END PUBLIC KEY-----

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

Иногда публичный ключ может занимать несколько строк или десятки строк. Сравнивать такие ключи не очень удобно. В таких случаях можно сравнить отпечатки ключей. Такие отпечатки занимают всего одну строку.

Получить отпечаток ключа сертификата cert.crt:

cert.crt
openssl x509 -in cert.crt -pubkey -noout | openssl pkey -pubin -outform DER | openssl sha256
Файла ключа priv.key:

priv.key
openssl pkey -in priv.key -pubout | openssl pkey -pubin -outform DER | openssl sha256

Результат представляет собой уникальный отпечаток хеш-функции, рассчитанной по стандарту SHA-256:

SHA2-256(stdin)= ba9a19d947d7f0b2a577c6fa7b23b72643bd2743925cbfb9e675f6d737c43125

Этот отпечаток должен совпадать для обоих файлов.