You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure C# SDK设备客户端Docker环境下TLS认证错误求助

解决Azure IoT Hub/Event Hub在Docker容器中的TLS证书验证问题

问题核心

你的.NET程序在本地或远程服务器运行正常,但部署到Ubuntu 22.04基础镜像的Docker容器中时,出现TLS证书验证失败错误,挂载主机/etc/ssl/certs目录后恢复正常。本质是容器内缺少Azure服务依赖的根CA证书,导致无法完成TLS握手的证书链验证。

Azure服务依赖的根证书

Azure IoT Hub和Event Hub均依赖DigiCert Global Root G2根证书,这是微软Azure云服务默认使用的核心根CA证书之一。

精准解决方法

无需挂载主机全部证书,只需在Docker镜像中添加所需根证书并配置系统证书存储即可:

步骤1:获取DigiCert Global Root G2证书

  • 从主机/etc/ssl/certs目录中找到对应文件(通常名为DigiCert_Global_Root_G2.pem)
  • 或通过系统证书管理器导出该证书

步骤2:修改Dockerfile

在原有Dockerfile基础上,添加证书安装逻辑:

# Base Image
FROM ubuntu:22.04
LABEL maintainer=boo

# Install required libraries and certificate tools
RUN apt-get -y update \
 && apt-get install -y \
   libicu-dev \
   ca-certificates \
 && apt-get -y clean \
 && rm -rf /var/cache/apt/archives

# Add Azure root certificate to system trust store
COPY ./DigiCert_Global_Root_G2.pem /usr/local/share/ca-certificates/
RUN update-ca-certificates

# Copy Binary and Configuration
RUN mkdir /home/stem/
COPY ./bin /home/stem/bin
COPY ./project /home/stem/project

# Data Link
RUN ln -sf /home/stem/project /data
RUN ln -sf /home/stem/bin /app

# Command
WORKDIR /
ENTRYPOINT ["/app/BIN_CLOUD"]

步骤3:构建并运行镜像

重新构建Docker镜像后,无需挂载主机证书目录,程序即可正常完成TLS握手并连接Azure服务。

TLS文档的适用范围

Azure官方的TLS相关文档同时适用于IoT Hub和Event Hub:

  • 两者均遵循Azure统一的TLS安全标准,要求使用TLS 1.2及以上版本
  • 共享相同的根CA证书体系,证书验证逻辑一致

补充说明

原Dockerfile未安装ca-certificates包,导致容器内系统证书存储不完整,这也是触发验证错误的原因之一。添加该包并更新证书后,容器即可具备验证Azure服务证书的能力。

内容的提问来源于stack exchange,提问作者dibii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:42:53