Прикупил я в свое время (еще до кризисных цен) файловое хранилище D-Link 320L, аж за 2 990 рублей (смотря сегодняшние цены хочется просто плакать). И вот недавно захотел я настроить на нем WebDAV нормальный, да с доступом из вне.
Пробросил порт 443 через роутер на файловое хранилище, создал новую шару, поставил крижыки WebDAV. Пытаюсь подключится — с помощью плагинов FAR все ок, а вот через Widnows подключение как сетевой диск не проходит — на сертификаты ругается. Никак не хочет, а ставить сторонние приблуды — нет желания.
Решено: получаем бесплатный SSL сертификат (по-моему на StartSSL я его и получил для своего домена). Скачал файлики, приватный ключ, с довольным лицом полез в админку, чтоб сертификаты то залить — ан нет! Нет там такой возможности! Решено начать ковырять.
Шаги такие:
1) Заливаем прошивку с официального сайта с поддержкой Addons (на сегодня это 1.08b08)
2) Устанавливаем Addons с сайта : OpenSSH, MC, vtCron
3) Находим где там сертификаты и заменяем их.
Подключившись по SSH и выполнив «ps ax» я увидел, что за веб тут отвечает lighttpd, нарыл его конфиг, а в нем и указано, что сертификаты (и публичный и приватный ключ) лежат в одном файле /etc/certificate_https_all.pem. Удалил старый файл, сохранил новый (порядок таков: первым идет публичный ключ, вторым — приватный), перезапустил lighttpd. Все отлично — сертификаты подцепились, но после перезагрузки все исчезло — в /etc все сохраняется только до перезагрузки. Потом все заново. В связи с этим решено было сохранить файл с сертификатами на жестком диске (в моем случае на /mnt/HD_a4/script/cert.pem) и написать скрипт который выполняет подмену файла с сертификатом и перезапускает вебсервер.
#!/bin/sh
if [ ! -e /etc/sslupdate ]; then
touch /etc/sslupdate
cp /mnt/HD_a4/script/cert.pem /etc/certificate_https_all.pem
ps ax | grep lightt | grep -v grep | awk '{ system ("kill " $1) }'
/usr/sbin/lighttpd-angel -D -m /usr/lighty_lib -f /etc/lighttpd/lighttpd.conf &
fi
В качестве семафора выполнялся ли уже скрипт в эту перезагрузку или нет было решено использовать файл /etc/sslupdate. При запуске скрипт проверяет, существует ли семафор? Если он существует — скрипт заканчивает свою работу. Если же семафора нет, то скрипт выполняет действия:
- Создает семафор о том что он выполнился;
- Копирует сертификат с жесткого диска в папку /etc;
- Убивает процессы которые связаны с lighttpd;
- Запускает lighttpd.
Для того чтобы скрипт запускался, заходим через веб-морду в управление vtCron и прописываем запуск скрипта там один раз в пять минут ( */5 * * * *)
Перезагружаем хранилище, все работает.
Автор: Khalal