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

SSL Сертификаты

Для того чтобы платформа могла работать с использованием HTTPS соединения, необходимо в прокси, на котором размещено frontend приложение, добавить сертификаты. Для этого необходимо выписать SSL-сертификаты на сервер, на котором будет размещаться приложение.

Получение сертификатов

Получение сертификатов в центре сертификации остается вне этого руководства. Для получения самоподписанного сертификата для сервера можно использовать следующий скрипт команд (для сервера Ubuntu):

generate.sh
#!/bin/sh

if [ "$#" -ne 1 ]
then
  echo "Must supply a domain"
  return 1
fi

DOMAIN=$1

openssl genrsa -des3 -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1825 -out ca.pem

openssl genrsa -out $DOMAIN.key 2048
openssl req -new -key $DOMAIN.key -out $DOMAIN.csr

cat > $DOMAIN.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $DOMAIN
EOF

openssl x509 -req -in $DOMAIN.csr -CA ca.pem -CAkey ca.key -CAcreateserial \
-out $DOMAIN.crt -days 825 -sha256 -extfile $DOMAIN.ext

Для вызова скрипта необходимо указать имя домена, для которого будет выпущен сертификат:

$ . generate.sh domain.name

Во время работы скрипта необходимо указать некоторые параметры для выпуска сертификатов. После этого необходимо забрать полученные файлы:

domain.name.crt
domain.name.key

Запуск приложения в docker или docker-compose с использованием SSL-сертификатов

Для работы приложения необходимо удостовериться, что его текущая версия была собрана с возможностью подключения SSL-сертификатов. Для этого необходимо проверить файл настроек nginx внутри frontend контейнера и проверить, что в нем указаны сертификаты для работы по https.

Заходим в контейнер:

$ docker exec -it vismind-frontend /bin/sh 

Проверяем содержимое файла конфигурации nginx:

$ cat /etc/nginx/conf.d/default.conf | grep "443 http2 ssl"

Если команда возвращает строку вида:

listen       443 http2 ssl;

значит клиент настроен и можно переходить к шагу замены сертификатов.

Если ответ пустой или строка начинается с символа #, необходимо обратиться к разработчику для получения дистрибутива с активированной функцией SSL-соединения.

Замена сертификатов

Если приложение настроено на работу с SSL, необходимо отдать ему корректные сертификаты, выпущенные для сервера:

domain.name.crt
domain.name.key

Для этого необходимо в файле docker-compose.yml передать внутрь контейнера корректные файлы и пробросить наружу 443 порт. Пример конфигурации:

Пример docker-compose для клиентской части с подключением сертификатов ssl
  vismind-frontend:
    container_name: vismind-frontend
    image: vismind-frontend:latest
    ports:
      - 8002:443
    volumes:
      - ./files/static:/usr/share/nginx/media/static
      - ./domain.name.crt:/etc/ssl/certs/domain.crt:ro;
      - ./domain.name.key:/etc/ssl/private/domain.key:ro;
    depends_on:
      - vismind-backend
    networks:
      - vismind-nt
    restart: unless-stopped

Далее необходимо перезапустить приложение. После перезапуска приложение будет доступно на 443 порту по протоколу HTTPS.