Компания Siemens в версии 17 TIA Portal Step7 для FW ≥4.5 (S7-1200) и FW ≥2.9 (S7-1500) встала на путь легкого принуждения к повышению уровня информационной безопасности. Теперь TIA Portal мягко предлагает задать пароль на хранилище сертификатов CPU, пароль на чтение/запись программы CPU, пароль на обмен с HMI и, конечно же, шифрованный обмен с применением сертификата. Все это, конечно, отключаемо, но зачем отключать то, что предлагается «из коробки»? События этого века показали всю важность инфобеза систем промышленной автоматики, а так же показали, что происходит при защите систем «от честного человека» (я про stuxnet, да). Основная причина, по которой, как мне кажется, шифрование не применяется - непонимание принципов работы и инерционность мышления (наши деды ни про какой TLS не слышали, и мы тоже не будем). В рамках одного проекта TIA Portal все еще более-менее ясно, а как быть с подключением «непортальных» систем? Рассмотрим такое подключение на примере S7-1500 FW2.9 и WinCC OA 3.18. Поскольку главная задача- это настройка со стороны WinCC OA, то на стороне TIA Portal мы не будем использовать global security settings, обойдемся «простым» проектом. Кстати, вот настройки безопасности, которые появляются после выполнения «визарда» при добавлении CPU в проект.

Тут задается пароль ПЛК для доступа к секретным данным, вроде сертификатов.

Добавьте описание

А это уровни доступа к ПЛК по паролю. Делятся на «пароль не нужен», «только чтение данных + связь с HMI», «только связь с HMI» и «пароль на все». В данном случае выбран режим «пароль на все» и задано два пароля - один пароль на полный доступ будет знать только разработчик ППО CPU (и его начальник, но это организационные меры), а пароль на связь с панелью или скадой по секрету сообщается разработчику прикладного проекта WinCC OA.

Добавьте описание

На этой вкладке указано, что мы работаем только по безопасным каналам связи с программатором, скадой и панелью, выбран сертификат со стороны ПЛК. Обратите внимание, что опция «разрешить put/get» недоступна. Все правильно, ибо в словах «put/get» the letter «s» stands for security, а по-русски: «такой механизм вообще нельзя использовать при шифрованной связи».

Добавьте описание

А вот тут мы видим список сертификатов CPU. И я предлагаю сразу проэкспортировать сертификат из проекта Portal куда-нибудь на диск в виде файлика. Напомнию про организационные меры - это очень важный файл, не надо выкладывать его на торренты с точным указанием, на каком объекте и в какой системе он применяется.

В обязательном порядке выполняем экспорт данных PLC. Для этого в TIA Portal должна быть установлена бесплатная опция SIMATIC SCADA Export соответствующей версии.

Добавьте описание

Экспорт данных ПЛК в виде файла Export.zip сохраняется на рабочем столе моего ПК.

Ну, а теперь перейдем к верхнему уровню. Создаем «legacy standart project» или же «стандартный с базовыми настройками безопасности», так как тип проекта не влияет на работу драйвера. Добавляем в консоль драйвер S7plus под номером 2 и запускаем его. 

Добавлен и запущем драйвер S7plus

Сейчас необходимо скопировать файл экспорта и файл сертификата в соответствующие директории прикладного проекта WinCC OA.

Export.zip - в <project_name>\data\TIAProjects

Добавьте описание

Сертификат - в <project_name>\data\s7plus\cert

Добавьте описание

Открывает модуль «управление системой» и заходим в пункт «драйверы S7». 

Добавьте описание
Добавьте описание
Добавьте описание

Нажимаем кнопку Создать, задаем имя соединения и приступаем к его настройке.

Добавьте описание

Выбираем в качестве источника имен тэгов и конфигурации TIA Project, проверяем номер драйвера (2) и жмем ОК. В следующем окне выбираем имя проекта (Export, мы его уже скопировали) и имя ПЛК в рамках проекта, это PLC_1. ПЛК можно развернуть и посмотреть его тэги. В завершении жмем ОК.

Добавьте описание
Добавьте описание

Проверяем настройки PG/PC. Мой ноутбук смотрит в сеть контроллера беспроводным интерфейсом и общается в режиме TCP/IP, все верно.

Добавьте описание

Если прямо сейчас в окне соединения мы попытаемся установить связь, то ничего не получится, мы увидим в журнале событий сообщение о невозможности законнектиться, ибо TLS. Так что, даже не пытаемся, продолжаем настройки... Хотя, нет. Попытаемся! Ииииии: SEVERE, 88/s7plus, S7PlusConnection, async command type 1, get_request_error, _myS7enc, Response from PLC, when TLS must be used (TLS_only). (-6772897069067010568)

Добавьте описание

Очевидно, не работает от того, что не настроено шифрование. Перейдем на вкладку расширенных настроек и выставим галочку Use TLS, источником сертификата оставим файл, а сам файл мы уже скопировали в нужную папку проекта.

Было
Ставим галочку
Выбираем файл
Стало

Теперь остается указать пароль. Но какой? Их у нас целых три. Очевидно, что пароль на доступ к секьюрным данным ПЛК - не тот, что нам нужен. Остается пароль полного доступа и пароль HMI. Вводим пароль доступа HMI, и нам тут же предлагают сгенерировать ключ со стороны WinCC OA.

Нажимаем Create
Нажимаем «Создать»
Этот приватный ключ создается в папке проекта config.

Устанавливаем соединение при помощи соответствующей галочки и смотрим журнал.

Добавьте описание

На самом деле никто не запрещает нам со стороны WinCC OA применить пароль полного доступа. Тоже будет работать, ибо Full Access включает в себя и HMI в том числе. Если же вдруг опечатались или ввели не тот пароль, лог будет забиваться следующими сообщениями:

SEVERE, 54, Unexpected state, NotificationHandler, handle_notification, _myS7enc, Invalid value retrieved for subscription. Access denied = 1, Out of memory = 0, Status = 10

Access denied = 1, т.е. доступ запрещен.

Кроме того, возможна ситуация отсутствия пароля, как в примере ниже.

Добавьте описание

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

Добавьте описание

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

Добавьте описание
Добавьте описание

Настраиваем переменную на чтение. Я выбрал стандартный тэг из серии Clock (меняет свое значение с известной частотой), выбираем поллинг, создаем группу опроса и делаем ее активной, ну и делаем активным сам конфиг.

После чего убеждаемся, что значение переменной меняется.

Добавьте описание

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