Перейти к содержанию

SSL-сертификаты

Пользовательские SSL-сертификаты Web-сервисов

Сертификат должен называться ssl.crt, а ключ ssl.key.

Файлы пользовательского SSL-сертификата для Apache размещаются в каталоге:

/opt/multivdi/pki/apache/

Первоначальная установка Space Disp

  1. Перед установкой Space Disp на хосте, подготовленном для роли Leader, необходимо создать каталог хранения SSL-сертификатов командой:

    sudo mkdir -p /opt/multivdi/pki/apache
  2. Скопировать в каталог /opt/multivdi/pki/apache сертификат и ключ SSL:

    sudo cp ssl.crt /opt/multivdi/pki/apache/ssl.crt
    sudo cp ssl.key /opt/multivdi/pki/apache/ssl.key
  3. Установить владельца и права доступа:

    sudo chown root:root /opt/multivdi/pki/apache/ssl.crt /opt/multivdi/pki/apache/ssl.key
    sudo chmod 0644 /opt/multivdi/pki/apache/ssl.crt
    sudo chmod 0600 /opt/multivdi/pki/apache/ssl.key
    Пример
    $ sudo ls -la /opt/multivdi/pki/apache/  
    итого 8  
    drwx------ 2 root root 4096 фев 18 16:44 .  
    drwx------ 6 root root 4096 фев 18 16:44 ..  
    -rw-r--r-- 1 root root 1342 фев 18 16:44 ssl.crt  
    -rw------- 1 root root 1700 фев 18 16:44 ssl.key  

Примечание

Если файл dhparam.pem отсутствует, то при первоначальной установке он будет создан автоматически.


Обновление SSL-сертификатов Web-сервисов

  1. Для обновления SSL-сертификатов на существующей инфраструктуре необходимо скопировать новые сертификат и ключ в каталог /opt/multivdi/pki/apache:

    sudo cp ssl.crt /opt/multivdi/pki/apache/ssl.crt  
    sudo cp ssl.key /opt/multivdi/pki/apache/ssl.key   
  2. Установить владельца и права доступа:

    sudo chown root:root /opt/multivdi/pki/apache/ssl.crt /opt/multivdi/pki/apache/ssl.key
    sudo chmod 0644 /opt/multivdi/pki/apache/ssl.crt
    sudo chmod 0600 /opt/multivdi/pki/apache/ssl.key
    Пример
    $ sudo ls -la /opt/multivdi/pki/apache/
    итого 12
    drwx------ 2 root root 4096 фев 18 16:44 .
    drwx------ 6 root root 4096 фев 18 16:44 ..
    -rw------- 1 root root  424 фев 18 16:44 dhparam.pem
    -rw-r--r-- 1 root root 1342 фев 18 16:44 ssl.crt
    -rw------- 1 root root 1700 фев 18 16:44 ssl.key 

    Примечание

    Файл dhparam.pem используется Apache как параметр Диффи-Хеллмана. При выполнении обновления SSL-файл должен находиться в каталоге /opt/multivdi/pki/apache.
    Если требуется использовать собственный параметр Диффи-Хеллмана, необходимо заменить файл /opt/multivdi/pki/apache/dhparam.pem.
    Если файл отсутствует, его можно создать командой:

    sudo openssl dhparam -out /opt/multivdi/pki/apache/dhparam.pem 2048
  3. Примонтировать установочный iso-образ Space Disp и запустить выполнение ssl командой:

    sudo bash /media/cdrom/install.sh ssl

    Во время выполнения происходит:

    • Удаление текущего стека multivdi.

    • Удаление старых Docker Secrets с сертификатами.

    • Создание новых Docker Secrets из файлов в каталоге /opt/multivdi/pki.

    • Повторное создание стека multivdi.

    • Перезагрузка Apache.

  4. Проверить, что сертификаты обновились. Для этого необходимо в окне браузера открыть https://server_ip_address.


Пользовательские SSL-сертификаты внутренних сервисов

Изменение клиентских сертификатов space-agent-pc

Примечание

Используемые в инструкции данные сертификатов и их названия являются примерами, необходимо производить настройку в соответствии с существующей инфраструктурой.

По умолчанию space-agent-pc подключается к Space Disp с использованием TLS без валидации сертификатов. Существует возможность добавить клиентские сертификаты. Ниже представлен пример генерации и подключения клиентских сертификатов.

  1. Выпустить клиентские сертификаты.

    • Настроить конфигурацию openssl.

      [req]
      default_bits = 2048
      distinguished_name = req_distinguished_name
      req_extensions = req_ext
      prompt = no
      
      [req_distinguished_name]
      countryName = RU
      stateOrProvinceName = Moscow
      localityName = Moscow
      organizationName = YourCompany
      organizationalUnitName = IT
      commonName = nats-client
      
      [req_ext]
      keyUsage = digitalSignature, keyEncipherment
      extendedKeyUsage = clientAuth
    • Сгенерировать клиентский ключ и создать CSR.

      openssl genrsa -out client-key.pem 2048
      
      openssl req -new -key client-key.pem -out client.csr -config client-ext.cnf

    Внимание

    Если клиентские сертификаты уже выпущены, шаг 1 необходимо пропустить.

  2. На базе CA-сертификатов, выпустивших сертификаты для NATS-сервера, выполнить подпись клиентских сертификатов.

    openssl x509 -req -days 365 -in client.csr \
    -CA ca_cert.pem -CAkey ca_key.pem -CAcreateserial \
    -out client-cert.pem \
    -extensions req_ext -extfile client-ext.cnf

    Внимание

    При активации режима проверки CA-сертификат должен быть внесен в список доверенных в Space Client.


    Стандартные самоподписанные сертификаты генерируются при первичной установке Space Disp и размещаются на узле с ролью Leader в директории /opt/multivdi/pki/ca/.

  3. Выполнить валидацию корректности ключа.

    • Проверить подпись CA.

      openssl verify -CAfile ca_cert.pem client-cert.pem
    • Просмотреть полную информацию.

      openssl x509 -in client-cert.pem -text -noout | grep -E "Subject:|Issuer:|Not After|Extended Key Usage"
  4. Получившиеся client-cert.pem и client-key.pem разместить на узле, где установлен space-agent-pc, и указать их расположение в конфигурации systemd-сервиса (Linux) по пути /etc/systemd/system/space-agent-pc.service.
    В команде ExecStart задать значение аргументов --cert и --certkey.

    [Unit]
    Description=space-agent-pc
    After=syslog.target
    After=network.target
    
    [Service]
    WorkingDirectory=/opt/space-agent-pc
    User=root
    OOMScoreAdjust=-1000
    ExecStart=/opt/space-agent-pc/space-agent --cert client-cert.pem --certkey client-key.pem
    TimeoutSec=30
    Restart=on-failure
    KillMode=process
    
    # File logging
    StandardOutput=append:/opt/space-agent-pc/journal.log
    StandardError=append:/opt/space-agent-pc/journal.log
    
    [Install]
    WantedBy=multi-user.target
  5. При необходимости активировать усиленный режим проверки сертификатов с помощью ключа --verify-tls.

    ExecStart=/opt/space-agent-pc/space-agent --cert client-cert.pem --certkey client-key.pem --verify-tls
  6. Если активируется усиленный режим сертификатов, то необходимо заменить сертификат NATS-сервера:

    • Создать конфигурационный файл для SAN (например, server-san.cnf):

      [req]
      distinguished_name = req_distinguished_name
      req_extensions = req_ext
      prompt = no
      
      [req_distinguished_name]
      CN = nats-server
      
      [req_ext]
      subjectAltName = @alt_names
      
      
      [alt_names]
      IP.1 = dispatcher_address
      IP.2 = 127.0.0.1
      DNS.1 = localhost
    • Сгенерировать ключ и CSR для сервера:

      openssl genrsa -out nats-server-key.pem 2048
      openssl req -new -key nats-server-key.pem -out nats-server.csr -config server-san.cnf
    • Подписать CSR ключом CA:

      openssl x509 -req -days 365 -in nats-server.csr \
      
       -CA ca_cert.pem -CAkey ca_key.pem -CAcreateserial \
      
       -out nats-server-cert.pem \
      
       -extfile server-san.cnf -extensions req_ext
    • Проверить, что SAN появился:

      openssl x509 -in nats-server-cert.pem -text -noout | grep -A1 "Subject Alternative Name"

      В выводе должен быть IP Address:dispatcher_address.

    • Заменить старые файлы сертификата и ключа NATS-сервера на новые (находятся в /opt/multivdi/pki/nats/).

    • Создать новые секреты для сертификата и ключа:

      docker secret create NATS_TLS_CRT_v2 /путь/к/новому/сертификату.pem
      docker secret create NATS_TLS_KEY_v2 /путь/к/новому/ключу.pem
    • Посмотреть имя сервиса NATS (далее multivdi_vdi-nats-server):

      docker service ls | grep nats
    • Обновить службу, чтобы она использовала новые секреты:

      docker service update \
      
       --secret-rm NATS_TLS_CRT \
      
       --secret-rm NATS_TLS_KEY \
      
       --secret-add source=NATS_TLS_CRT_v2,target=nats-cert.pem \
      
       --secret-add source=NATS_TLS_KEY_v2,target=nats-key.pem \
      
       multivdi_vdi-nats-server