Задача: Нужно внутренней системе в доменной структуре на базе Ubuntu 22.04 Server для Web—сервиса (nginx или Apache) каким-либо образом выпустить сертификат из Центра сертификации Windows в домене дабы работа через браузер строилась не по ссылки вида http, а по ссылке вида https. Вот такую задачу попросил проработать наш программист пишущий различные автоматизации для связки магазина и 1С 7.7.
Посмотрев с другой стороны на задачу, понял, что заметка будет интересной, как всегда все сперва обкатываю на своем тестовом полигоне, понадобится:
Hostname: srv-dc01.polygon.local
OS: Windows Server 2012 R2 StdRoles: AD,DHCP,DNS,CAIP: 10.90.90.3
Hostname: srv-gw.polygon.local
OS: Mikrotik v7.1.3 on CHR (x86-64)Roles: GatewayIP: 10.90.90.2
Hostname: srv-web.polygon.local
OS: Ubuntu 22.04 ServerRoles: Web-сервисIP: 10.90.90.11
Шаг №1: На системе srv-web(OS: Ubuntu 22.04 Server) прописываем содержимое в файле hosts, текущий IP адрес система получила по DHCP от srv-dc01, это: 10.90.90.11
ekzorchik@srv-web:~$ sudo nano /etc/hosts 10.90.90.11 srv-web.polygon.local srv-web
Шаг №2: На системе srv-dc01 (OS: Windows Server 2012 R2 Std), подключаюсь по RDP, авторизуюсь как Domain Admin, Login: ekzorchik и в оснастке DHCP для системы srv-web настраиваю что за этой системой настроена резервация IP адреса, т.е. 10.90.90.11

Шаг №3: На системе srv-dc01 (OS: Windows Server 2012 R2 Std), подключаюсь по RDP, авторизуюсь как Domain Admin, Login: ekzorchik и в оснастке DNS: Forward Lookup Zones - polygon.local создаю Record A Type запись:
Hostname: srv-webFully qualified domain name (FQDN): srv-web.polygon.localIP address: 10.90.90.11Create associated pointer (PTR) record: отмечаю галочкой
Шаг №4: После проверяю с домен контроллера что вижу через ICMP запросы узел srv-home:
Win + X - Command Prompt
C:\Users\ekzorchik>ping srv-web Pinging srv-web.polygon.local [10.90.90.11] with 32 bytes of data: Reply from 10.90.90.11: bytes=32 time<1ms TTL=64 Reply from 10.90.90.11: bytes=32 time<1ms TTL=64 Ping statistics for 10.90.90.11: Packets: Sent = 2, Received = 2, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Control-C ^C C:\Users\ekzorchik>
Отлично, узел откликается.
Шаг №5: На домен контроллере srv-dc01 создадим шаблон который будем использовать для выпуска сертификатов, ориентированных на Ubuntu системы для Web—сервиса, либо nginx, либо apache2:
logon in srv-dc01 (User: ekzorchik Group: Domain Admins, Enterprise Admins, Schema Admins)
Win + X -> Control Panel - View by: Small icons - Administrative Tools - Certification Authority - Certification Authority (Local) - srv-dc01-ca — через правый клик мышью на Certificate Templates выбираю Manage, затем на основе уже имеющего место быть шаблона "Web Server" через правый клик мышью на нем выбираю "Duplicate Template" открывается Properties of New Template
вкладка "General"
Template display name: WebServerUbuntuValidity period: 2 yearsRenewal period: 1 years
вкладка "Request Handling"
Purpose: Signature and encryptionAllow private key to be exported: отмечаю галочкой
вкладка "Extensions"
Extensions included in this template: Application Policies (Server Authentication), через Edit, Add, выбираю еще Client Authentication и нажимаю OK
вкладка "Security"
Login: ekzorchik@polygon.local (Read, Write, Enroll,Autoenroll)Login: SRV-DC01$ (Read,Write,Enroll,Autoenroll)
вкладка "Issuance Requirements"
CA certificate manager approval: отмечаю галочкой
вкладка "Subject Name"
Supply in the request: отмечаю галочкой
и нажимаю Apply, OK.
после закрываем оснастку управления шаблонами, т.е. Certificate Templates Console, переходим в оснастку Certification Authority (Local) - srv-dc01-ca — и через правый клик мышью на Certificate Templates выбираю New - Certificate Template to Issue, нахожу свой созданный выше шаблон с именем WebServerUbuntu и

нажимаю ОК, после в списке Certificate Templates появится новосозданный шаблон с моим именем WebServerUbuntu.
см. скриншот ниже для наглядного понимания.

Шаг №6: Формируем запрос к Центру сертификации для Ubuntu Web—сервера на srv-dc01 запустив оснастку mmc:
Win + X - Command Prompt (Admin), Yes
C:\Windows\system32> mmc.exe
File - Add/Remove Snap-in… - Available snap-ins: выбираю Certificates и нажимаю Add
This snap-in will always manage certificates for: выбираю Computer account
и нажимаю Next, Finish, OK.
Затем делаю запрос:
Console Root - Certificates (Local Computer) - Personal — через правый клик на Certificates выбираю All Tasks - Advanced Operations - Create Custom Request…, нажимаю Next, Next, выбираю созданный выше шаблон
Template: WebServerUbuntuRequest format: PKCS #10

и нажимаю Next
нажимаю стрелочку ВОЗЛЕ Details вниз дабы перейти в Properties

и на вкладке "Subject"
Subject name:
Type: Common NameValue: srv-web.polygon.local
и нажимаю Add
Alternative name:
Type: DNSValue: srv-web.polygon.local
и нажимаю Add, делаю еще Value (Свойства) для srv-web
Type: IP address (v4)Value: 10.90.90.11
см скриншот ниже что у Вас должно получиться

и нажимаю Add
вкладка "General"
Friendly name: srv-webDescription: srv-web
и нажимаю Apply, OK, Next
указываю путь где сохранить запрос
File Name: нажимаю Browse, C:\Soft\srv-web.req и нажимаю SaveFile format: Base 64

и нажимаю Finish.
Шаг №7: Принимаем запрос srv-web.req в центре сертификации и одобряем его:
logon in srv-dc01 (User: ekzorchik Group: Domain Admins, Enterprise Admins, Schema Admins)
Win + X -> Control Panel - View by: Small icons - Administrative Tools - Certification Authority - Certification Authority (Local) через правый клик на srv-dc01-ca выбираю All Tasks - Submit new request… — указываю путь до файла и сам файл C:\soft\srv-web.req и нажимаю Open, после чего в меню "Pending Requests" отобразится запрос srv-web.req

т.к. запрос подгружен, сейчас самый важный этап — это одобрить его:
через правый клик мышью в меню "Penging Requests" на подгруженном запросе с Request ID: 10 выбираю All Tasks - Issue

после чего в меню "Issued Certificates" появится сертификат.
Шаг №8: Выданный сертификат для узла srv-web.polygon.local сохраняю, как CER—файл:
logon in srv-dc01 (User: ekzorchik Group: Domain Admins, Enterprise Admins, Schema Admins)
Win + X -> Control Panel - View by: Small icons - Administrative Tools - Certification Authority - Certification Authority (Local) - Issued Certificates — через правый клик на Request ID: 10 выбираю Open — вкладка Details - Copy to File… - Next,
Select the format you want to use: DER encoded binary X.509 (.CER)
и нажимаю Next
File name: c:\soft\srv-web.cer
после делаю import данного сертификата:
logon in srv-dc01 (User: ekzorchik Group: Domain Admins, Enterprise Admins, Schema Admins)
Win + X -> Control Panel - View by: Small icons - Administrative Tools - Certification Authority - Certification Authority (Local) - Personal — через правый клик на Certificates выбираю All Tasks - Import
Store Location: Local Machine
нажимаю Next
File name: Browse, C:\Soft\srv-web.cert
и нажимаю Next
Place all certificates in the following store: выбираюCertificate store: Personal
и нажимаю Next, Finish, если все сделано за раз, то в Personal появляется сертификат с приватным ключом (у него иконка с ключиком)

На заметку: Но если удалить из Personal - Certificates — сертификат srv-web.polygon.local, а потом заново сделать Import то сертификат будет без приватной части, только публичная и придется заново формировать запрос, одобрять его, сохранять в cer файл и импортировать. Это очень важный момент.
Шаг №9: Теперь делаю экспорт из сертификата srv-web.polygon.local приватный ключ для получения PFX файла:
Win + X - Command Prompt (Admin), Yes
C:\Windows\system32> mmc.exe
File - Add/Remove Snap-in… - Available snap-ins: выбираю Certificates и нажимаю Add
This snap-in will always manage certificates for: выбираю Computer account
и нажимаю Next, Finish, OK.
Console Root - Certificates (Local Computer) - Certificate Enrollment Request - Certificates — вижу свой сертификат выданный для srv-web.polygon.local (с иконкой ключика) через правый клик мышью по нему выбираю All Tasks - Export - Next
Do you want to export the private key with the certificate? выбираю Yes, export the private key
и нажимаю Next
Personal Information Exchange - PKCS #12 (.PFX): выбираюInclude all certificates in the certification path if possible: отмечаю галочкойExport all extended properties: отмечаю галочкой

и нажимаю Next, защищаю парольной фразой приватный ключ
Password: отмечаю галочкой и задаю пароль, к примеру Aa1234567aAConfirm password: Aa1234567aA

и нажимаю Next, указываю куда сохранить
File Name: Browse, C:\soft\srv-web.pfxи нажимаюNext

и нажимаю Finish.
Шаг №10: Передаю полученный srv-web.pfx файл на srv-web.polygon.local через приложение WinSCP

Шаг №11: На системе srv-web.polygon.local произвожу разбор pfx файла на файлы: key & pem
ekzorchik@srv-web:~$ ls -l srv-web.pfx -rw-r--r-- 1 ekzorchik ekzorchik 3162 May 7 13:56 srv-web.pfx ekzorchik@srv-web:~$ file srv-web.pfx srv-web.pfx: data ekzorchik@srv-web:~$ ekzorchik@srv-web:~$ openssl pkcs12 -in srv-web.pfx -out srv-web.pem -clcerts -nodes -legacy Enter Import Password: ввожу Aa1234567aA ekzorchik@srv-web:~$ openssl pkcs12 -in srv-web.pfx -out srv-web.key -nocerts -nodes -legacy Enter Import Password: ввожу Aa1234567aA ekzorchik@srv-web:~$
В результате получаю следующие файлы:
srv-web.pem - файл приватного ключа RSA в PEM-кодировке (без парольной фразы);srv-web.key - файл сертификата формата X.509 в PEM-кодировке.
Шаг №12: На систему srv-web.polygon.local устанавливаю Web—сервис nginx и создаю конфигурацию доступа через URL адрес вида https при обращении к системе:
ekzorchik@srv-web:~$ sudo apt-get install -y nginx
ekzorchik@srv-web:~$ sudo cp -f srv-web.{pem,key} /etc/nginx/ssl/
ekzorchik@srv-web:~$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.conf
ekzorchik@srv-web:~$ sudo rm /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
ekzorchik@srv-web:~$ sudo nano /etc/nginx/sites-available/default.conf
server {
server_name srv-web.polygon.local;
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/srv-web.pem;
ssl_certificate_key /etc/nginx/ssl/srv-web.key;
}
ekzorchik@srv-web:~$ sudo ln -s /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.conf
ekzorchik@srv-web:~$ sudo nginx -t
nginx: [emerg] SSL_CTX_use_certificate("/etc/nginx/ssl/srv-web.pem") failed (SSL: error:0A00018E:SSL routines::ca md too weak)
nginx: configuration file /etc/nginx/nginx.conf test failed
ekzorchik@srv-web:~$
ekzorchik@srv-web:~$ sudo nano /etc/ssl/openssl.cnf
#изменяю значение 2 на 0
CipherString = DEFAULT:@SECLEVEL=0
ekzorchik@srv-web:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ekzorchik@srv-web:~$ sudo systemctl restart nginx
ekzorchik@srv-web:~$
ekzorchik@srv-web:~$ sudo netstat -tulpn | grep :443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 2261/nginx: master
ekzorchik@srv-web:~$
Шаг №13: После проверяю что обратившись с srv-dc01 на URL: https://srv-web.polygon.local задействуется сертификат выше:

также попробовал с srv-mail01-cas через бразуер IE выполнить запрос на URL адрес, и он успешно отработал.
А вот при обращении через Google Chrome пишет:
NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM
Что по итогу, я разобрал как можно для Ubuntu систем создать сертификат из Центра сертификации, который работает в домене на базе Windows, как произвести импорт в Web-сервис nginx, что мне и требовалось.
На этом пока данная заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.