Делаем долгие сертификаты
После того, как Россия развязала агрессивную войну в Украине в 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
Выбираем 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
Кастомные 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
Заливаем файлы сертификата на сервер.
./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