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

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

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

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

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

/opt/multivdi/pki/nginx-apache/

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

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

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

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

    sudo chown root:root /opt/multivdi/pki/nginx-apache/ssl.crt /opt/multivdi/pki/nginx-apache/ssl.key
    sudo chmod 0644 /opt/multivdi/pki/nginx-apache/ssl.crt
    sudo chmod 0600 /opt/multivdi/pki/nginx-apache/ssl.key
    Пример
    $ sudo ls -la /opt/multivdi/pki/nginx-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/nginx-apache:

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

    sudo chown root:root /opt/multivdi/pki/nginx-apache/ssl.crt /opt/multivdi/pki/nginx-apache/ssl.key
    sudo chmod 0644 /opt/multivdi/pki/nginx-apache/ssl.crt
    sudo chmod 0600 /opt/multivdi/pki/nginx-apache/ssl.key
    Пример
    $ sudo ls -la /opt/multivdi/pki/nginx-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 используется NGINX как параметр Диффи-Хеллмана. При выполнении обновления SSL-файл должен находиться в каталоге /opt/multivdi/pki/nginx-apache.
    Если требуется использовать собственный параметр Диффи-Хеллмана, необходимо заменить файл /opt/multivdi/pki/nginx-apache/dhparam.pem.
    Если файл отсутствует, его можно создать командой:

    sudo openssl dhparam -out /opt/multivdi/pki/nginx-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-сертификаты внутренних сервисов

Обновление сертификатов внутренних сервисов

Через команду ssl можно заменить только сертификаты Redis.

Используемые файлы Redis

CA:


/opt/multivdi/pki/ca/ca_cert.pem
/opt/multivdi/pki/ca/ca_key.pem

Redis server certificate:


/opt/multivdi/pki/redis/srv_cert.pem
/opt/multivdi/pki/redis/srv_key.pem

Примечания

Закрытый ключ CA /opt/multivdi/pki/ca/ca_key.pem используется только для выпуска и перевыпуска сертификатов.

В Docker Secrets передается только CA-сертификат /opt/multivdi/pki/ca/ca_cert.pem.


Порядок обновления сертификатов Redis

  1. Подготовить новый файл CA, если требуется.

  2. Выпустить новый сертификат Redis server.

  3. Убедиться, что сертификат Redis server подписан выбранным CA.

  4. Скопировать файлы в соответствующие каталоги:

    /opt/multivdi/pki/ca/
    /opt/multivdi/pki/redis/
  5. Примонтировать установочный ISO-образ Space Disp и запустить выполнение ssl:

    
    sudo bash /media/cdrom/install.sh ssl
    

    Во время выполнения будут пересозданы Docker Secrets для Redis и web-сертификатов, после чего стек multivdi будет создан заново.

Внимание

Если меняется CA, необходимо одновременно заменить и Redis server certificate, подписанный этим CA.

Нельзя заменить только CA без замены зависимого Redis-сертификата.


Пример генерации тестовых сертификатов Redis

  1. Создать временный каталог:

    mkdir -p /tmp/multivdi-test-pki
    cd /tmp/multivdi-test-pki
  2. Сгенерировать тестовый CA:

    openssl req -x509 -newkey rsa:2048 -nodes \
      -keyout ca_key.pem \
      -out ca_cert.pem \
      -days 365 \
      -subj "/CN=multivdi-test-ca" \
      -addext "basicConstraints=critical,CA:TRUE" \
      -addext "keyUsage=critical,keyCertSign,cRLSign"
  3. Сгенерировать сертификат Redis server:

    cat > redis_srv.ext <<EOF
    [v3_req]
    basicConstraints=CA:FALSE
    keyUsage=digitalSignature,keyEncipherment
    extendedKeyUsage=serverAuth
    subjectAltName=DNS:vdi-redis,DNS:vdi-redis.multivdi,DNS:localhost,IP:127.0.0.1
    EOF
    openssl req -newkey rsa:2048 -nodes \
      -keyout redis_srv_key.pem \
      -out redis_srv.csr \
      -subj "/CN=vdi-redis"
    openssl x509 -req \
      -in redis_srv.csr \
      -CA ca_cert.pem \
      -CAkey ca_key.pem \
      -CAcreateserial \
      -out redis_srv_cert.pem \
      -days 365 \
      -extfile redis_srv.ext \
      -extensions v3_req
  4. Проверить сертификат Redis:

    openssl verify -CAfile ca_cert.pem redis_srv_cert.pem

    Ожидаемый результат:

    redis_srv_cert.pem: OK
  5. Проверить SAN у Redis server:

    openssl x509 -in redis_srv_cert.pem -noout -subject -ext subjectAltName

    Ожидаемый результат:

    DNS:vdi-redis, DNS:vdi-redis.multivdi, DNS:localhost, IP Address:127.0.0.1
  6. Разложить сертификаты по каталогам

    • Создать директории:

      sudo mkdir -p /opt/multivdi/pki/ca
      sudo mkdir -p /opt/multivdi/pki/redis
    • Скопировать CA:

      sudo cp ca_cert.pem /opt/multivdi/pki/ca/ca_cert.pem
      sudo cp ca_key.pem /opt/multivdi/pki/ca/ca_key.pem
    • Скопировать сертификаты Redis:

      sudo cp redis_srv_cert.pem /opt/multivdi/pki/redis/srv_cert.pem
      sudo cp redis_srv_key.pem /opt/multivdi/pki/redis/srv_key.pem
    • Установить владельца и права доступа:

      sudo chown root:root /opt/multivdi/pki/ca/ca_cert.pem
      sudo chown root:root /opt/multivdi/pki/ca/ca_key.pem
      sudo chown root:root /opt/multivdi/pki/redis/srv_cert.pem
      sudo chown root:root /opt/multivdi/pki/redis/srv_key.pem
      
      sudo chmod 0644 /opt/multivdi/pki/ca/ca_cert.pem
      sudo chmod 0600 /opt/multivdi/pki/ca/ca_key.pem
      sudo chmod 0644 /opt/multivdi/pki/redis/srv_cert.pem
      sudo chmod 0600 /opt/multivdi/pki/redis/srv_key.pem
    • Проверить целевой файл:

      sudo openssl verify \
        -CAfile /opt/multivdi/pki/ca/ca_cert.pem \
        /opt/multivdi/pki/redis/srv_cert.pem

      Ожидаемый результат:

      /opt/multivdi/pki/redis/srv_cert.pem: OK
  7. Запустить обновление. После подготовки файлов необходимо примонтировать установочный ISO-образ Space Disp и выполнить команду:

    sudo bash /media/cdrom/install.sh ssl
  8. После выполнения команды необходимо проверить, что сервисы успешно запустились.