在this tutorial之后,我为本地Microsoft DevOps安装创建了一个Linux代理。(该过程基本上是创建一个目录,复制Dockerfile
和start.sh
并运行docker build -t my_agent .
,然后运行docker run -e AZP_URL=https://my_server -e AZP_TOKEN=my_token -e AZP_AGENT_NAME=my_agent my_agent
。)因为我们正在为服务器使用自己的证书,所以我修改了dockerfile以将证书导入容器:
WORKDIR /azp
COPY ./my_server.crt /usr/local/share/ca-certificates/
COPY ./start.sh ./
RUN update-ca-certificates && chmod +x start.sh
# ENTRYPOINT [ "/azp/start.sh" ]
(与教程相比,增加了复制证书和运行update-ca-certificates。为了调试,我禁用了入口点。)当我现在使用curl查询服务器时,它工作正常:
curl -v https://my_server/
没有报告证书错误(不再)。运行start.sh
脚本仍然失败,并显示错误:
The SSL connection could not be established, see inner exception.
查看日志时,可以找到以下提示,原因如下:
---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
这可能是什么原因呢?我找不到任何关于远程证书无效原因的更精确的提示。如何解决这个问题?
1条答案
按热度按时间fdbelqdn1#
如果只将证书导入到系统中,curl似乎是可以的。然而,Microsoft的代理需要整个证书链才能信任连接。要做到这一点,最简单的方法是使用基于chrome的浏览器打开一个安全连接到您需要的任何目标,打开安全连接的详细信息并导出根CA和中间证书。(服务器证书应该由服务器本身提供,Firefox似乎不允许导出证书。
交换这条线:
这一行:
在此之后,SSL连接应该是可能的。通过省略服务器证书,您应该能够使用curl测试连接,因为它不会简单地接受来自服务器的证书并根据证书链进行验证。