被测设备是一台跑 IEC 60870-5-104 的服务端,变电站侧的装置或者前置机都可能是这个角色。我们要回答的问题很具体:它按 IEC 62351-3 做了 TLS 加固之后,碰到各种不按套路出牌的对端,行为对不对。
判定依据是 IEC TS 62351-100-3:2020 的第 6.3 节,一共 39 条 resiliency(容错)测例。每条测例规定一个异常场景,以及设备该报什么安全事件、要不要断开连接。
这 39 条我一条写一篇,顺着编号排下来。重点放在"这个场景怎么在实验里造出来"和"怎么确认设备真的做对了",而不是把标准原文再翻译一遍。
系列目录
导览
| 篇 | 标题 | 一句话 |
|---|---|---|
| 00 | 写在前面 | 环境、证书体系、三种客户端工装,以及这个系列怎么读 |
| 99 | 收尾:把结果填进标准的那张表 | 39 条跑完之后,第 7 章的结果表怎么填,以及这轮下来的几点体会 |
初始握手组(6.3.1 ~ 6.3.20)
客户端直接拿着不同证书或参数发起 TLS 连接,一次成型,不给设备第二次机会。
| # | 标题 | Required | 一句话 |
|---|---|---|---|
| 6.3.1 | 远端提议 TLS 1.1 且设备支持 | PICS | 老版本但设备声明支持,只警告不断链 |
| 6.3.2 | 远端提议 TLS 1.0 且设备支持 | PICS | 同上,版本换成 1.0 |
| 6.3.3 | 远端提议设备不支持的低版本 | M | 报警并断开 |
| 6.3.4 | CRL 拿不到 | PIXIT | 证书本身有效,警告后继续握手 |
| 6.3.5 | CRL 过期 | PIXIT | 吊销列表没更新,警告后继续握手 |
| 6.3.6 | OCSP 响应者不可达 | PICS | 走 OCSP 的装置才需要测 |
| 6.3.7 | OCSP 响应过期 | PICS | 同上,响应本身超期 |
| 6.3.8 | 没有共同密码套件 | M | 谈不拢就断 |
| 6.3.9 | 对端不给证书 | M | 双向认证下不给证书就是违规 |
| 6.3.10 | 证书超过最大尺寸 | M | 撑爆尺寸上限 |
| 6.3.11 | 签发 CA 没装 | M | 证书链验不过去 |
| 6.3.12 | CA 装了但个体证书没配置 | M | 走白名单的装置才区分得出来 |
| 6.3.13 | 服务端选不出证书 | PICS | 只在服务端角色、且用了 Trusted CA Indication 时适用 |
| 6.3.14 | 客户端收到非指定链证书 | PICS | 只在客户端角色适用 |
| 6.3.15 | 证书过期 | M | 有效期已经过了 |
| 6.3.16 | 证书被吊销 | M | 序列号躺在 CRL 里 |
| 6.3.17 | 公钥长度等于 legacy 最小值 | M | 1024 位,警告但不断 |
| 6.3.18 | 公钥长度不足 | M | 512 位,直接拒 |
| 6.3.19 | 签名算法不支持 | M | 拿 MD5 签的证书 |
| 6.3.20 | 证书签名无效 | M | 证书被改过一个字节 |
重协商组(6.3.21 ~ 6.3.39)
先正常握手,让设备放松下来,再在会话恢复或重协商时递上异常输入。这一段大量依赖自己写的客户端程序。
| # | 标题 | Required | 一句话 |
|---|---|---|---|
| 6.3.21 | 会话恢复时版本变了 | M | 缩写握手场景,版本被偷改 |
| 6.3.22 | 重协商超时 | M | 服务端发了 HelloRequest,客户端装死 |
| 6.3.23 | 重协商时版本变了 | M | 全握手场景,版本被偷改 |
| 6.3.24 | 重协商时 CRL 拿不到 | PIXIT | 警告后继续重协商 |
| 6.3.25 | 重协商时 CRL 过期 | PIXIT | 同上,CRL 超期 |
| 6.3.26 | 重协商时 OCSP 不可达 | PICS | 走 OCSP 的装置才需要测 |
| 6.3.27 | 重协商时 OCSP 响应过期 | PICS | 同上 |
| 6.3.28 | 重协商时客户端一张证书都不发 | M | 得改 OpenSSL 源码才能跳过 Certificate 消息 |
| 6.3.29 | 重协商时证书超尺寸 | M | 撑爆尺寸上限 |
| 6.3.30 | 重协商时 CA 没装 | M | 换成另一套 CA 签的证书 |
| 6.3.31 | 重协商时个体证书没配置 | M | 同 CA 换个体 |
| 6.3.32 | 重协商时服务端选不出证书 | PICS | 只在服务端角色适用 |
| 6.3.33 | 重协商时客户端收到非指定链证书 | PICS | 只在客户端角色适用 |
| 6.3.34 | 重协商时证书过期 | M | 换过期证书 |
| 6.3.35 | 重协商时证书被吊销 | M | 换吊销证书 |
| 6.3.36 | 重协商时密钥长度等于 legacy 最小值 | M | 1024 位,警告后继续 |
| 6.3.37 | 重协商时密钥长度不足 | M | 512 位,拒 |
| 6.3.38 | 重协商时签名算法不支持 | M | MD5 签名,拒 |
| 6.3.39 | 重协商时证书签名无效 | M | 篡改过的证书,拒 |
几个约定
事件名我保留标准里的英文原样,因为设备日志里打出来的就是这个字符串,中文只做解释。安全端口统一用 19998。服务端锁死 TLS 1.2,密码套件只开 AES128-GCM-SHA256 和 AES256-GCM-SHA384,强制双向认证。重协商间隔在测试时从 60 秒降到 10 秒,否则一轮下来光等就等不起。
先读哪篇
如果你只是想搞清楚这套测试的骨架,看 00-写在前面 就够了,那里讲了设备是什么、证书体系怎么搭、三种客户端工装各自解决什么问题。如果你已经清楚背景,直接从 6.3.1 往下翻也行。