Предварительная подготовка Установка веб-серверов nginx и apache Генерация сертификата Настройка веб-серверов nginx и apache с сертификатами
Окружение
Необходимо внести DNS-запись с наименованием веб-сервера в файл /etc/hosts (необходимы права пользователя root):
echo <ip-адрес> <название сайта> > /etc/hosts
Например:
echo 127.0.0.1 redsite.ru > /etc/hosts
Все команды, используемые в данном разделе, выполняются с правами пользователя root, если не указано иное.
Выполните установку пакетов:
dnf install nginx
Запустите службу nginx и добавьте ее в автозагрузку:
systemctl enable nginx --now
dnf install httpd
Запустите службу apache и добавьте ее в автозагрузку:
systemctl enable httpd --now
В качестве примера будет использоваться домен - redsite.ru.
В данном разделе будет рассмотрен выпуск самоподписанных сертификатов для тестовых или внутренних серверов.
В качестве утилиты генерации сертификатов будет использоваться openssl, который по умолчанию предустановлен в РЕД ОС.
Работа с командами утилиты openssl осуществляется с правами непривилегированного пользователя и не требует прав администратора.
Данный раздел является общим для веб-серверов nginx и apache.
1. Создайте корневой закрытый ключ:
openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc
где:
genpkey – команда создания закрытого ключа;
genpkey
algorithm RSA – алгоритм асинхронного шифрования, именно он используется для выделения открытого ключа из этого закрытого;
algorithm RSA
out rootCA.key – получаемый файл закрытого ключа;
out rootCA.key
aes-128-cbc – алгоритм симметричного шифрования, которым зашифровывается файл закрытого ключа с помощью пароля. Пароль необходимо ввести.
aes-128-cbc
Вывод команды будет иметь примерно следующий вид:
.......+++++ ...+++++ Enter PEM pass phrase: Verifying - Enter PEM pass phrase:
2. Создайте открытый ключ:
openssl req -x509 -new -key rootCA.key -sha256 -days 365 -out rootCA.crt
req – команда создания сертификатов или запросов на сертификаты;
req
-x509 – создание именно сертификата, а не запроса;
-x509
-new – новый сертификат (потребуется ввести значения некоторых полей в сертификате);
-new
-key rootCA.key – используемый закрытый ключ, из которого следует создать открытый;
-key rootCA.key
-sha256 – алгоритм хеширования для создания подписи ключа;
-sha256
-days 365 – выпуск сертификата на 1 год;
-days 365
-out rootCA.crt – получаемый сертификат.
-out rootCA.crt
Пример вывода команды:
Enter pass phrase for rootCA.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:RU State or Province Name (full name) []:Murom Locality Name (eg, city) [Default City]:Murom Organization Name (eg, company) [Default Company Ltd]:RS Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:redsite.ru Email Address []:admin@redsite.ru
3. Создайте файл порядковых номеров для выпуска сертификатов, в нем следует указать два нуля:
echo 00 > rootCA.srl
4. В openssl нет возможности добавлять некоторые поля, например, такие как subjectAltName. Для этого создайте конфигурационный файл с необходимыми параметрами:
subjectAltName
nano redsite.cnf
Содержимое файла следующее:
[ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = RU stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Murom localityName = Locality Name (eg, city) localityName_default = Murom organizationName = Organization Name (eg, company) organizationName_default = RS commonName = Common Name (eg, YOUR name or FQDN) commonName_max = 64 commonName_default = redsite.ru [ req_ext ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = DNS:redsite.ru
здесь:
[req]
default_bits = 2048 – длина ключа по умолчанию;
default_bits = 2048
distinguished_name = req_distinguished_name – это поля в сертификате, например, Common Name, organizationName и др. Для этих полей создается блок req_distinguished_name ниже;
distinguished_name = req_distinguished_name
req_distinguished_name
req_extensions = req_ext – расширение для req, в котором можно добавить дополнительные поля в сертификат. В данном параметре указывается наличие ниже блока req_ext с дополнительными полями;
req_extensions = req_ext
req_ext
раздел [req_distinguished_name] – параметры для конфигурации сертификата;
[req_distinguished_name]
раздел [req_ext] – расширенные параметры для конфигурации сертификата:
[req_ext]
basicConstraints = CA:FALSE – полученные сертификаты нельзя использовать как центр сертификации;
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment – созданный ключ будет иметь следующие свойства: неотрекаемость, цифровая подпись (сертификат можно использовать в качестве цифровой подписи), шифрование ключей;
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = DNS:redsite.ru – здесь указывается поле subjectAltName и его значение.
subjectAltName = DNS:redsite.ru
5. Создайте закрытый ключ для домена:
openssl genpkey -algorithm RSA -out redsite.key
......................+++++ .............................+++++
6. Создайте с закрытым ключом файл запроса на сертификат. После выполнения команды на всех полях необходимо нажать Enter, т.к. данные используются из конфигурационного файла nginx.cnf, который был создан ранее:
openssl req -new -key redsite.key -config redsite.cnf -reqexts req_ext -out redsite.csr
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]:RU State or Province Name (full name) [Murom]: Murom Locality Name (eg, city) [Murom]: Murom Organization Name (eg, company) [RS]: RS Common Name (eg, YOUR name or FQDN) [redsite.ru]: redsite.ru
7. Сгенерируйте сертификат для домена:
openssl x509 -req -days 365 -CA rootCA.crt -CAkey rootCA.key -extfile redsite.cnf -extensions req_ext -in redsite.csr -out redsite.crt
x509 – создание сертификата методом подписания;
x509
-req – если производится подпись файла запроса, необходимо использовать эту опцию;
-req
-days 365 – срок сертификата 1 год;
-CA rootCA.crt -CAkey rootCA.key – корневая пара ключей;
-CA rootCA.crt -CAkey rootCA.key
-extfile redsite.cnf – файл, содержащий расширения сертификатов;
-extfile redsite.cnf
-in redsite.csr -out redsite.crt – файл запроса и файл сертификата.
-in redsite.csr -out redsite.crt
Signature ok subject=C = RU, ST = Murom, L = Murom, O = RS, CN = redsite.ru, Getting CA Private Key Enter pass phrase for rootCA.key:
8. Проверьте наличие сертификатов:
ls -l итого 60 -rw-rw-r--. 1 user user 801 июн 13 22:23 redsite.cnf -rw-rw-r--. 1 user user 1245 июн 13 22:26 redsite.crt -rw-rw-r--. 1 user user 1058 июн 13 22:25 redsite.csr -rw-------. 1 user user 1704 июн 13 22:23 redsite.key -rw-rw-r--. 1 user user 1363 июн 13 22:20 rootCA.crt -rw-------. 1 user user 1874 июн 13 22:18 rootCA.key -rw-rw-r--. 1 user user 3 июн 13 22:26 rootCA.srl
9. Затем необходимо поместить сертификаты в директории /etc/ssl/certs и /etc/ssl/private следующим образом:
sudo mkdir /etc/ssl/private sudo cp rootCA.crt redsite.crt /etc/ssl/certs sudo cp redsite.key /etc/ssl/private
10. Добавьте сертификат в системное хранилище. Для этого скопируйте сертификаты в каталог /etc/pki/ca-trust/source/anchors/:
sudo cp rootCA.crt redsite.crt /etc/pki/ca-trust/source/anchors/
Затем выполните команды обновления (с правами пользователя root):
update-ca-trust update-ca-trust extract
1. Приведите раздел Settings for a TLS enabled server файла /etc/nginx/nginx.conf к следующему виду:
nano /etc/nginx/nginx.conf
# Settings for a TLS enabled server. # server { # раскомментируйте строку listen 443 ssl default_server; # раскомментируйте строку и замените http2 на default_server listen [::]:443 ssl default_server; # раскомментируйте строку и замените http2 на default_server server_name redsite; #укажите имя сервера без доменной области # root /usr/share/nginx/html; # ssl_certificate "/etc/ssl/certs/redsite.crt"; ssl_certificate_key "/etc/ssl/private/redsite.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # error_page 404 /404.html; # location = /404.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } } # раскомментируйте строку }
В конце файла необходимо добавить фигурную скобку «}», чтобы избежать ошибок синтаксиса от nginx.
2. Выполните проверку настроек nginx:
nginx -t
Вывод команды должен иметь примерно следующий вид:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Выполните перезапуск службы nginx:
systemctl restart nginx
Примените правило SELinux для разрешения подключений:
setsebool -P httpd_read_user_content 1
Для проверки перейдите в браузере по ссылке https://<ваш_сайт>.
https://<ваш_сайт>
1. Для работы SSL необходимо установить следующий пакет:
dnf install mod_ssl
2. Приведите файл /etc/httpd/conf/httpd.conf к виду:
ServerName redsite.ru # раскомментировать строку и указать имя сервера LoadModule ssl_module modules/mod_ssl.so # добавить строку в конец файла
3. В /etc/httpd/conf.d/ssl.conf укажите путь до сертификатов:
SSLCertificateFile /etc/ssl/certs/redsite.crt # укажите путь до сертификата (открытая часть) SSLCertificateKeyFile /etc/ssl/private/redsite.key # укажите путь до сертификата (закрытая часть)
4. Проверьте настройки httpd:
apachectl configtest
Syntax OK
5. Для применения изменений перезапустите службу httpd:
systemctl restart httpd
6. Для проверки перейдите в браузере по ссылке https://<ваш_сайт>. Например:
Дата последнего изменения: 09.10.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
Нажимая «Отправить запрос», вы соглашаетесь с условиями обработки персональных данных.
Вы будете получать только актуальную информацию по обновлению безопасности
Подписываясь на уведомления, вы соглашаетесь с условиями обработки персональных данных.
На ваш почтовый адрес отправлено письмо с подтверждением подписки.