суббота, 20 июля 2013 г.

Получение, установка и проверка SSL сертификата, подписанного StartSSL

1. Необходимо доказать права на управление доменом.

Идем в Validation Wizard, выбираем валидацию домена и получаем письмо на postmaster@домен с кодом проверки. Валидация действует 90 дней, после чего валидацию необходимо повторить, если необходимо.

2. В Certificates Wizard выбираем Web Server SSL/TLS Certificate.

Вводим полностью доменное имя, для которого нужно сгенерировать сертификат. Можно ввести до пяти доменных имен на один сертификат, что полезно когда не поддерживаются виртуальные хосты, например на почтовом сервере.
Генерируем файл запроса сертификата (CSR) openssl req -newkey rsa:2048 -keyout ssl.key -out ssl.csr . Содержимое ssl.csr вставляем в текстовое поле на странице. Нажимаем "Submit", в ответ получаем архив с набором сертификатов под различные нужды.
При генерации файла запроса сертификата создается закрытый ключ ssl.key, защищенный паролем, без которого набор сертификатов бесполезен. Поэтому необходимо сделать его резервную копию и не забыть пароль.

3. Устанавливаем сертификаты.

Так как наш закрытый ключ защищен паролем, и вводить его каждый раз при запуске сервера сложно, необходимо пароль снять. Для этого выполняем команду openssl rsa -in ssl.key -out ssl.key , сохраняем измененный закрытый ключ в специальной папке (на CentOS 6 это /etc/pki/tls/private/) и проверяем права доступа к нему (типично доступ должен быть только у рута на чтение).

Для работы многих программ (lighttpd, dovecot, postfix) необходим единственный файл сертификата, содержащий все промежуточные сертификаты. Он делается простой конкатенацией сертификатов из архива OtherServer: cat 2_домен.crt 1_Intermediate.crt root.crt >/etc/pki/tls/certs/server.pem .

3.1. Настройка Апача.

В Апаче сертификаты описываются следующими параметрами конфигурационного файла.
SSLCertificateKeyFile /etc/pki/tls/private/ssl.key # наш закрытый ключ, незащищенный паролем
SSLCertificateFile /etc/pki/tls/certs/ssl.crt # файл из архива сертификатов для Апача с именем 2_домен.crt
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt # файл из архива сертификатов для Апача с именем 1_root_bundle.crt
Не забываем проверить остальные настройки SSL, какими они должны быть подробно описано в Интернете.

3.2. Настройка Postfix

В Postfix'е за SSL-сертификаты отвечают следующие параметры конфигурационного файла main.cf.
smtpd_tls_cert_file = /etc/pki/tls/certs/server.pem # созданный объединением сертификатов из архива OtherServer
smtpd_tls_key_file = /etc/pki/tls/private/ssl.key # наш закрытый ключ, незащищенный паролем
Также для работы шифрования должны быть установлены следующие параметры
smtpd_tls_security_level = may
smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
tls_random_source = dev:/dev/urandom

3.3. Настройка Dovecot

В Dovecot'е за SSL-сертификаты отвечают следующие параметры конфигурационного фала.
ssl_cert = </etc/pki/tls/certs/server.pem
ssl_key = </etc/pki/tls/private/ssl.key
Также для работы шифрования необходимо установить параметр
ssl = required

3.4. Настройка Lighttpd

В Lighttpd цепочка сертификатов и закрытый ключ объединяются в один файл cat /etc/pki/tls/private/ssl.key /etc/pki/tls/certs/server.pem >/etc/pki/tls/private/lighttpd.pem (не забываем про права доступа к файлу).
И прописывается в конфигурационном файле в параметре ssl.pemfile = "/etc/pki/tls/private/lighttpd.pem"
Нужно не забыть включить ssl параметром ssl.engine = "enable"

4. Проверяем сертификаты.

Конечно, можно проверить сертификаты открыв страницу в браузере, но зачем просто, если можно сложно. Тем более, если сложным путем можно убедиться, что все промежуточные сертификаты установлены (браузеры часто подтягивают их автоматически из Интернета, а не с сайта, и не сообщают об ошибке), а также проверить корректность шифрования почтового  (да и любого другого) обмена.

Для проверки корректности шифрования необходимо выполнить команду: openssl s_client -showcerts -connect localhost:443. В ответ должны получить что-то типа Verify return code: 0 (ok).
Если для запуска шифрования необходима команда STARTTLS, то проверка будет запускаться таким образом: openssl s_client -starttls smtp -showcerts -connect localhost:25

При выполнении проверки мне встречались такие ошибки. Verify return code: 20 (unable to get local issuer certificate) и Verify return code: 21 (unable to verify the first certificate). Они говорит о том, что openssl не знает, где взять ключи издателей. Нужно ему подсказать, добавив ключ -CApath /etc/ssl/certs или -CAfile /usr/share/curl/ca-bundle.crt, у меня они нашлись в этом файле.

Команда openssl с опцией -showcerts показывает сертификаты в закодированном виде. Чтобы увидеть их содержимое можно использовать команду openssl x509 -noout -text -startdate -enddate -in /tmp/cert, где /tmp/cert - файл, в котором сохранен закодированный сертификат.

Для проверки надежности шифрования можно воспользоваться сервисом Qualis SSL Labs

воскресенье, 21 августа 2011 г.

Скомпилировать дополнительный модуль для Asterisk'а

При компилировании дополнительных модулей для Астериска, если он компилировался не на этой машине (например установка FreePBX с диска, где все бинарники уже скомпилированы и нет заголовочных файлов), обычно заканчивается сообщением в логах во время звгрузки модуля "was not compiled with the same compile-time options as this version of Asterisk".
Поиск по Нету ничего путного не дал кроме рекомендации перекомпилировать Asterisk. Однако копание в исходниках дало такой параметр: AST_BUILDOPT_SUM. Именно он генерируется на этапе компиляции Астериска и прописывается в каждом модуле для проверки скомпилирован ли он вместе с основным Астериском.
Для того, что бы найти его значение, открываем любым редактором (лучше шестнадцатеричным) какой-нибудь из модулей, например chan_sip.so и ищем в нем слово AST_BUILDOPT_SUM. Следом за ним в кавычках идет 19 шестнадцатеричных символов. Берем их и правим файл include/asterisk/buildopts.h меняя значение AST_BUILDOPT_SUM на полученные 19 символов.
Необходимо отдавать себе отчет, что такая защита сделана не зря, и обращать внимание на строку "will not be initialized as it may cause instability" (может привести к нестабильности).

суббота, 13 августа 2011 г.

Как перенести контакты с обычного телефона на Android

В обычном телефоне с Bluetooth (SonyEricsson W760i, LG Cookie) присутствует опция отправить все контакты по Bluetooth. Однако телефон с ОС Android по умолчанию не принимает ничего кроме музыки.
Проблема была решена таким образом. С телефона контакты были пересланы на компьютер с Bluetooth-адаптером и записаны на флешку в телефоне с Android'ом. Далее была выбрана опция: импортировать контакты с SD-карты.

четверг, 14 июля 2011 г.

Получение сетки IPv6 адресов через 3G-модем

Захотелось мне получить доступ с работы к моей домашней сети, которая подключается к Интернету через 3G-модем. Естественно маршрутизатор от сотовика получает серый адрес. Сразу стало понятно, что настроить проброс портов на NAT'е провайдера задача нереальная, покупать статический адрес и колдовать с NAT'ом на своем маршрутизаторе дороговато, да и не актуально, а попытаться завести домой сеть IPv6 - задача намного интереснее и познавательней.

вторник, 13 июля 2010 г.

appinfo.json

Каким образом запускаются пользовательские приложения определяется в файле appinfo.json, расположенном в верхней папке (фактически корне) пользовательского приложения.
Как видно из appinit.cgi в файле appinfo.json анализируются следующие параметры.
  • appinfo_format - до конца не понял, но похоже на проверку версии appinfo.json, в настоящий момент используеься 1.
  • name - собственно имя приложения, должно совпадать с названием каталога.
  • version - версия приложения, нигде не проверяется
  • enabled - должен быть равен 1, если разрешено управление приложением через appinit.cgi.
  • daemon_script - скрипт вызываемый при запуске/остановке приложения, в качестве параметра командной строки передается start и stop, соответственно.
  • crontab - строка добавляемая в crontab, автоматически при запуске приложения
  • setup_script
  • gayaui_path
  • webui_path 

понедельник, 12 июля 2010 г.

appinit.cgi

Попробуем разобраться как запускаются пользовательские приложения на NetworkedMediaTank.
В скрипт запуска ftp-сервера /mnt/syb8634/etc/ftpserver.sh добавляется запуск приложения /share/Apps/AppInit/appinit.cgi "$1", которое должно найти пользовательские програмы в каталоге /share/Apps/ и выполнить их запуск