我正在通过 Docker 使用 Alpine Linux。我想与 host.docker.internal 建立 HTTPS 连接。主机上有一个服务,可以通过localhost:8443
主机访问。我想从容器连接到同一个服务。--network host
无法工作,因为在容器内,localhost
需要引用容器,而不是主机。
主机上端口 8443 上运行的服务实际上来自 SSH 隧道到 EC2 容器,最终允许连接到我们 AWS 网络中监听端口 443 的 Opensearch 服务器。
为了实现这一目标,我做了以下事情:
- 创建一个自签名证书,
host.docker.internal
指定主题备用名称:openssl req -newkey rsa:4096 \ -x509 \ -sha256 \ -days 30650 \ -nodes \ -out docker-host.crt \ -keyout docker-host.key \ -subj "/C=US/ST=Nevada/L=Las Vegas/O=Company/OU=Engineering/CN=host.docker.internal" \ -addext "subjectAltName=DNS:host.docker.internal"
- 将其复制到
/usr/local/share/ca-certificates
:cp docker-host.crt /usr/local/share/ca-certificates
- 跑步
update-ca-certificates
- 确认证书已被认可:
openssl verify -CApath /etc/ssl/certs docker-host.crt
- 尝试使用 curl 连接:
curl https://host.docker.internal:8443/
我总是收到错误curl: (60) SSL: no alternative certificate subject name matches target host name 'host.docker.internal'
我尝试创建一个“捆绑”证书:
cat docker-host.pem cert.pem > bundle.pem
cp bundle.pem /usr/local/share/ca-certificates/docker-host.crt
cert.pem
被创建openssl s_client -showcerts -servername host.docker.internal -connect host.docker.internal:8443 > cert.pem
我从这里得到这个命令cURL 关于此问题的页面。
docker-host.pem
是用创建的cat docker-host.key docker-host.crt > docker-host.pem
。我尝试将此 .pem(当然重命名为 .crt)复制到,/usr/local/share/ca-certificates/
但没有什么区别。
无论如何,我总是得到相同的错误。我肯定误解了什么。
请指教。谢谢。