1. Зашифрованное соединение.
Очевидно, что для шифрования трафика надо использовать https. Подготовим самоподписанные сертификаты в директории /home/openremote/.keystore:
$ keytool -genkey -alias tomcat -keyalg RSA -validity 3600 -keystore ~/.keystore
Когда спросят про второй пароль его вводить не надо - вы обязаны оставить прежний (по умолчанию). Далее переходим в файл /srv/openremote/conf/server.xml и правим следующий кусок:
<connector clientauth="false" keystorepass="changeit" maxthreads="150" port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslenabled="true" sslprotocol="TLS">
Внимание, мы не только его раскомментировали, но и добавили keystorePass="changeit" - пароль, который вводили при генерации сертификатов. Пробуем запускать скрипт с параметром run - так видно логи сервера. Заходим https://192.168.xx.xx:8443/webconsole/ - должно работать. Теперь закомментируем небезопасный порт 8080, чтобы протестировать клиентов.
Пробуем андроид клиент - в нем адрес контроллера оставляем, только нажимаем на кнопочку SSL в самом низу настроек. Порт указан там же. Теперь пробуем онлайн webconsole, тут по-другому. Удаляем старый адрес контроллера, вводим новый https://192.168.xx.xx:8443/controller/
2. Авторизация.
Хорошо, с шифрованным соединением решили. Авторизация тоже заложена в системе, но немного не явным образом. Для начала правим файл: /security/users.xml:
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="openremote"/> <user username="vermus" password="test" roles="openremote"/> </tomcat-users>
Потом открываем файл webapp/controller/WEB-INF и расскоментируем следующие строки:
<!-- Constraint resource: /rest/control/* --> <security-constraint> <web-resource-collection> <web-resource-name>Control command RESTful service of Openremote Controller</web-resource-name> <description>Control command RESTful service of Openremote Controller</description> <url-pattern>/rest/control/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>openremote</role-name> </auth-constraint> </security-constraint> <!-- Constraint resource: /rest/panel/* --> <security-constraint> <web-resource-collection> <web-resource-name>Panel identity RESTful service of Openremote Controller</web-resource-name> <description>Panel identity RESTful service of Openremote Controller</description> <url-pattern>/rest/panel/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>openremote</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Status command RESTful service of Openremote Controller</web-resource-name> <description>Status command RESTful service of Openremote Controller</description> <url-pattern>/rest/status/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>openremote</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Polling command RESTful service of Openremote Controller</web-resource-name> <description>Polling command RESTful service of Openremote Controller</description> <url-pattern>/rest/polling/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>openremote</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>OPENREMOTE_Controller</realm-name> </login-config> <security-role> <role-name>openremote</role-name> </security-role> </pre>
Заходим в webconsole и при клике на выбранной панели система спросит нас логин с паролем. Приложение для андроид (кстати, качайте последнее с сайта, в google play на данный момент 2.0.0 , который даже не поддерживает https).
Итак, мы неплохо обезопасили нашу систему, жаль что для новичков эти шаги были бы не очевидными. Плюс меня еще смущает: древняя версия openremote под андроид в гугл плей, отсутствие внятной документации, онлайновый дизайнер, отсутствие сбора данных, ориентированность на платный продукт и т.п....
В общем, я решил испробовать другую систему openhab, которая лишена всех этих недостатков, хоть в ней вроде бы и есть проблема с 1-wire. Я думаю ее можно как-то решить, кроме owserver же есть еще и owhttpd (может http binding сработает) и owfs (может можно писать в файлы локально). Хоть ее и начали писать позже openremote кстати! Но по моим наблюдениям она гораздо динамичнее развивается. В общем, будем смотреть!
Комментариев нет:
Отправить комментарий