2.4.20.1 Настройка SSL для веб-серверов
Скачать документ Предварительная подготовка
Установка веб-серверов nginx и apache
Генерация сертификата
Настройка веб-серверов nginx и apache с сертификатами
Окружение
- Версия РЕД ОС: 7.3
- Конфигурация: Сервер графический
- Версия ПО: nginx-1.22.1-1, httpd-2.4.56-2, mod_ssl-2.4.56-2
Предварительная подготовка
Необходимо внести DNS-запись с наименованием веб-сервера в файл /etc/hosts (необходимы права пользователя root):
echo <ip-адрес> <название сайта> > /etc/hosts
Например:
echo 127.0.0.1 redsite.ru > /etc/hosts
Установка веб-серверов nginx и apache
Все команды, используемые в данном разделе, выполняются с правами пользователя root, если не указано иное.
Nginx
Выполните установку пакетов:
dnf install nginx
Запустите службу nginx и добавьте ее в автозагрузку:
systemctl enable nginx --now
Apache
Выполните установку пакетов:
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
– команда создания закрытого ключа;algorithm RSA
– алгоритм асинхронного шифрования, именно он используется для выделения открытого ключа из этого закрытого;out rootCA.key
– получаемый файл закрытого ключа;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
– команда создания сертификатов или запросов на сертификаты;-x509
– создание именно сертификата, а не запроса;-new
– новый сертификат (потребуется ввести значения некоторых полей в сертификате);-key rootCA.key
– используемый закрытый ключ, из которого следует создать открытый;-sha256
– алгоритм хеширования для создания подписи ключа;-days 365
– выпуск сертификата на 1 год;-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. Для этого создайте конфигурационный файл с необходимыми параметрами:
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
– длина ключа по умолчанию;distinguished_name = req_distinguished_name
– это поля в сертификате, например, Common Name, organizationName и др. Для этих полей создается блок req_distinguished_name ниже;req_extensions = req_ext
– расширение дляreq
, в котором можно добавить дополнительные поля в сертификат. В данном параметре указывается наличие ниже блокаreq_ext
с дополнительными полями;раздел
[req_distinguished_name]
- параметры для конфигурации сертификата;раздел
[req_ext]
- расширенные параметры для конфигурации сертификата:basicConstraints = CA:FALSE
– полученные сертификаты нельзя использовать как центр сертификации;keyUsage = nonRepudiation, digitalSignature, keyEncipherment
– созданный ключ будет иметь следующие свойства: неотрекаемость, цифровая подпись (сертификат можно использовать в качестве цифровой подписи), шифрование ключей;subjectAltName = DNS:redsite.ru
– здесь указывается поле subjectAltName и его значение.
5. Создайте закрытый ключ для домена:
openssl genpkey -algorithm RSA -out redsite.key
Вывод команды будет иметь примерно следующий вид:
......................+++++ .............................+++++
6. Создайте с закрытым ключом файл запроса на сертификат. После выполнения команды на всех полях необходимо нажать Enter, т.к. данные используются из конфигурационного файла redsite.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
– создание сертификата методом подписания;-req
– если производится подпись файла запроса, необходимо использовать эту опцию;-days 365
– срок сертификата 1 год;-CA rootCA.crt -CAkey rootCA.key
– корневая пара ключей;-extfile redsite.cnf
– файл, содержащий расширения сертификатов;-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 enable update-ca-trust extract
Настройка веб-серверов nginx и apache с сертификатами
Все команды, используемые в данном разделе, выполняются с правами пользователя root, если не указано иное.
Nginx
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://<ваш_сайт>
.
Например:
Apache
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. Для проверки перейдите в браузере по ссылке https://<ваш_сайт>
. Например:
Дата последнего изменения: 10.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.