Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1 2 След.
RSS
Как настроить контроллер UniFi на базе Linux с SSL-сертификатами., UniFi Network
 
Тема SSL-сертификатов для UniFi вызвала множество обсуждений. Я собираюсь написать об этом статью в блоге, но пока просто опубликую точные шаги:

_.-=%> Настройка UniFi на Linux с CA SSL сертификатом <%=-._

Дистрибутив Linux, который я использую — Ubuntu 15.04 с выбранным только SSH сервером во время установки. Я также указал статический IP-адрес для сервера и пробросил только нужные порты, так как этот сервер будет централизованным UniFi-сервером для около 20 локаций.

Я знаю, что можно добавить репозитории и использовать apt-get, так что, прежде чем писать об этом, прочитайте, я это понимаю.

Войдите на ваш Ubuntu сервер и выполните:

wget https://www.ubnt.com/downloads/unifi/4.6.6/unifi_sysvinit_all.deb

Когда загрузка завершится, запустите:

sudo dpkg -i unifi_sysvinit_all.deb

Он попытается установить и выдаст ошибки, связанные с зависимостями. Сделайте так:

sudo apt-get -f install

Это установит все зависимые пакеты. Затем снова:

sudo dpkg -i unifi_sysvinit_all.deb

После этого можно зайти на https://ip-or-fqdn-of-this-server:8443 и пройти установку вручную

ИЛИ

Вы можете получить CSR (я использовал ssls.com и получил SSL-сертификат за 5 долларов в год), получить выданный сертификат и установить его:

В командной строке:

cd /usr/lib/unifi  
sudo java -jar lib/ace.jar new_cert unifi.mydomain.dom "My Company Name" Город Область CC*  

* (CC = двухбуквенный код страны)

Вы введёте пароль, после чего будет создан CSR в /var/lib/unifi

Далее:

more unifi_certificate.csr.pem

Скопируйте CSR и вставьте его на сайте вашего SSL-провайдера для запроса сертификата. Получите сертификат (я советовал, что использую apache, чтобы они выдали все необходимые сертификаты).

Когда получите сертификат и все промежуточные сертификаты (если требуются), скопируйте все файлы .crt в /usr/lib/unifi и затем (в моём случае) выполните:

sudo java -jar lib/ace.jar import_cert unifi_mydomain_org.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt

Введите пароль снова, и вы увидите (после нескольких строк):

Certificates successfully imported. Please restart the UniFi Controller.

Запустите:

sudo service unifi restart

Теперь вы можете зайти на сайт UniFi, и он будет использовать сертификат от CA, а не самоподписанный.
 
Пытаюсь установить SSL-сертификат на Cloud Key. Мне удалось сгенерировать CSR-файл, используя инструкции отсюда: https://help.ubnt.com/hc/en-us/articles/212500127-UniFi-SSL-certificate-error-upon-opening-controller-page#notes Однако два файла — unifi_certificate.csr.der и unifi_certificate.csr.pem — создались в /usr/lib/unifi/data, а не в /var/lib/unifi. Когда я нашёл местоположение файлов, использовал CSR для получения SSL-сертификата на ssls.com. Получил файлы от ssls, скопировал весь текст в один .crt-файл и попытался импортировать. Получаю ошибку, что отсутствует файл сертификата. Но файл есть, и система его видит. Есть идеи, что делать дальше?

root@UniFi-CloudKey:/usr/lib/unifi# java -jar lib/ace.jar import_cert house_youthsection_org.crt  
parse house_youthsection_org.crt (PEM, 5 сертификатов):  
   найден [house.youthsection.org]
   найден [COMODO RSA Certification Authority]
   найден [AddTrust External CA Root]
   найден [COMODO RSA Certification Authority]
   найден [COMODO RSA Domain Validation Secure Server CA]
Импортирую подписанный сертификат [house.youthsection.org]
ОШИБКА! отсутствует файл сертификата для [COMODO RSA Domain Validation Secure Server CA]
 
Я использую скрипт Brielle (https://source.sosdg.org/brielle/lets-encrypt-scripts/src/branch/master/gen-unifi-cert.sh), где на строке 11 (changelog) есть запись: "10/23/2017: Apparently don’t need the ace.jar parts, so disable them". Скрипт Brielle работает с unifi. Я только заменил строку "tls-sni-01" на "http-01" и использую порт 80 вместо 443.

Что бы мне было интересно — как применить уже сгенерированные сертификаты на другие машины:  
- удалённо закинуть их на zywall (возможно, скрипт, который выполняется внутри zywall и получает файл сертификата с ftp-сервера?),  
- на другую Debian-машину с веб-сервером и/или прокси (возможно, скрипт, который получает файл сертификата с ftp).

Есть у кого-то решение, как распространять уже сгенерированные сертификаты на разные машины с разным софтом?

Я думаю, что скрипт, который генерирует сертификат, должен уметь создавать несколько форматов сертификата, а потом класть их в локальное ftp-место, откуда все остальные системы смогут забирать файл раз в неделю, если он поменялся, и просто заменять его. (Так не нужно будет менять все системы, если в будущем поменяется процесс генерации сертификатов или придётся использовать другого издателя).
 
Недавно я начал использовать универсальный сертификат Let’s Encrypt и хотел бы применить его с контроллером Unifi на Ubuntu Server. Так как сертификат и ключ находятся на Raspberry Pi (который занимается обновлением сертификата), я решил написать скрипт, чтобы при обновлении сертификата на Pi автоматически обновлялся сертификат для Unifi (а также для других устройств и ОС, таких как pfSense, ESXi и веб-интерфейс моего коммутатора SG3216), и делать это удалённо.

В итоге у меня есть скрипт, который, с помощью http://www.f-bit.net/?p=27, вроде бы делает то, что должен, но я постоянно получаю такую проблему. Моих знаний в области SSL недостаточно, чтобы понять причину, при этом Unifi не выдаёт никаких ошибок при установке сертификата. С точки зрения Unifi импорт прошёл успешно.

Кратко, что делает мой скрипт:
- Отделяет сертификат для моего домена от CA-сертификата Let’s Encrypt, так как certbot-auto хранит их в одном файле.
- Скачивает trustidrootx3_chain.p7b (DST Root CA X3) и конвертирует его в тот же формат, что и остальные сертификаты.
- Объединяет trustidrootx3_chain и CA-сертификат Let’s Encrypt в один файл, что нужно для следующего шага, так как опция -chain не распознаётся.
- Использует openssl для создания PKCS12 файла, содержащего универсальный сертификат, приватный ключ и файл с trustidrootx3_chain и CA-сертификатом Let’s Encrypt.
- Передаёт все файлы через scp в /usr/lib/unifi/.
- Делает бэкап keystore перед импортом PKCS12 файла.
- Запускает java -jar lib/ace.jar для импорта CA-сертификата Let’s Encrypt, универсального сертификата и trustidrootx3_chain (DST Root CA X3).
- Перезапускает сервис unifi.

Выводы скрипта:
parse certificate.pem (PEM, 1 certs): *.mydomainname.nl
parse trustidrootx3_chain.crt (PEM, 1 certs): DST Root CA X3
parse CA_LetsEncrypt.pem (PEM, 1 certs): Let’s Encrypt Authority X3
Importing signed cert[Let’s Encrypt Authority X3]... issued by [DST Root CA X3]
Certificates successfully imported. Please restart the UniFi Controller.

Где-то в процессе я получил предупреждение: «The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore data/keystore -destkeystore data/keystore -deststoretype pkcs12"». Но так как я уже использую PKCS12, не понимаю, откуда оно берётся.

Может, кто-то подскажет, в чём тут проблема?

Редактирование: Выполнение команды java -jar lib/ace.jar до (а не после) команды keytool, похоже, решило проблему 😀
 
Окей, спасибо ещё раз, я постараюсь посмотреть.
 
Я этого не делал. Я делал что-то похожее. Может, стоит погуглить по запросу unifi ssl keystore explorer — это программа для Windows, которая умеет работать с Java Keystore. Если я правильно помню, в ней можно сделать всё, что нужно, через графический интерфейс в Windows. Главное — использовать пароль aircontrolenterprise (его тоже можно погуглить, и вы найдёте гайды по unifi).  
Не тестировал, но выглядит хорошо: https://www.jeroentielen.nl/ubiquiti-unifi-controller-ssl-certificate-creation-process/  
Тебе нужно разобраться, как скопировать файл keystore из одной и в другую Linux-машину. Думаю, Google поможет. (Смонтировать сетевой диск или использовать USB-флешку)
 
Спасибо за быстрый и подробный ответ. Я перешёл по вашей ссылке и увидел, что ваш скрипт очень простой, но не могли бы вы объяснить подробнее для того, кто уже приобрёл сертификат с SSL Certificate (Primary), Intermediate SSL Certificates (CA) и RSA Private Key? Для моего cloud key я следовал этой инструкции «https://community.ui.com/tags/unifi/1977049», и всё сработало без проблем. Хотел бы сделать это под Ubuntu 16.04 LTS. Заранее благодарю за помощь!
 
Решение 1: Если у вас есть резервная копия контроллера, полностью удалите unifi и установите заново. Возможно, у вас есть автокопия. Используйте Purge вместо remove, чтобы полностью удалить (не уверен, но, думаю, remove недостаточно).  
sudo apt-get purge unifi  
sudo apt-get install unifi  
После этого всё заработает, но чтобы снова всё работало, нужно импортировать резервную копию.

Решение 2:  
- Остановите программу unifi (в зависимости от версии Linux, команда systemctl или service должна сработать).  
- Скопируйте файл keystore из другой установки. Насколько я понимаю, не важно, если другая установка на другой ОС.  
- Затем перезапустите unifi.

Файл keystore должен быть здесь:  
в Linux — /var/lib/unifi/keystore  
в Windows — %UserProfile%\Ubiquiti UniFi\

Решение 3:  
Я запускаю это в виртуальной машине, и если делаю важные вещи, всегда заранее делаю снимок. Так что просто восстанавливаю виртуальную машину.  
Делаю так, потому что не слишком разбираюсь, и хочу иметь простой и надёжный способ вернуться к рабочему состоянию. Почти никогда не получается с первого раза выполнить что-то в Linux без 2-3 попыток ;-)  
Возможно, вам стоит попробовать это: https://community.ui.com/questions/741ab166-d387-400d-9c0d-9cd7622b1c28 (Прочитайте оба мои сообщения. На сегодняшний день всё ещё работает. Только что проверил через браузер (зелёный замок), дата выпуска сертификата 20 августа 2018 года, то есть сертификату всего 7 дней, а я установил его в январе. Значит обновление сертификата идёт и всё работает).
 
Здравствуйте, я следовал инструкциям с моим файлом сертификата, и при импорте получил такое сообщение:

root@ubuntu:/usr/lib/unifi# sudo java -jar lib/ace.jar import_cert signed.crt cloudkey.crt  
parse cloudkey.crt (PEM, 4 сертификата): найден [CN=access.hotspot-services.com]
найден [CN=AddTrust External CA Root]
найден [CN=COMODO RSA Certification Authority]
найден [CN=COMODO RSA Domain Validation Secure Server CA]
parse signed.crt (PEM, 1 сертификат): CN=access.hotspot-services.com  
Импорт сертификата signed [access.hotspot-services.com]...
выдан [CN=COMODO RSA Domain Validation Secure Server CA]...
выдан [CN=COMODO RSA Certification Authority]...
выдан [CN=AddTrust External CA Root]
Сертификаты успешно импортированы. Пожалуйста, перезапустите UniFi Controller.  
root@ubuntu:/usr/lib/unifi# sudo service unifi restart

Я перезапустил unifi, но когда захожу локально через Firefox, появляется ошибка загрузки:

«Безопасное соединение не установлено  
Произошла ошибка при подключении к access.hotspot-services.com:8443. Сертификат собеседника имеет недействительную подпись. Код ошибки: SEC_ERROR_BAD_SIGNATURE  
Страница, которую вы пытаетесь просмотреть, не может быть показана, так как подлинность полученных данных не подтверждена.  
Пожалуйста, свяжитесь с владельцами сайта, чтобы сообщить о проблеме.»

При этом unifi отлично работает с облачным доступом из интернета. Спасибо за помощь. Я использую Ubuntu 16.04 LTS.
 
Было бы здорово, если бы мой импорт хоть как-то объяснял, почему не работает. Просто пишет: "Не удалось импортировать сертификат в хранилище ключей".
 
Спасибо, что выложили это здесь, как раз то, что мне тоже было нужно.
 
Изначально я выбрал тип загрузки apache на ssls.com, и мне выдали .ca-bundle цепочку, которую я не смог импортировать напрямую, поэтому поддержка прислала мне промежуточные .crt файлы. Я указал их в команде в неправильном порядке, поэтому просто пересоздал сертификат, скачал как windows/tomcat, заново импортировал — и теперь всё работает идеально. Спасибо за быстрые ответы!
 
Убедитесь, что вы зарегистрировали все сертификаты в Java и что приватный ключ для wildcard-сертификата установлен.
 
Проверьте, что время и дата на сервере и клиентских машинах выставлены правильно — возможно, стоит обновить NTP-серверы. Проверьте это в режиме инкогнито в Chrome и в других браузерах. Какой именно сертификат вы выбрали? То есть, при скачивании с ssls вас спрашивали, для Tomcat, Apache, Windows и т.д. Можете ли вы выложить команды, которые использовали, и вывод, который получили при установке сертификатов?
 
Здравствуйте и заранее спасибо. У меня есть два разных контроллера, оба работают на Google Cloud с Ubuntu 16.04.4 LTS, и на обоих успешно установлены сертификаты. Один контроллер использует wildcard-сертификат от GoDaddy, другой — сертификат от ssls.com. В командной строке ошибок не было, я перезагружал оба контроллера, но при попытке открыть их в браузере в Chrome появляется ошибка «ERR_SSL_PROTOCOL_ERROR». У меня есть резервные копии обоих контроллеров, и при входе на unifi.ubnt.com я могу получить к ним доступ через свой UBNT облачный аккаунт. Единственная причина установки этих сертификатов — обеспечить перенаправление на HTTPS в портале ваучеров, чтобы пользователи не видели ошибок SSL, но сейчас портал вообще не загружается. Я связался с поддержкой ssls.com, они сказали, что на сервере отсутствуют некоторые шифры, но при проверке через SSL checker (https://decoder.link/sslchecker) всё выглядит нормально. Спасибо.
 
Хорошо, проблема была в символах переноса строк. Я понятия не имею почему, но когда я удалил переносы строк из .crt файлов, их импорт прошло нормально. Вот мой (немного отредактированный) список команд:

$ cd ~/certificates/  
$ unzip yadda_yadda_yadda.zip  
$ cd /usr/lib/unifi/  
$ for i in ~/certificates/*.crt ; do tr -d '\n' < $i > $(basename $i); done  
$ java -jar lib/ace.jar import_cert yadda_yadda_yadda.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt

Подсказка, которая помогла, была в /var/log/unifi/server.log, где каждый раз при попытке прочитать оригинальные файлы выскакивала ошибка base64 decoding с сообщением «Illegal base64 character a». Я попробовал добавить возвраты каретки в сертификат — не сработало, но ошибка сменилась на «Illegal base64 character d». В итоге я полностью убрал все переносы строк из файлов, и это сработало. Ура.

Надеюсь, это поможет следующему, кто столкнётся с ошибкой «Unable to import the certificate into keystore». Главное — смотреть в server.log для подсказок.

Спасибо за ответы на мой предыдущий вопрос,  
-J
 
Я посмотрел видео и мне кажется, что введённый пароль был на sudo, а не для приватного ключа. Это совпадает с моим опытом. Сертификат — Comodo, куплен через cheapssl.com, это не первый сертификат от них — у меня есть один на ER-8 и один на моём текущем контроллере Unifi. Якобы у меня есть все 4 файла, и три из них, которые не предназначены для моего сервера, совпадают с теми, что были в предыдущих пакетах сертификатов. Так в каком формате должен быть сертификат моего сервера, если не PEM?
 
Пароль может и не быть, если вы его не ставили. Скорее всего, формат ключа неправильный. Где вы брали сертификат? Возможно, не хватает сопутствующих файлов. Если присмотреться к переписке внимательнее, там есть инструкции по использованию letsencrypt. По мне так это проще, чем возиться с импортированными сертификатами.
 
Итак, я запускаю Unifi версии 5.9.29-11384-1 на Ubuntu 18.04. Следовал скрипту из первого сообщения, но на шаге с «new_cer» меня НЕ спросили пароль. Вроде бы всё шло нормально, пока я не попытался импортировать файлы *.crt в keystore — тогда выдает ошибку «Unable to import the certificate into keystore». Думаю, возможно: а) меня всё-таки должны были спросить пароль при генерации нового CSR? б) import_certs требует файл в формате, отличном от PEM? Наверное, сегодня вечером покопаюсь с этим. Есть идеи, что можно попробовать?
 
Вот как я успешно установил SSL-сертификат на контроллер Cloud Key:

1) Подключаемся по SSH к контроллеру  
2) Выполняем команду: sudo su -  
3) Выполняем команду: cd /usr/lib/unifi  — создаём новый сертификат (с CSR)  
4) Выполняем команду: java -jar lib/ace.jar new_cert <hostname> <company> <city> <state> <country> — ваш CSR будет сгенерирован в /usr/lib/unifi/data  
5) Выполняем команду: cd /usr/lib/unifi/data  
6) Выполняем команду: more unifi_certificate.csr.pem  
7) Копируем и вставляем CSR на сайт вашего SSL-провайдера, чтобы запросить сертификат. Получаем выданный сертификат (я бы сказал им, что использую Apache, чтобы они выдали все нужные сертификаты)  
8) Выполняем команду: cd /usr/lib/unifi/ — копируем файлы сертификатов, которые вы получили от SSL-провайдера (ssls.com), на веб-сервер, если он у вас есть.  
9) Выполняем команду: wget [путь к файлу, например: http://mywebsite.com/unifi/mycert.srt] — повторяем для других файлов сертификатов, чтобы основной сертификат и промежуточные корневые сертификаты загрузились в /usr/lib/unifi/  
— импортируем подписанный сертификат и остальные промежуточные сертификаты  
10) Выполняем команду: java -jar lib/ace.jar import_cert <signed_cert> <intermediate_root_cert1> <intermediate_root_cert2> — если всё прошло успешно, сертификат импортируется без проблем.  
11) Выполняем команду: sudo service unifi restart  

Теперь на вашем Cloud Key установлен действующий SSL-сертификат, поздравляю :-)
Страницы: 1 2 След.
Читают тему (гостей: 1)