我正在尝试通过网络访问 LXD REST API。
关注:文档链接。
lxc config set core.https_address "[::]:8443"
lxc config set core.trust_password <some random password>
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)指向
http://<server-ip>:8443
https://<server-ip>:8443
二者的结果都是ERR_INVALID_HTTP_RESPONSE
。
client.crt
通过 Chrome > 设置 > 管理证书和导入,添加了Windows 10 证书。
用 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
上述命令运行正常。
我对基于证书的身份验证的理解非常有限。任何指点都将不胜感激。
答案1
经过多次尝试和错误,我终于偶然发现了这一点关联。LXD 配置的一部分工作得很好。下面是我遵循的步骤。
安装ZFS
,LXD
然后执行sudo LXD init
以完成正常配置。
在那之后,
LXD 的配置
sudo lxc config set core.https_address [::]:8443
,它可以成为您的首选端口。sudo lxc config set core.https_allowed_origin "*"
理想情况下,用可以访问 API 的域名替换开头。*
这样就可以从任何地方访问它。sudo lxc config set core.https_allowed_methods "GET, POST, PUT, DELETE, OPTIONS"
sudo lxc config set core.https_allowed_headers "Content-Type"
sudo service lxd restart # sometimes is required
设置身份验证证书(自签名)
mkdir lxd-api-access-cert-key-files
cd lxd-api-access-cert-key-files
这只是为了将与身份验证相关的文件保存在单独的目录中。
openssl genrsa -out lxd-webui.key 4096
,这将为您生成一个私钥。openssl req -new -key lxd-webui.key -out lxd-webui.csr
,这将创建一个证书请求。openssl x509 -req -days 3650 -in lxd-webui.csr -signkey lxd-webui.key -out lxd-webui.crt
. 生成自动签名的证书。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
, 这将以可在浏览器内部用于身份验证的格式导出密钥。- 现在下载该
lxd-webui.pfx
文件。本地。 - 将文件导入到浏览器。
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"]}