Назад | Перейти на главную страницу

Аутентифицироваться в LXD rest API по сети, аутентификация сертификата не работает

Я пытаюсь получить доступ к LXD REST API по сети.

Подписано: Ссылка на документ.

  1. lxc config set core.https_address "[::]:8443"
  2. lxc config set core.trust_password <some random password>
  3. curl -s -k --cert ~/.config/lxc/client.crt --key ~/.config/lxc/client.key https://127.0.0.1:8443/1.0/certificates -X POST -d '{"type": "client", "password": "some-password"}' | jq

Как указано Вот официальный документ REST API.

GET to / is allowed for everyone (lists the API endpoints)

Но при указании браузера (Chrome) на

Оба результата ERR_INVALID_HTTP_RESPONSE.

Добавил client.crt в Windows 10 с сертификатом, через Chrome> Настройки> Управление сертификатом и импорт.

Пробовал с POSTMAN

По-прежнему та же проблема.

Работает все нормально, когда доступ изнутри сервера.

curl -s -k --cert ~/.config/lxc/client.crt --key ~/.config/lxc/client.key https://127.0.0.1:8443/1.0 | jq .metadata.auth

Приведенная выше команда работает нормально.

Мое понимание аутентификации на основе сертификатов очень ограничено. Любой указатель будет очень признателен.

Пройдет через множество проб и ошибок. Я наконец наткнулся на это Ссылка на сайт. Это часть конфигурации LXD, которая работает отлично. Ниже приведены шаги, которые я выполнил.

Установить ZFS , LXD а затем сделать sudo LXD init чтобы выполнить обычную настройку.

После этого,

Конфигурация LXD

  1. sudo lxc config set core.https_address [::]:8443 , это может быть ваш выбор порта.
  2. sudo lxc config set core.https_allowed_origin "*" В идеале замените начало доменом из, чтобы получить доступ к API. * сделает его доступным отовсюду.
  3. sudo lxc config set core.https_allowed_methods "GET, POST, PUT, DELETE, OPTIONS"
  4. sudo lxc config set core.https_allowed_headers "Content-Type"
  5. sudo service lxd restart # sometimes is required

Настройка сертификата аутентификации (самоподписанный)

  1. mkdir lxd-api-access-cert-key-files
  2. cd lxd-api-access-cert-key-files

Это сделано для того, чтобы файлы, относящиеся к аутентификации, находились в отдельном каталоге.


  1. openssl genrsa -out lxd-webui.key 4096 , это сгенерирует для вас закрытый ключ.
  2. openssl req -new -key lxd-webui.key -out lxd-webui.csr , Это создаст запрос на сертификат.
  3. openssl x509 -req -days 3650 -in lxd-webui.csr -signkey lxd-webui.key -out lxd-webui.crt. Создайте автоматически подписанный сертификат.
  4. openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in lxd-webui.crt -inkey lxd-webui.key -out lxd-webui.pfx -name "LXD WebUI" , Это экспортирует ключи в .pfx формат, который можно использовать в браузере для аутентификации.
  5. Теперь загрузите lxd-webui.pfx файл. Локально.
  6. Импортируйте файл в браузер.
    1. Chrome Linux
    2. Chrome Windows
    3. Fire Fox
  7. lxc config trust add lxd-webui.crt Сообщает LXC использовать этот сертификат для аутентификации.

Тестирование

  • Теперь закройте и снова запустите браузер.
  • Укажите в браузере https://[serveri-ip]:[port-defined-earlier]/1.0/networks

Это должно дать ответ, аналогичный приведенному ниже: {"type":"sync","status":"Success","status_code":200,"operation":"","error_code":0,"error":"","metadata":["/1.0/networks/lo","/1.0/networks/ens33","/1.0/networks/lxdbr0"]}