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