Дополнительные настройки при работе по HTTPS (доверенная установка ОС)

При необходимости использования доверенной установки ОС выполните настройки:

  1. Подготовьте SSL-сертификаты, которые будут использоваться для шифрования соединений.

  2. Разместите корневой сертификат УЦ и hash-имя в HTTPS-репозитории.

  3. Укажите сертификат УЦ и закрытый ключ в конфигурационном файле веб-сервера.

  4. Разместите сертификат УЦ и закрытый ключ в HTTPS-репозитории.

  5. Выполните настройки модуля osmax-provisioner.

  6. Сохраните корневой сертификат в файле keystore.jks на устройстве, предварительно сконвертировав его в формат .der.

Выпуск сертификатов

Чтобы выпустить сертификаты с закрытыми ключами, выполните шаги:

  1. Создайте сертификаты для HTTPS-сервера, выполнив команду:

    mkdir -p https_key/src && cd https_key/src
  2. Создайте корневой закрытый ключ, выполнив команду:

    openssl genpkey -algorithm RSA -out rootCA.key -aes-128-cbc
  3. Создайте корневой сертификат (открытый ключ), выполнив команду:

    openssl req -x509 -new -key rootCA.key -sha256 -days 3650 -out rootCA.crt
    #   Country Name (2 letter code) [AU]:RU
    #   State or Province Name (full name) [Some-State]:Moscow
    #   Locality Name (eg, city) []:Moscow
    #   Organization Name (eg, company) [Internet Widgits Pty Ltd]:wd2
    #   Organizational Unit Name (eg, section) []:.
    #   Common Name (e.g. server FQDN or YOUR name) []:wd2
  4. Создайте файл .srl порядковых номеров для выпуска сертификатов и приведите его к виду:

    # cat rootCA.srl
    00
  5. Создайте конфигурационный файл .cnf для домена и приведите его к виду:

    cat provisioning.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  = Moscow
    localityName                 = Locality Name (eg, city)
    localityName_default         = Moscow
    organizationName             = Organization Name (eg, company)
    organizationName_default     = wd2
    commonName                   = Common Name (eg, YOUR name or FQDN)
    commonName_max               = 64
    commonName_default           = provisioning.wd2.local
    [ req_ext ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName          = DNS:provisioning.wd2.local
  6. Создайте закрытый ключ для домена, выполнив команду:

    openssl genpkey -algorithm RSA -out provisioning.key
  7. Создайте файл запроса для домена, выполнив команду:

    openssl req -new -key provisioning.key -config provisioning.cnf -reqexts req_ext -out provisioning.csr
  8. Создайте сертификат для домена provisioner, выполнив команду:

    openssl x509 -req -days 730 -CA rootCA.crt -CAkey rootCA.key -extfile provisioning.cnf -extensions req_ext -in provisioning.csr -out provisioning.crt
  9. Создайте сертификат для нового домена (новая конечная точка (endpoint) HTTPS-репозиторий) по аналогии или используйте один wildcard-сертификат для всех, заменив на предыдущем шаге provisioning.wd2.local на *.wd2.local.

  10. Создайте хеш-имя сертификата, выполнив команду:

    cp /path/to/rootCA.crt /path/to/$(openssl x509 -noout -hash -in rootCA.crt).0

Дополнительная конфигурация веб-сервера (на примере Nginx)

Для того чтобы веб-сервер мог обрабатывать безопасные HTTPS-запросы с использованием заданного сертификата и ключа, в его конфигурационном файле задайте настройки:

# Дополнить конфигурацию для работы по HTTPS.
# На примере Nginx
#cat /etc/nginx/sites-enabled/default
server {
listen 443 ssl;
server_name provisioning.wd2.local;

    ssl_certificate /etc/nginx/ssl/provisioning.wd2.local.crt;
    ssl_certificate_key /etc/nginx/ssl/provisioning.wd2.local.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

Где:

  • listen — настраивает прослушивание портов на сервере;

  • server_name provisioning.wd2.local — имя хоста (домен), для которого будет работать данный виртуальный сервер;

  • ssl_certificate — путь к файлу сертификата SSL, который будет использоваться для шифрования соединений;

  • ssl_certificate_key — путь к файлу закрытого ключа, который соответствует сертификату SSL;

  • ssl_protocols — поддерживаемые версии протокола TLS;

  • ssl_ciphers  — набор шифров, которые могут использоваться для шифрования соединений.

Конфигурация модуля osmax-provisioner

В конфигурационном файле application.properties модуля osmax-provisioner раскомментируйте параметры:

## Параметры для настройки SSL-соединения
## Для включения режима работы по HTTPS, необходимо раскомментировать следующие параметры:
## Настройка для отклонения HTTP-запросов
#quarkus.http.insecure-requests=disabled
#quarkus.http.ssl-port=8081
## Путь до хранилища сертификатов в формате JKS:
#quarkus.http.ssl.certificate.key-store-file=/opt/osmax-core/keystore.jks
## Пароль от хранилища сертификатов:
#quarkus.http.ssl.certificate.key-store-password=keystore@12345

Изменение формата корневого сертификата

Для конвертации формата корневого сертификата rootCA.crt в формат .der используйте команду:

openssl x509 -outform DER -in rootCA.crt -out rootCA.der