Найти тему

Настройка работы консоли BMC "Megarac SP"

Довелось мне недавно удаленно администрировать старенький сервер с помощью BMC (Baseboard Management Controller - контроллер управления материнской платой) "Megarac SP" от производителя "American Megatrends". Зашел на web-страницу этой BMC (пусть ее адрес будет http://192.168.10.48) и при попытке запустить консоль получил ошибку от Java:

Ошибка Java
Ошибка Java

Ну т.е. неподписанному приложению Java требуется неограниченный доступ к нашей операционной системе, но Java категорически запрещает его запускать. Т.о. чтобы мы могли запустить консоль нам надо каким-то образом обновить встроенное в BMC приложение Java, чтобы оно соответствовало требованиям к безопасности Java. Сделать это можно несколькими путями:

  1. Обновить ПО BMC "Megarac SP" на свежую версию с сайта производителя - для этого нужно быть официальным покупателем у "American Megatrends" и позвонить по предоставленному номеру телефона в США. Я не стал пытаться.
  2. Обойти ограничение безопасности Java - ниже, собственно, и описываю свои действия...

Итак, чтобы обойти ограничение безопасности Java нам надо неподписанное приложение Java, размещенное в BMC "Megarac SP", заменить нашим - подписанным, и тогда Java милостливо разрешит нам его запустить. Вот только проблем тут много: какой ЭЦП подписывать приложение чтобы Java разрешило его запустить, как разместить новое приложение в BMC "Megarac SP" если мы не знаем пароля производителя, а прав имеющейся по-умолчанию админской учетной записи не хватает на такое действие. И вот что я придумал:

  • приложение Java подписать своим собственным "левым" ЭЦП, выпущенным мной самим себе буквально "на коленке";
  • подменить web-сервер BMC "Megarac SP" своим, где и разместить мое "левое" приложение Java подписанное моей "левой" ЭЦП.

Помолясь, приступаю:

При попытке запуска консоли из BMC "Megarac SP" на мой компьютер скачивается спецфайлик "jviewer.jnlp", являющийся инструкцией для запуска Java-приложений веб-браузером. Вот часть его содержимого:

Содержимое jviewer.jnlp
Содержимое jviewer.jnlp

Что я вижу в этом файле:

  1. Все приложения Java берутся из web-сервера http://192.168.10.48:80/Java - его нам и нужно будет подменить своим web-сервером;
  2. Приложения, которые мне нужны и которые нужно подписать "левой" ЭЦП находятся в каталоге "release". И нужных мне приложений целых три - JViewer.jar, JViewer-SOC.jar, Win32.jar (у меня Windows 10, для Linux там соответственно будет другой .jar)

Собственно, скачиваю нужные мне приложения вот такими ссылками:

http://192.168.10.48/Java/release/JViewer.jar
http://192.168.10.48/Java/release/Win32.jar
http://192.168.10.48/Java/release/JViewer-SOC.jar

Сразу, для своего удобства, создаю каталог c:\1\ в котором и буду размещать все свои "левые" jar-файлы и сертификаты. Туда скидываю скаченные выше jar-файлы:

mkdir c:\1\

Так, теперь мне нужно создать "левую" ЭЦП и подписать ею эти файлы. Для этого мне нужны стандартные утилитки Java: keytool.exe и jarsigner.exe. Утилитка keytool.exe устанавливается вместе с Java и располагается в любом дистрибутиве Java в подкаталоге "bin". Я, для примера, взял дистрибутив jre-8u191-windows-i586.exe, но годится любой подходящий для вашей операционной системы:

jre-8u191-windows-i586.exe

А вот с утилиткой jarsigner.exe маленькая проблемка - она входит в спецпакет Java для разработчиков. Скачиваем его с официального сайта производителя, для примера, я взял jdk-8u251-windows-x64.exe, но годится любой подходящий для вашей операционной системы:

jdk-8u251-windows-x64.exe

Все скачано и установлено с путями по-умолчанию, пора создавать "левую" ЭЦП и сразу разместить ее в моем каталоге c:\1\:

"C:\Program Files (x86)\Java\jre1.8.0_191\bin\keytool" -genkey -alias myLeftKey -keyalg RSA -keystore C:\1\keystore.jks -keysize 2048

Чисто для понимания:
-alias myLeftKey значит собственное имя моего "левого" ключа ЭЦП будет "myLeftKey", по нему я смогу подписать нужный мне файл;
-keyalg RSA значит для шифрования закрытого ключа ЭЦП я использую алгоритм шифрования RSA;
-keystore C:\1\keystore.jks значит контейнер для хранения закрытого и открытого ключа ЭЦП будет располагаться в файле C:\1\keystore.jks;
-keysize 2048 значит длина ключа шифрования будет 2048 символов.

При создании просят придумать отдельный пароль для контейнера(keystore) и отдельный пароль для закрытого ключа(keypass). Я не заморачиваюсь и там и там ставлю "левый" пароль "12345678". Да и все остальные поля заполняю "левыми" данными. Готово! Контейнер c:\1\keystore.jks создан и содержит закрытую и открытую часть моего "левого" ключа ЭЦП. Настало время для подписания скачанных мной ранее jar-файлов. Подписываю их однотипными командами:

"C:\Program Files\Java\jdk1.8.0_251\bin\jarsigner" -keystore c:\1\keystore.jks -storepass 12345678 -keypass 12345678 c:\1\JViewer.jar myLeftKey
"C:\Program Files\Java\jdk1.8.0_251\bin\jarsigner" -keystore c:\1\keystore.jks -storepass 12345678 -keypass 12345678 c:\1\Win32.jar myLeftKey
"C:\Program Files\Java\jdk1.8.0_251\bin\jarsigner" -keystore c:\1\keystore.jks -storepass 12345678 -keypass 12345678 c:\1\JViewer-SOC.jar myLeftKey

Чисто для понимания:
-keystore c:\1\keystore.jks значит что контейнер с ключом ЭЦП находится в файле c:\1\keystore.jks;
-storepass 12345678 сразу подставляю свой пароль контейнера(keystore);
-keypass 12345678 сразу подставляю свой пароль закрытого ключа(keypass);
c:\1\JViewer.jar значит подписывать буду файл "c:\1\JViewer.jar";
myLeftKey значит подписывать буду ключом с собственным именем "myLeftKey"

Готово! Нужные для работы jar-файлы подписаны, лежат по адресу C:\1\ и Java готова их запускать. Теперь надо их как-то подсунуть вместо оригинальных. А для этого нужен свой собственный "левый" web-сервер заместо web-сервера BMC "Megarac SP". Скачиваю web-сервер Nginx вот отсюда:

nginx-1.24.0.zip

Я, для примера, взял "nginx-1.24.0.zip", но годится любой другой. Создал каталог "C:\nginx" и просто распаковал туда все содержимое архива. Теперь надо настроить Nginx - начинаем редактировать файл C:\nginx\conf\nginx.conf - после распаковки он у меня находится тут. Мне нужно отредактировать только одну подгруппу "server" и добавить следующие строчки:

location /release/ {alias "c:/1/";autoindex on;}

Вот таким стал мой файл C:\nginx\conf\nginx.conf:

Содержимое файла C:\nginx\conf\nginx.conf
Содержимое файла C:\nginx\conf\nginx.conf

Чисто для понимания:
server_name localhost; значит что имя моего "левого" web-сервера будет "localhost";
location /release/ значит у моего web-сервера будет web-ресурс c именем "release";
alias "c:/1/"; значит ресурс "release" будет располагаться по пути c:\1\;
autoindex on; значит автоматическое индексирование каталогов включено, и если в подкаталоге отсутствует файл index.html то будет отображаться список файлов - то, что мне и нужно!;

Запускаю свой "левый" сервер Nginx:

c:\nginx\nginx.exe

и сразу проверяю его работу в браузере:

http://localhost/release/

Ожидаемый мной ответ - в браузере должно отобразиться содержимое моего каталога C:\1\. Если содержимое отобразилось - продолжаем. Если содержимого нет - значит ошибки в C:\nginx\conf\nginx.conf не дали запуститься Nginx, для анализа читай файл C:\nginx\logs\error.log и исправляй их.

Остались последние штрихи: надо дать понять Java что мои "левые" jar-файлы хорошие и их можно запускать: заходим "Панель управления" - Java - вкладка "Security" - Edit Site List... и добавляем туда наш новый "левый" сайт http://localhost

-4

Теперь надо подсунуть мой "левый" сайт http://localhost заместо оригинального http://192.168.10.48. Это делается легко - открываем тот самый скачанный из BMC "Megarac SP" файл jviewer.jnlp и меняем в нем одну-единственную строчку
codebase="http://192.168.10.48:80/Java" на codebase="http://localhost/"

Получается вот так:

-5

Двойным щелком запускаем файл jviewer.jnlp, на вопли Java отвечаем утвердительно и вуаля - консоль заработала!

-6

Все.