Хранилище hashicorp: » Ошибка инициализации прослушивателя типа tcp: ошибка загрузки сертификата TLS » Где моя ошибка?

#https #docker-compose #openssl #hashicorp-vault #vault

#https #docker-compose #openssl #hashicorp-хранилище #хранилище

Вопрос:

Я пытаюсь запустить Vault с помощью docker-compose на виртуальной машине ubuntu 20.04 (ip: 192.168.56.9 ). Без https уже работает нормально, но когда я пытаюсь поместить vault в https с самозаверяющим сертификатом из openssl, это не работает.

Здесь мои конфигурации :

docker-compose.yml :

 version: '3.6'

services:

  vault:
    build:
      context: ./vault
      dockerfile: Dockerfile
    ports:
      - 8200:8200
    volumes:
      - ./vault/config:/vault/config
      - ./vault/policies:/vault/policies
      - ./vault/data:/vault/data
      - ./vault/logs:/vault/logs
      - ./vault/volume_test/:/vault/volume_test
    environment:
      - VAULT_ADDR=http://192.168.56.9:8200
    command: server -config=/vault/config/vault-config.conf
    cap_add:
      - IPC_LOCK
  

Dockerfile :

 # base image
FROM alpine:3.7

# set vault version
ENV VAULT_VERSION 0.10.3

# create a new directory
RUN mkdir /vault

# download dependencies
RUN apk --no-cache add 
      bash 
      ca-certificates 
      wget

# download and set up vault
RUN wget --quiet --output-document=/tmp/vault.zip https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip amp;amp; 
    unzip /tmp/vault.zip -d /vault amp;amp; 
    rm -f /tmp/vault.zip amp;amp; 
    chmod  x /vault

# update PATH
ENV PATH="PATH=$PATH:$PWD/vault"

# add the config file
COPY ./config/vault-config.conf /vault/config/vault-config.conf

# expose port 8200
EXPOSE 8200

# run vault
ENTRYPOINT ["vault"]

  

Мое хранилище-config.conf :

 backend "file" {
  path = "vault/data"
}

listener "tcp" {
  address = "0.0.0.0:8200"
  tls_disable = false
  tls_cert_file = "/home/xxx/Vault-Docker/domain.crt"
  tls_key_file = "/home/xxx/Vault-Docker/domain.key"
}

#api_addr = "http://192.168.56.9:8200"

disable_mlock = true

ui = true
  

Как я создаю my .crt и my .key :

Создайте файл cert.conf в /home/xxx/Vault-Docker/ :

 [req]
default_bits = 4096
default_md = sha256
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
C = FR
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = 192.168.56.9

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.56.9
  

И извольте в /home/xxx/Vault-Docker/ :

 openssl req -nodes -x509 -days 365 -keyout domain.key -out domain.crt -config cert.conf
  

Но когда я запускаю :

 docker-compose up -d --build
  

Затем :

 docker logs vault-docker_vault_1 
  

Вывод :

 Error initializing listener of type tcp: error loading TLS cert: open /home/xxx/Vault-Docker/domain.crt: no such file or directory
  

Кто-нибудь скажет мне, где моя ошибка?

Большое спасибо!

Комментарии:

1. почему вы не указали файл CA, сгенерированный самозаверяющим openssl? и вы также должны смонтировать сертификат в контейнер с вашего хоста

Ответ №1:

Это потому, что ваша конфигурация сертификата не смонтирована внутри контейнера. Чтобы исправить это, вам необходимо:

  1. создайте новый каталог ./vault/cert
  2. переместите оба domain.crt и domain.key в ./vault/cert
  3. добавить в docker-compose-yml новый том:
    volumes:
...
     - ./vault/cert/:/vault/cert
...
  
  1. Измените на vault-config.conf с /home/.../domain* /vault/cert/domain* на в обеих tls_cert_* директивах

Тогда Vault сможет найти сертификаты.

Ответ №2:

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