Debian.pro

Блог для пользователей и администраторов Debian


Выцепляем ca-bundle для ssl-сертификата.

Частенько случается такое, что у вас на руках есть только сам сертификат и ключ. Ну там клиент прислал. Для корректной же настройки https нужен ещё и т.н. «CA Bundle» (или по-простому — цепочка сертификатов вплоть до корневого).
Ещё чаще клиент не знает, что это за сертификат, откуда он его взял, а уж тем более ничего не знает про то, где взять bundle для него. Многие админы начинают выяснять у кого этот сертификат куплен, эмпирически пытаться найти цепочки, ну и другие глупости делать.

Адекватный сисадмин же знает, что у любого сертификата, кроме корневого, есть поле CA Issuers, в котором можно посмотреть, каким сертификатом подписан текущий. Ну а дальше, имея эту информацию, можно построить цепочку, используя только openssl, да wget/curl.

Для примера я взял бесплатный StartSSL-евский сертификат, у которого цепочка весьма длинная.
Допустим, мы его получили сразу в PEM-формате (то есть обычном текстовом — в моём примере это файл debian.pro.crt), чуть ниже будет пример того, как сертификат можно превратить в PEM. Погнали:

user@server:~$ openssl x509 -in debian.pro.crt -text | grep 'CA Issuers'
    CA Issuers - URI:http://aia.startssl.com/certs/sub.class1.server.ca.crt

Окей, первым сертификатом в CA Bundle станет http://aia.startssl.com/certs/sub.class1.server.ca.crt. Качаем его:

user@server:~$ wget http://aia.startssl.com/certs/sub.class1.server.ca.crt

Получим файл sub.class1.server.ca.crt в DER-формате. Чтобы его можно было скормить в nginx/apache/whatever, нужно конвертировать его в PEM:

user@server:~$ openssl x509 -in sub.class1.server.ca.crt -inform DER -outform PEM -out sub.class1.server.ca.pem.crt

Продолжаем строить цепочку.

user@server:~$ openssl x509 -in sub.class1.server.ca.pem.crt -text | grep 'CA Issuers'
    CA Issuers - URI:http://aia.startssl.com/certs/ca.crt

Опять качаем http://aia.startssl.com/certs/ca.crt, конвертируем его в pem. У меня получился файл ca.pem.crt. Пытаемся построить цепочку дальше:

user@server:~$ openssl x509 -in ca.pem.crt -text | grep 'CA Issuers'

В ca.pem.crt уже нет поля Issuers, т.к. это «корневой» сертификат, никем не подписанный — его добавляют в доверенные уже на клиентах (в браузере, в системе). Единственная оговорка, что бывают кросс-подписанные сертификаты, в таком случае у вас на каждый следующий сертификат будут чередоваться 2 сертификата в Issuers — тогда просто остановитесь на самом первом из них.

Осталась самая мелочь — подготовить crt-файл для apache/nginx.
Для nginx я делаю так:

user@server:~$ cat debian.pro.key debian.pro.crt sub.class1.server.ca.pem.crt ca.pem.crt > debian.pro.pem

Для апача старых версий придется держать отдельные файлы (но ca-bundle нужно собрать в один файл):

user@server:~$ cat sub.class1.server.ca.pem.crt ca.pem.crt > debian.pro.ca.pem

Всё. Занимает секунд 30 и не нужно лишних писем и ожиданий ;)

Наркомания: Запускаем bash-скрипт по http через nginx.

Не знаю, зачем это кому-то может понадобиться. Вообще это достаточно странная идея. С другой стороны, мне понадобилось пару раз (про это будет отдельная статья). Запустить можно любую команду. Из ограничений — запускается всё от того же пользователя, от которого работает nginx (по умолчанию www-data). Ну и вообще это странная идея. И делать мы будем через [...]

Большой мануал: часть 12. Ставим и немного настраиваем mysql-сервер (или Percona Server), создаём базы данных.

Эта статья — часть Большого Мануала по настройке lamp-сервера на debian. Предыдущая часть цикла — Немного безопасности и паранойи на вашем сервере дешевым способом. Snoopy. Сегодня мы будем ставить mysql-сервер и немного настраивать его. Ну и заодно на сдачу создадим базы данных для нашего сайта. Если вы читали часть 3 мануала, то у вас подключены [...]

Большой мануал: часть 10. Cинхронизируем время на сервере.

Эта статья — часть Большого Мануала по настройке lamp-сервера на debian. Предыдущая часть цикла — Cоздаём пользователей, группы и структуру каталогов на будущее. Следующая часть цикла — Немного безопасности и паранойи на вашем сервере дешевым способом. Snoopy. На сервере важно поддерживать более или менее точное время. Чтобы было удобно читать логи, что бы ваш сервер [...]

Большой мануал: часть 9. Cоздаём пользователей, группы и структуру каталогов на будущее

Эта статья — часть Большого Мануала по настройке lamp-сервера на debian. Предыдущая часть цикла — учимся генерировать случайные пароли. Следующая часть цикла — Cинхронизируем время на сервере. Сегодня мы будем создавать пользователей в системе, которые позднее будут использоваться для доступа к серверу по ssh/ftp и для редактирования файлов наших сайтов. Всё происходящее ниже — фундамент [...]

Большой мануал: часть 8: учимся генерировать случайные пароли

Эта статья — часть Большого Мануала по настройке lamp-сервера на debian. Предыдущая часть цикла — Настраиваем крон и не делаем дырок в кроне Следующая часть цикла — Cоздаём пользователей, группы и структуру каталогов на будущее. Конечно, эта статья — не про настройку сервера, но она нам очень пригодится, чтобы создавать пароли пользователям, пароли для баз [...]

Большой мануал: часть 7. Настраиваем крон и не делаем дырок в кроне

Эта статья — часть Большого Мануала по настройке lamp-сервера на debian. Предыдущая часть цикла — Настраиваем locales и клавиатуру для ipmi/vnc-консолей. Следующая часть цикла — учимся генерировать случайные пароли. Итак, cron. Один из (и это важно — это всего лишь один из) планировщиков задач в *nix-системах. Да, самый распространенный. Да, он есть почти во всех [...]

Большой мануал: часть 6. Настраиваем locales и клавиатуру для ipmi/vnc-консолей

Эта статья — часть Большого Мануала по настройке lamp-сервера на debian. Предыдущая часть цикла — hostname, файл hosts, ptr и вот это вот всё. Следующая часть цикла — Настраиваем крон и не делаем дырок в кроне. Следующим этапом (который многие забывают сделать, кстати) при настройке сервера мы настроим locales на сервере и настроим модель клавиатуры [...]

Большой мануал: часть 5. hostname, файл hosts, ptr и вот это вот всё.

Эта статья — часть Большого Мануала по настройке lamp-сервера на debian. Предыдущая статья цикла — Настраиваем openssh-server. Следующая статья цикла — Настраиваем locales и клавиатуру для ipmi/vnc-консолей Сегодня мы поговорим про одну из самых важных вещей при настройке сервера. Был такой анекдот (дословно не помню): — чего так сильно задумался? — да hostname серверу выбираю. [...]