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 кстати! Но по моим наблюдениям она гораздо динамичнее развивается. В общем, будем смотреть!

Комментариев нет:
Отправить комментарий