Используем локальный SSL CA
Стояла замечательная погода задачка по реализации локального SSL УЦ (CA) для локальных доменов и задач. Тыкать постоянно исключение безопасности в браузере показалось мне не лучшей затеей, тем более учитывая серьёзность всех тех данных, с которыми работают эти приложения. На момент старта мы имели несколько oVirt Engine и кучу WEB приложений, которые буквально на глазах росли как грибы после летнего дождя и постоянно совали в пользователей самоподписанными сертификатами. Так как повсеместно использовался домен в локальной зоне, в изолированной от мира сети, вариант wildcard сертификата от внешнего CA отпал сам собой.
Буквы
Для авторизации пользователей мы используем FreeIPA (LDAP), который из коробки сам по себе CA и может выдавать SSL сертификаты. Соответственно почему бы не воспользоваться этой прекрасной возможность? Данный рецепт приведён в виде Copy-Paste данных, которые нужно только Copy-Paste… Статья поможет создать собственный CA способный выдавать SSL сертификаты для всех узлов сети и установить один такой в oVirt Engine без гибели последнего. Описание по инсталляции опущено, так ка военного в этом ничего нет, а мануалов на тему freeipa server install centos 7
можно найти десятки при помощи Google. Задачу разделяем на три ветви. Первая — работа с IPA, вторая — работа с oVirt Engine и третья — все остальные WEB приложения. Если oVirt Engine отсутствует, то все действия связанные с ним пропускаем. Последовательность действий везде идентична, генерируем запрос на сервере WEB-приложения, добавляем хост в IPA, генерируем ему сертификат, добавляем сертификат на сервер. Не маловажным замечанием станет тот факт, что root-ca вашей IPA необходимо скормить не только в клиентскую систему, которой вы будете открывать искомые WEB-приложения, но и в сам браузер, иначе никак. Делается это элементарно, просто открываем ссылку на IPA сертификат браузером и ставим галки + OK.
Грабли
По славному старому обычаю, всё что бесплатное от RedHat, как говорит мой коллего, либо кривое либо кривущее. В нашем случае имеет описательную часть, выполненную в стиле minimal-techno с элементами ребусов, лабиринтов в суперпозиции и чёрного юмора. В связи с вышесказанным, мануал по прикручиванию стороннего SSL к oVirt Engine ломал всё самым изощрённым образом. Падала Java, отваливалась авторизация, падал Engine (в эти моменты количество седых волос стремительно увеличивалось). Нас как всегда спасло желание выжить и чтение логов, иногда даже тех, которых нет в природе… Вообще нужно быть максимально осторожным с oVirt Engine. Штука весьма нежная и крайне скверная в лечении.
Важные вводные
Для начала определим сущности и переменные. В данном примере мы рассматриваем следующие сущности:
— FreeIPA сервер (CentOS 7). Может быть как виртуальной так и физической машиной. Главное доступность по доменному имени для всех участников PKI, как серверов, так и клиентов. FreeIPA можно использовать как DNS, мы так не поступаем, у нас отдельная инфраструктура DNS серверов. Если идти по этому пути, то в IPA нужно в любом случае держать все зоны, просто зоны, можно даже их отключить, но их наличие обязательно;
— oVirt Engine (CentOS 7). Может быть как виртуальной (hosted engine) так и физической машиной;
— WEB-сервер 1 на основе Apache2(HTTPD) (CentOS 7);
— WEB-сервер 2 на основе Apache2 (Debian 8);
— Клиентские десктопы, использующие данные сервисы.
Все перечисленные сущности на момент производимых действий установлены, настроены и функционируют в штатном режиме.
Теперь о переменных. Важный аспект, для простоты действий, используются Bash переменные, посему до завершения процесса не перезагружаемся. Все доменные имена должны резольвиться на всех серверах и клиентах. Не стоит делать прописи в хостах, это печальная практика. Все домены добавляем в DNS зону!
Переменные:
— domain.local — это наша локальная зона;
— sub.domain.local — это вторая наша локальная зона;
— ipa.domain.local — доменное имя FreeIPA сервера;
— engine.domain.local — доменное имя oVirt Engine сервера;
— web1.domain.local — доменное имя WEB-сервера 1;
— web2.sub.domain.local — доменное имя WEB-сервера 2;
— HOSTNAME — доменное имя хоста;
— MASTERADDRESS — переменная, в которой мы задаём IP хоста на котором слушает WEB-сервер;
Перед началом работ, рекомендую установить на всех сущностях любимые приложения, которые вероятно могут пригодиться во время работы.
1 2 3 4 5 | #### Для CentOS yum update -y && yum install mtr mc tcpdump telnet nano nload ntpdate ntp wget net-tools -y #### Для Debian apt update && apt upgrade -y && apt install mtr mc tcpdump telnet nano nload ntpdate ntp wget net-tools -y # |
На всех клиентах устанавливаем в браузер root-ca нашего FreeIPA, просто открыв эту ссылку (по крайней мере так это работает в Firefox) https://ipa.domain.local/ipa/config/ca.crt
Рецепт
Начнём пожалуй с самого главного главного — oVirt Engine. Далее по порядку, заходим на сервер по SSH и копируем приведённые ниже строки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #### Определяем основные переменные и добавляем домен в /etc/hosts HOSTNAME=engine.domain.local MASTERADDRESS=192.168.1.10 ETCHOSTS=/etc/hosts SRCANCRS=/etc/pki/ca-trust/source/anchors/ PKIOE=/etc/pki/ovirt-engine IPARCA=/root/freeipa-ca.crt OECTS=/etc/ovirt-engine/engine.conf.d/99-custom-truststore.conf ESSLC=/etc/ssl/certs/freeipa-ca.crt OELC=/etc/ovirt-engine/logcollector.conf EPKIT=/etc/pki/tls hostnamectl set-hostname $HOSTNAME hostnamectl set-icon-name $HOSTNAME hostnamectl echo -e "\n$MASTERADDRESS\tsystemip\t$HOSTNAME\n" >> $ETCHOSTS && cat $ETCHOSTS #### Создаём запрос и ключ на хосте, где мы хотим установить SSL сертификат. # Данная команда создаёт два файла в директории root с именем "ВАШ_ХОСТ_HOSTNAME-privateKey.key" для ключа и # "ВАШ_ХОСТ_HOSTNAME-request.csr" для запроса. В нашем случае мы генерируем сертификаты на 1095 дней. После выполнения # этой команды в терминале мы увидим ключ и запрос, который нам понадабится для создания сертификата. openssl req -new -sha256 -nodes -days 1095 -newkey rsa:2048 -keyout /root/$HOSTNAME-privateKey.key -out /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-privateKey.key && ls /root/ # Заполняем запрашиваемые данные (данные указаны в качестве примера, их нужно/желательно заменить на реальные) Country Name (2 letter code) [AU]: RU State or Province Name (full name) [Some-State]: Krasnodarskiy kray Locality Name (eg, city) []: Krasnodar Organization Name (eg, company) [Internet Widgits Pty Ltd]: CompanyName Organizational Unit Name (eg, section) []: DC Common Name (e.g. server FQDN or YOUR name) []: engine.domain.local Email Address []: adm@domain.local |
Теперь нужно создать хост и сам сертификат на сервере FreeIPA, для чего воспользуемся WEB интерфейсом. В WEB интерфейсе FreeIPA нажимаем «Identity» -> «Hosts» чтобы открыть раздел Hosts, затем нажимаем «+Add» и заполняем следующие поля:
— «Host Name» сюда мы добавляем имя хоста (доменное имя) в нашей DNS зоне. К примеру «engine» для хоста с FQDN «engine.domain.local»;
— «DNS Zone» выбираем DNS зону для нашего домена. К примеру «domain.local» для хоста «engine.domain.local»;
— Если «A» запись для данного домена отсутствует в заданной зоне, необходимо добавить IP адрес этого хоста.
— В завершении добавляем класс в поле «Class». К примеру «Engine» для «engine.domain.local». Действие не обязательное, но в итоге поможет систематизировать кучу доменных имён.
Теперь жмём «Add».
После того как хост был создан, можно приступать к генерированию сертификата. Жмём «Authentication» -> «Certificates» для перехода в раздел сертификатов, нажимаем «+Issue» и заполняем следующие поля:
— «Principal» — сюда мы вводим тип сервиса и имя хоста. К примеру «HTTP/engine.domain.local» для «engine.domain.local»;
— Устанавливаем чекбокс «Add principal» если он отсутствует;
— Выбираем CA thats при необходимости, или в том случае, если CA не один;
— Копируем запрос на сертификат в текстовое поле и жмём кнопку «Issue».
Теперь можно получить сгенерированный сертификат в разделе сервисы. Жмём «Identity» -> «Services», затем нажимаем на ссылку сервиса. К примеру «HTTP/engine.domain.local@DOMAIN.LOCAL» для «engine.domain.local». В открывшемся окне находим секцию «Service Certificate» (в правом верхнем углу) и в выпадающем меню «Actions» выбираем «Download» или «Get» для отображения. сертификата.
Возвращаемся к нашему oVirt Engine.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #### Создаём сертификат хоста nano /root/$HOSTNAME-certificate.pem cp /root/$HOSTNAME-certificate.pem $SRCANCRS #### Загружаем root (CA) сертификат FreeIPA wget --output-document=$IPARCA --no-check-certificate https://ipa.domain.local/ipa/config/ca.crt && cat $IPARCA ## Копируем и обновляем доверенные сертификаты cp $IPARCA $SRCANCRS && update-ca-trust #### Создаём p12 цепочку mv $PKIOE/keys/apache.p12 /root/ openssl pkcs12 -export -out /root/$HOSTNAME-bundle.p12 -inkey /root/$HOSTNAME-privateKey.key -in /root/$HOSTNAME-certificate.pem ## Enter Export Password: - жмём "Enter" ## Verifying - Enter Export Password: - жмём "Enter" cp /root/$HOSTNAME-bundle.p12 $PKIOE/keys/apache.p12 #### Создаём apache-ca.pem cp $PKIOE/apache-ca.pem /root/ && rm -f $PKIOE/apache-ca.pem cp /root/$HOSTNAME-certificate.pem $PKIOE/apache-ca.pem #### Создаём apache.key.nopass cp $PKIOE/keys/apache.key.nopass /root/ openssl pkcs12 -in $PKIOE/keys/apache.p12 -nocerts -nodes > $PKIOE/keys/apache.key.nopass ## Enter Import Password: - жмём "Enter" #### Create apache.cer cp $PKIOE/certs/apache.cer /root/ openssl pkcs12 -in $PKIOE/keys/apache.p12 -nokeys > $PKIOE/certs/apache.cer ## Enter Import Password: - жмём "Enter" #### Создайте новый конфигурационный файл хранилища доверия touch $OECTS && echo -e "ENGINE_HTTPS_PKI_TRUST_STORE=\"/etc/pki/java/cacerts\"\nENGINE_HTTPS_PKI_TRUST_STORE_PASSWORD=\"\"" > $OECTS && cat $OECTS #### Замена сертификата может привести к сбою сборщика журналов. Чтобы избежать этого сбоя, редактируем конфигурацию сборщика журналов: cp $IPARCA $ESSLC touch $OELC && echo -e "cert-file=$ESSLC\n" >> $OELC #### Добавляем глобально сертификат и ключ cp $HOSTNAME-certificate.pem $EPKIT/certs/$HOSTNAME-certificate.pem cp $HOSTNAME-privateKey.key $EPKIT/private/$HOSTNAME-privateKey.key #### Теперь можно всё презагрузить systemctl restart httpd.service && systemctl restart ovirt-engine.service |
Переходим к WEB серверам. Принцип и последовательность действий прежние. WEB-сервера 1 (CentOS 7):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #### Определяем основные переменные и добавляем домен в /etc/hosts HOSTNAME=web1.domain.local MASTERADDRESS=192.168.1.11 ETCHOSTS=/etc/hosts SRCANCRS=/etc/pki/ca-trust/source/anchors/ IPARCA=/root/freeipa-ca.crt ESSLC=/etc/ssl/certs/freeipa-ca.crt EPKIT=/etc/pki/tls hostnamectl set-hostname $HOSTNAME hostnamectl set-icon-name $HOSTNAME hostnamectl echo -e "\n$MASTERADDRESS\tsystemip\t$HOSTNAME\n" >> $ETCHOSTS && cat $ETCHOSTS #### Создаём запрос и ключ на хосте, где мы хотим установить SSL сертификат. # Данная команда создаёт два файла в директории root с именем "ВАШ_ХОСТ_HOSTNAME-privateKey.key" для ключа и # "ВАШ_ХОСТ_HOSTNAME-request.csr" для запроса. В нашем случае мы генерируем сертификаты на 1095 дней. После выполнения # этой команды в терминале мы увидим ключ и запрос, который нам понадабится для создания сертификата. openssl req -new -sha256 -nodes -days 1095 -newkey rsa:2048 -keyout /root/$HOSTNAME-privateKey.key -out /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-privateKey.key && ls /root/ # Заполняем запрашиваемые данные (данные указаны в качестве примера, их нужно/желательно заменить на реальные) Country Name (2 letter code) [AU]: RU State or Province Name (full name) [Some-State]: Krasnodarskiy kray Locality Name (eg, city) []: Krasnodar Organization Name (eg, company) [Internet Widgits Pty Ltd]: CompanyName Organizational Unit Name (eg, section) []: DC Common Name (e.g. server FQDN or YOUR name) []: web1.domain.local Email Address []: adm@domain.local |
Аналогично создаём хост и сам сертификат на сервере FreeIPA. В WEB интерфейсе FreeIPA нажимаем «Identity» -> «Hosts» чтобы открыть раздел Hosts, затем нажимаем «+Add» и заполняем следующие поля:
— «Host Name» сюда мы добавляем имя хоста (доменное имя) в нашей DNS зоне. К примеру «web1» для хоста с FQDN «web1.domain.local»;
— «DNS Zone» выбираем DNS зону для нашего домена. К примеру «domain.local» для хоста «web1.domain.local»;
— Если «A» запись для данного домена отсутствует в заданной зоне, необходимо добавить IP адрес этого хоста.
— В завершении добавляем класс в поле «Class». К примеру «WEB» для «web1.domain.local». Действие не обязательное, но в итоге поможет систематизировать кучу доменных имён.
Теперь жмём «Add».
После того как хост был создан, можно приступать к генерированию сертификата. Жмём «Authentication» -> «Certificates» для перехода в раздел сертификатов, нажимаем «+Issue» и заполняем следующие поля:
— «Principal» — сюда мы вводим тип сервиса и имя хоста. К примеру «HTTP/web1.domain.local» для «web1.domain.local»;
— Устанавливаем чекбокс «Add principal» если он отсутствует;
— Выбираем CA thats при необходимости, или в том случае, если CA не один;
— Копируем запрос на сертификат в текстовое поле и жмём кнопку «Issue».
Теперь можно получить сгенерированный сертификат в разделе сервисы. Жмём «Identity» -> «Services», затем нажимаем на ссылку сервиса. К примеру «HTTP/web1.domain.local@DOMAIN.LOCAL» для «web1.domain.local». В открывшемся окне находим секцию «Service Certificate» (в правом верхнем углу) и в выпадающем меню «Actions» выбираем «Download» или «Get» для отображения. сертификата.
Возвращаемся к нашему хосту.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #### Создаём сертификат хоста nano /root/$HOSTNAME-certificate.pem #### Загружаем root (CA) сертификат FreeIPA wget --output-document=$IPARCA --no-check-certificate https://ipa.domain.local/ipa/config/ca.crt && cat $IPARCA ## Копируем и обновляем доверенные сертификаты (CentOS) cp /root/$HOSTNAME-certificate.pem $SRCANCRS && cp $IPARCA $SRCANCRS && update-ca-trust cp /root/$HOSTNAME-certificate.pem $EPKIT/certs/ && cp /root/$HOSTNAME-privateKey.key $EPKIT/private/ #### Добавляем глобально сертификат и ключ для HTTPD cp $IPARCA $ESSLC cp /root/$HOSTNAME-certificate.pem $EPKIT/certs/$HOSTNAME-certificate.pem cp /root/$HOSTNAME-privateKey.key $EPKIT/private/$HOSTNAME-privateKey.key В завершении меняем пути в конфигурационном файле Apache2 для конкретного доменного имени и глобально. #### Теперь можно презагрузить Apache2 systemctl restart httpd.service |
WEB-сервера 2 (Debian 8):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #### Определяем основные переменные и добавляем домен в /etc/hosts HOSTNAME=web2.sub.domain.local MASTERADDRESS=192.168.1.12 ETCHOSTS=/etc/hosts IPARCA=/root/freeipa-ca.crt ESSLC=/etc/ssl/certs/freeipa-ca.crt EPKIT=/etc/pki/tls LDCA=/usr/share/ca-certificates/local hostnamectl set-hostname $HOSTNAME hostnamectl set-icon-name $HOSTNAME hostnamectl echo -e "\n$MASTERADDRESS\tsystemip\t$HOSTNAME\n" >> $ETCHOSTS && cat $ETCHOSTS #### Создаём запрос и ключ на хосте, где мы хотим установить SSL сертификат. # Данная команда создаёт два файла в директории root с именем "ВАШ_ХОСТ_HOSTNAME-privateKey.key" для ключа и # "ВАШ_ХОСТ_HOSTNAME-request.csr" для запроса. В нашем случае мы генерируем сертификаты на 1095 дней. После выполнения # этой команды в терминале мы увидим ключ и запрос, который нам понадабится для создания сертификата. openssl req -new -sha256 -nodes -days 1095 -newkey rsa:2048 -keyout /root/$HOSTNAME-privateKey.key -out /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-request.csr && cat /root/$HOSTNAME-privateKey.key && ls /root/ # Заполняем запрашиваемые данные (данные указаны в качестве примера, их нужно/желательно заменить на реальные) Country Name (2 letter code) [AU]: RU State or Province Name (full name) [Some-State]: Krasnodarskiy kray Locality Name (eg, city) []: Krasnodar Organization Name (eg, company) [Internet Widgits Pty Ltd]: CompanyName Organizational Unit Name (eg, section) []: DC Common Name (e.g. server FQDN or YOUR name) []: web2.sub.domain.local Email Address []: adm@domain.local |
Аналогично создаём хост и сам сертификат на сервере FreeIPA. В WEB интерфейсе FreeIPA нажимаем «Identity» -> «Hosts» чтобы открыть раздел Hosts, затем нажимаем «+Add» и заполняем следующие поля:
— «Host Name» сюда мы добавляем имя хоста (доменное имя) в нашей DNS зоне. К примеру «web2» для хоста с FQDN «web2.sub.domain.local»;
— «DNS Zone» выбираем DNS зону для нашего домена. К примеру «sub.domain.local» для домена «web2.sub.domain.local»;
— Если «A» запись для данного домена отсутствует в заданной зоне, необходимо добавить IP адрес этого хоста.
— В завершении добавляем класс в поле «Class». К примеру «WEB» для «web2.sub.domain.local». Действие не обязательное, но в итоге поможет систематизировать кучу доменных имён.
Теперь жмём «Add».
После того как хост был создан, можно приступать к генерированию сертификата. Жмём «Authentication» -> «Certificates» для перехода в раздел сертификатов, нажимаем «+Issue» и заполняем следующие поля:
— «Principal» — сюда мы вводим тип сервиса и имя хоста. К примеру «HTTP/web2.sub.domain.local» для «web2.sub.domain.local»;
— Устанавливаем чекбокс «Add principal» если он отсутствует;
— Выбираем CA thats при необходимости, или в том случае, если CA не один;
— Копируем запрос на сертификат в текстовое поле и жмём кнопку «Issue».
Теперь можно получить сгенерированный сертификат в разделе сервисы. Жмём «Identity» -> «Services», затем нажимаем на ссылку сервиса. К примеру «HTTP/web2.sub.domain.local@DOMAIN.LOCAL» для «web2.sub.domain.local». В открывшемся окне находим секцию «Service Certificate» (в правом верхнем углу) и в выпадающем меню «Actions» выбираем «Download» или «Get» для отображения. сертификата.
Возвращаемся к нашему хосту.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #### Создаём сертификат хоста nano /root/$HOSTNAME-certificate.pem #### Загружаем root (CA) сертификат FreeIPA wget --output-document=$IPARCA --no-check-certificate https://ipa.domain.local/ipa/config/ca.crt && cat $IPARCA ## Копируем и обновляем доверенные сертификаты (Debian) mkdir $LDCA && cp $IPARCA $LDCA/ && dpkg-reconfigure ca-certificates #### Добавляем глобально сертификат и ключ для HTTPD cp $IPARCA $ESSLC cp /root/$HOSTNAME-certificate.pem $EPKIT/certs/$HOSTNAME-certificate.pem cp /root/$HOSTNAME-privateKey.key $EPKIT/private/$HOSTNAME-privateKey.key В завершении меняем пути в конфигурационном файле Apache2 для конкретного доменного имени и глобально. #### Теперь можно презагрузить Apache2 service apache2 restart |
В качестве примера конфигурационного файла Apache2 для HTTPS сервиса, рассмотрим конфигурационный файл сервера Zabbix
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | DirectoryIndex index.php index.html <VirtualHost systemip:80> ServerName zabbix.domain.local DocumentRoot /usr/share/zabbix RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{SERVER_NAME}$1 [R,L] <Directory "/usr/share/zabbix"> Options FollowSymLinks AllowOverride None Require all granted php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value date.timezone Europe/Moscow </Directory> <Directory "/usr/share/zabbix/conf"> Require all denied </Directory> <Directory "/usr/share/zabbix/include"> Require all denied </Directory> </VirtualHost> <VirtualHost systemip:443> SSLEngine on SSLCertificateFile /etc/pki/tls/certs/zabbix.domain.local-certificate.pem SSLCertificateKeyFile /etc/pki/tls/private/zabbix.domain.local-privateKey.key ServerName zabbix.domain.local DocumentRoot /usr/share/zabbix <Directory "/usr/share/zabbix"> Options FollowSymLinks AllowOverride None Require all granted php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value date.timezone Europe/Moscow </Directory> <Directory "/usr/share/zabbix/conf"> Require all denied </Directory> <Directory "/usr/share/zabbix/include"> Require all denied </Directory> </VirtualHost> |
Надеюсь что ничего не забыл и не перепутал. Как всегда жду ваших умных вопросов и светлых комментариев. Да, напоследок повторюсь, использовать FreeIPA в качестве DNS сервера можно, и вероятно, для небольшой инфраструктуры даже нужно, но для больших проектов это скверная практика, даже если есть 10500 реплик. Нет ничего лучше чем классическая диверсификация рисков, путём логического распределения ролей сервисов и разграничения зон ответственности. О том как построена инфраструктура DNS серверов у нас я расскажу в следующей статье.
Нужно немного поправить создание сертификатов для ovirt engine. А именно: когда создаётся сертификат apache.p12 что бы не ловить ошибки при обновлении нужно установить ему пароль mypass. Этот пароль вхардкорен в ovirt-engine и при его отстуствии появляется warning и при обновлении ломает сертификаты.
Подробнее: https://access.redhat.com/solutions/3429411?band=se&seSessionId=1ad9b9e4-5b57-4fb8-9a4f-a3eb5a0f9eb1&seSource=Recommendation&seResourceOriginID=ebd7d0cb-ea69-4092-a4ba-6a5915c9fcd4
Интересно, не сталкивался. Вот относительно не давно обновил свой engine, без проблем. Спасибо за ссылку!