西门子S7-1500 OPC UA服务器证书信任列表未添加客户端的连接拒绝解决

发布于 2026-03-16 05:48:40 · 浏览 4 次 · 评论 0 条

西门子S7-1500 PLC启用OPC UA通信后,客户端(如PC上运行的UaExpert、Ignition、Node-RED或自研OPC UA客户端)首次连接时提示“BadCertificateRejected”、“BadCertificateUseNotAllowed”或直接断连,常见于TIA Portal V16/V17/V18环境下配置了OPC UA服务器但未完成双向证书信任链建立。根本原因不是证书无效,而是PLC端的信任列表(Trust List)中未包含客户端证书的颁发者(CA)或客户端证书本身,导致S7-1500在TLS握手阶段主动拒绝连接。

以下为零依赖、纯Web浏览器+TIA Portal可完成的完整解决流程。所有操作均基于标准固件(FW 2.8及以上)、无需第三方工具、不修改系统时间、不关闭安全策略。


一、确认问题现象与前置条件

  1. 验证当前状态

    • 在TIA Portal中打开项目 → 导航至 设备配置 → 双击CPU → 切换到 OPC UA 选项卡 → 确认 启用OPC UA服务器 已勾选,且 安全策略 设置为 Basic256Sha256None(调试阶段可暂设为None,但生产环境必须用Basic256Sha256)。
    • 使用UaExpert(v1.5.3+)连接 opc.tcp://<PLC_IP>:4840,观察事件日志中是否出现以下任一错误:
      • Status code: BadCertificateRejected (0x80130000)
      • Status code: BadCertificateUseNotAllowed (0x80130003)
      • 连接几秒后自动断开,无节点树显示。
  2. 确认PLC证书状态

    • 在TIA Portal中,点击 OPC UA 选项卡右下角的 管理证书 按钮 → 查看弹出窗口中 服务器证书 是否显示为 有效,且 有效期至 日期晚于当前PLC系统时间。若显示 过期无效,需先点击 生成新证书 并下载到PLC。

二、导出PLC服务器证书(供客户端信任)

S7-1500的OPC UA服务器证书由PLC自身生成并存储于硬件安全模块(HSM),不可直接复制文件,但可通过TIA Portal导出为标准PEM格式。

  1. 打开证书管理界面

    • 在TIA Portal中,进入 设备配置 → CPU → OPC UA → 点击 管理证书
  2. 导出服务器证书

    • 在弹出窗口中,选中 服务器证书 行 → 点击 导出 按钮 → 保存为文件名 S7-1500_ServerCert.pem → 文件类型选择 PEM (.pem)
    • 该文件内容以 -----BEGIN CERTIFICATE----- 开头,-----END CERTIFICATE----- 结尾,共1行Base64编码字符串(不含空行和空格)。
  3. 验证导出完整性

    • 用记事本打开 S7-1500_ServerCert.pem,确认:
      • 第1行严格等于 -----BEGIN CERTIFICATE-----(无空格、无BOM、无中文字符);
      • 最后1行严格等于 -----END CERTIFICATE-----
      • 中间Base64字符串连续无换行(共1行,长度约1100–1300字符)。若含换行,请删除所有换行符合并为单行。

三、获取客户端证书(关键步骤)

OPC UA采用双向证书认证(Mutual Authentication),PLC不仅需被客户端信任,客户端也必须被PLC信任。客户端证书来源分两类:

情况A:使用UaExpert(最常见)

UaExpert首次启动时自动生成一对密钥与证书,存于本地用户目录:

  • Windows路径:C:\Users\<用户名>\AppData\Roaming\UnifiedAutomation\UaExpert\Certificates\own\certs\
  • 文件名固定为 UA Client Certificate.der(二进制DER格式)。
  1. 定位并复制证书文件

    • 打开上述路径 → 找到 UA Client Certificate.der → 复制该文件到桌面。
  2. 转换为PEM格式(必需)

    • 下载开源工具 openssl.exe(v3.0+,https://slproweb.com/products/Win32OpenSSL.html)→ 将 openssl.exe 放入桌面。
    • 按住 Shift 键右键桌面 → 选择 在此处打开PowerShell窗口 → 执行:
      .\openssl.exe x509 -inform DER -in "UA Client Certificate.der" -out "UaExpert_ClientCert.pem" -outform PEM
    • 成功后生成 UaExpert_ClientCert.pem,内容以 -----BEGIN CERTIFICATE----- 开头。

情况B:使用其他客户端(如Node-RED)

若客户端自行生成证书(如通过node-opcua库),需提供其certificate.pem文件。确保该文件为X.509 PEM格式,且未加密(无-----BEGIN ENCRYPTED PRIVATE KEY-----)。

⚠️ 注意:PLC只信任证书本身(公钥),不接收私钥。切勿导入.key.pfx文件。


四、将客户端证书添加至PLC信任列表

S7-1500的信任列表(Trust List)是存储于PLC RAM中的证书集合,仅接受PEM格式、且必须通过TIA Portal的“证书管理器”逐个导入。

  1. 启动TIA Portal证书管理器

    • 在TIA Portal中,进入 设备配置 → CPU → OPC UA → 点击 管理证书 → 切换到 信任列表 选项卡。
  2. 导入客户端证书

    • 点击 导入 按钮 → 浏览并选中上一步生成的 UaExpert_ClientCert.pem(或你的客户端PEM证书)→ 点击 打开
    • 系统会校验证书有效性(签名、有效期、用途),若提示“证书无效”,请检查:
      • 证书是否为客户端真实证书(非服务端证书);
      • 证书是否过期(查看Validity字段);
      • 证书Key Usage是否包含Digital Signature(UaExpert证书默认满足)。
  3. 强制刷新信任列表

    • 导入成功后,信任列表中应显示该证书条目,状态为有效
    • 必须执行此步:点击窗口右下角 应用 按钮 → 等待TIA Portal提示“已将更改下载到设备”。
    • 此操作将信任列表写入PLC的OPC UA服务内存,重启PLC或OPC UA服务非必需,但建议执行。

五、验证与故障排除

验证步骤(UaExpert为例)

  1. 关闭UaExpert所有实例。
  2. 删除UaExpert缓存证书(避免旧证书干扰):
    • 删除目录 C:\Users\<用户名>\AppData\Roaming\UnifiedAutomation\UaExpert\Certificates\trusted\ 下所有文件。
  3. 重新打开UaExpert → 地址栏输入 opc.tcp://<PLC_IP>:4840 → 点击 连接
  4. 首次连接时,UaExpert会弹出证书信任提示 → 勾选 始终信任此证书 → 点击
  5. 连接成功后,左侧地址空间树应正常展开,可读取ObjectsRoot等节点。

常见失败原因与修复

现象 根本原因 解决动作
连接后立即报 BadCertificateInvalid 客户端证书的Subject Alternative Name (SAN)为空或不匹配PLC IP/域名 UaExpert证书默认无SAN,属正常;若自建证书,需在生成时添加 -addext "subjectAltName = IP:<PLC_IP>"
TIA Portal中导入证书失败,提示“证书链不完整” 导入的是终端证书,但PLC要求根CA证书 错误操作:PLC信任列表只需导入客户端终端证书(即UaExpert_ClientCert.pem),不要导入CA证书
导入后仍拒绝连接,日志显示 BadCertificateChainIncomplete PLC固件版本低于FW 2.8 升级CPU固件至FW 2.8或更高(V16 SP1+项目默认支持)
连接成功但无法读写变量 OPC UA访问权限未配置 进入TIA Portal OPC UA用户管理 → 确保用户Anonymous或对应账户的读取/写入权限已启用

六、生产环境加固建议

  1. 禁用匿名访问

    • OPC UA用户管理 中,取消勾选 允许匿名访问 → 创建专用用户(如opcuser)并分配最小权限。
  2. 启用证书吊销检查(CRL)

    • 若企业PKI已部署CRL分发点,在 管理证书证书颁发机构 中导入CA证书,并配置CRL URL(需PLC可访问该HTTP地址)。
  3. 定期轮换证书

    • PLC服务器证书有效期默认10年,但建议每2年更新:在 管理证书 中点击 生成新证书 → 下载 → 同时在客户端更新信任的PLC证书。
  4. 备份信任列表

    • TIA Portal不自动备份信任列表。每次成功导入后,手动记录已添加证书的指纹(SHA-256)
      .\openssl.exe x509 -noout -fingerprint -sha256 -in "UaExpert_ClientCert.pem"

      输出示例:SHA256 Fingerprint=AA:BB:CC:DD:EE:FF:11:22:33:44:55:66:77:88:99:00:A1:B2:C3:D4:E5:F6:7G:8H:9I:0J:1K:2L:3M:4N:5O:6P


七、附:证书指纹快速比对表(用于审计)

当现场需确认PLC实际加载的证书是否与预期一致时,可通过Web服务器接口直接读取PLC证书指纹(无需TIA Portal):

  1. 在浏览器访问 http://<PLC_IP>/control/GetCertificateInfo(需PLC启用Web服务器且IP可达)。
  2. 页面返回JSON,提取serverCertificateFingerprint字段值。
  3. 与本地S7-1500_ServerCert.pem计算的SHA256指纹比对:
证书来源 计算命令 示例指纹(截取前16位)
PLC当前服务器证书 curl -s http://<PLC_IP>/control/GetCertificateInfo \| jq -r '.serverCertificateFingerprint' AA:BB:CC:DD:EE:FF:11:22
本地导出的 S7-1500_ServerCert.pem openssl x509 -noout -fingerprint -sha256 -in S7-1500_ServerCert.pem \| sed 's/.*=//' AA:BB:CC:DD:EE:FF:11:22

两列值完全一致,证明PLC运行证书与本地备份一致。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文