ВведениеДля получения SSL-сертификата для сервера ejabberd нужно несколько вещей:
- Создать запрос на подпись сертификата — Certificate Signing Request (CSR) и приватный ключ,
- Передать запрос на подпись сертификата в удостоверяющий центр, дать ему подписать его и забрать оттуда готовый сертификат.
- Объединить сертификат, приватный ключ (и цепочку сертификатов) в PEM-файл, совместимый с ejabberd,
- Установить сертификат в ejabberd.
При помощи сертификата можно защитить XMPP-подключения и содержимое переговоров. Таким образом другим становится значительно сложнее прослушивать переговоры. В сочетании с включенным протоколом OTR это позволит создать сверхзащищённый канал для переговоров.
Создание запроса на подпись сертификата
ВАРИАНТ 1. Платный
Создадим каталог для хранения всех необходимых файлов и перейдём в него:
mkdir -p ~/Certificates/xmpp
cd ~/Certificates/xmpp
Теперь воспользуемся OpenSSL для создания приватного ключа и запроса на подпись сертификата — CSR. При помощи первой команды это можно сделать интерактивно, а при помощи второй — не интерактивно. Убедитесь, что задали правильное значение в поле Общее имя — Common Name (CN). В нём должен быть указан URL XMPP-сервера:
Интерактивная команда:
openssl req -nodes -newkey rsa:2048 -keyout private.key -out CSR.csr
Не интерактивная команда:
openssl req -nodes -newkey rsa:2048 -keyout private.key -out CSR.csr -subj "/C=NL/ST=State/L=City/O=Company Name/OU=Department/CN=chat.example.org"
В результате работы команды появятся два файла: CSR.csr и private.key. Теперь нужно передать запрос на подпись сертификата — CSR в удостоверяющий центр. Это может быть любой удостоверяющий центр. У меня есть успешный опыт использования Xolphin, но это могут быть другие удостоверяющие центры, например, Digicert и Verisign.
Как только вы передадите запрос на подпись сертификата и получите сертификат, можно продолжать дальше.
Вариант II. Самоподписаный
Создаем наше CA.
Создаём корневой ключ
openssl genrsa -out myCA.key 2048
Создаём корневой сертификат.
openssl req -x509 -new -key myCA.key -days 10000 -out myCA.crt
Здесь попросит заполнить несколько полей. Отвечать на вопросы тут можно как душе угодно. Главное поле — <<Common Name>> — вводим имя(FQDN) нашего домена(сервера). Оно используется для сопоставления сервера. Помещение в это поле чего-либо кроме этого имени приведет к созданию бесполезного сертификата. 10000 дней — срок его годности.
Все! Теперь мы можем создавать сертификаты для наших серверов и устанавливать корневой сертификат на наши клиентские машины.
Создаем сертификат подписаный нашим СА
Генерируем ключ.
openssl genrsa -out im.key 2048
Создаем запрос на сертификат.
openssl req -new -key im.key -out im.csr
* Тут также важно правильно указать имя сервера в поле Common Name
Подписываем запрос на сертификат нашим корневым сертификатом.
openssl x509 -req -in im.csr -CA myCA.crt -CAkey myCA.key -CAcreateserial -out im.crt -days 5000
Теперь на клиенты нужно установить корневой сертификат myCA.crt.
myCA.crt — можно давать друзьям, устанавливать, копировать не сервера, выкладывать в публичный доступ
rootCA.key — следует держать в тайне. доллжны быть помещены в каталог, доступный для чтения только root
, желательно внутри /etc
. Права на каталог можно изменить chmod
с параметрами 0700.
Создание сертификата для ejabberd
Создаем папку для хранения сертификатов джаббера
mkdir /usr/local/etc/ejabberd/certs
cd /usr/local/etc/ejabberd/certs
Кладем сюда наш приватный ключ(im.key) и сертификат(im.crt). Теперь нужно объединить эти файлы в один файл .pem, который уже можно «скормить» ejabberd
cat im.key >> im.pem
cat im.crt >> im.pem