May 20, 2022

Делаем долгие сертификаты

После того, как Россия развязала агрессивную войну в Украине в 2022 году многие иностранные компании перестали работать со всей страной. Годовые сертификаты стало делать сложнее, а трёхмесячные обновлять на всех устройствах не всегда просто. В этой статье я собрал все материалы как генерировать запрос на сертификат, как его подписать своим центром сертификации, и сделать так, чтобы никто не ругался.

Генерируем запрос

Качаем и устанавливаем openssl. Скомпилированный есть на slproweb.com

Идём в папку, в которую поставили OpenSSL, в подпапку bin

Cоздаем в блокноте файл конфигурации с расширением .cnf, например myconf.cnf, Заполняется исключительно на английском языке. пример моего файла:

[ req ]
default_bits       = 1024
distinguished_name = req_distinguished_name
req_extensions     = req_ext
[ req_distinguished_name ]
countryName                 = Country Name (2 letter code) {RU}
stateOrProvinceName         = State or Province Name (full name) {Sverdlovskaya}
localityName               = Locality Name (eg, city) {Yekaterinburg}
organizationName           = Organization Name (eg, company) {JSC Forum-group}
commonName                 = Common Name (e.g. server FQDN or YOUR name) {sunny-nas.forum.local}
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1   = sunny.dc.forum-gd.ru
DNS.2   = www.sunny.dc.forum-gd.ru
DNS.3   = sunny-dc.forum.local
IP.1    = 46.48.127.190

IP и DNS – необходимо поправить в cnf-файле

открываем командную строку от имени администратора, идём в папку openssl\bin

openssl req -new -newkey rsa:2048 -nodes -config myconf.cnf -subj "/C=RU/ST=Sverdlovskaya/L=Yekaterinburg/O=JSC Forum-group/CN=sunny.dc.forum-gd.ru" -out sunny.dc.forum-gd.csr -keyout sunny.dc.forum-gd.key

Жирным выделены названия файлов, которые получатся, можно изменить их на любые удобные

Получаем 2 файла в этой же папке – запрос в формате .csr и ключ .key

Подписываем запрос

Открываем ослика, от имени доменного администратора, и идём по пути https://fca/certsrv

Жмем Запрос сертификата → расширенный запрос сертификата

В выпадающем меню выбираем Веб-сервер (5лет), в поле сохранённый запрос вставляем содержимое .csr файла. Нажимаем выдать.

Выбираем BASE64 и качаем по обеим ссылкам.

После того, как вы скачали файлы, переместите их из папки загрузок профиля вашего пользователя, под которым вы открыли осла. Там будет 2 файла certnew.cer и certnew.p7b

Как нам получить forum-fca-ca.cer

Находим p7b файл, открываем его, находим forum-fca-ca - экспортируем, выбираем Base-64 CER, выбираем путь сохранения.

Загружаем свой сертификат в FortiGate

Идём в System -> Certificates

Выбираем Import->Ca->File->Upload
Указываем корневой открытый сертификат (forum-fca-ca.cer)
Выбираем Import->Local Certificate->Certificate
Certificate file = sunny.dc.forum-gd.cer
Key file = sunny.dc.forum-gd.key

Дальше идём Policy& Objects -> Virtual Servers

Не забываем создать правила в фаерволле.

Как добавить корневой сертификат в Ubuntu

(Тестировалось на 20.04LTS)

Кастомные CA сертификаты лежат в папке:
/usr/local/share/ca-certificates

sudo nano /usr/local/share/ca-certificates/forum-fca-ca.crt

вставляем текст из корневого сертификата из пункта пораньше

-----BEGIN CERTIFICATE---—
ТУТ ВАШ СЕРТИФИКАТ
-----END CERTIFICATE---—

Либо загружаем из облака:

wget -O /usr/local/share/ca-certificates/forum-fca-ca.crt \
https://techstore.fhsvo.ru/forum-fca-ca.cer

После загрузки, либо ручного создания обновляем сертификаты.

sudo apt-get install -y ca-certificates && sudo update-ca-certificates

Уговариваем питон

Курл публикует открытые ключи всех CA.
Можно их посмотреть на их сайте, либо скачать последнюю версию.

https://curl.haxx.se/ca/cacert.pem

Качаем последнюю версию, дописываем вниз свой сертификат.

Узнаём по какому пути питон хранит свои CA.

python -m certifi

Важно помнить, что в виртуальной среде может быть свой certifi, и обновив для одного проекта скорее всего придётся обновлять и для другого.

Заменяем файл, скачанным с курла и модифицированным свой сертификатом.

Либо: вот готовый скрипт по модификации текущего cacert.pem

import certifi
import requests
try:
    test = requests.get('https://sunny.dc.forum-gd.ru:8129')
except requests.exceptions.SSLError as err:
    print('SSL Error. Need Forum-fca-ca. Try to catch it...')
    get_url = requests.get('https://techstore.fhsvo.ru/forum-fca-ca.cer')
    print(f'Server response {get_url.status_code}')
    forum_fca_ca = get_url.content
    ca_file = certifi.where()
    with open(ca_file, 'ab') as outfile:
        outfile.write(forum_fca_ca)
    print(f'Update file complete...')

Обновляем YouTrack

Заливаем файлы сертификата на сервер.

Останавливаем Youtrack

./home/web/youtrack/bin/youtrack.sh stop

Переконфигурируем

./home/web/youtrack/bin/youtrack.sh configure \
--tls-server-cert-key-file=<path-to-private-key-file> \
--tls-server-cert-file=<path-to-certificate-file> \
[--tls-server-cert-chain-file=<path-to-certificate-chain-file>]

Запускаем

./home/web/youtrack/bin/youtrack.sh restart