通过管理证书实现安全访问
为了实现只允许指定的 OPC UA 客户端与 OPC UA 服务器进行连接,需要做以下配置
4.1、创建服务器证书,根据需要选择自签署还是 CA 签署,如下图11。
图11. 创建服务器证书
4.2、禁止运行过程中自动接受客户端证书,如下图12。
图12. 禁用自动接受客户端证书
4.3、导出客户端证书,如下图13。
图13. 客户端证书
4.4、管理受信证书,把之前导出的客户端证书导入到受信证书一栏,如下图14。
图14.受信证书导入
4.5、分配可信客户端,如下图15。
图15.可信客户端
5、用户身份认证
S7-1500 OPCUA服务器用户身份认证分为2种,一种是访客认证,另一种是用户名和密码认证。如果需要指定用户登录权限需要禁止访客认证并增加用户名密码认证,如下图16。
图16. 用户身份认证
6、分配 PLC 变量的访问权
对 PLC 中创建的变量分配它的读写权限,默认都可以访问,可以单独为变量分配读写权限,也可以整个 DB块设置访问权限,如下图17。
图17.变量访问权限
7、项目编译下载后进行访问测试
通过 UA Expert进行连接访问,选择安全策略及用户身份认证方式后进入证书验证界面,需要信任服务器证书并接受临时会话请求,如下图18。注意这里 UAExpert 通过 Trust Server Certificate 按钮即可完成 Server证书的导入,如果是其它客户端没有此功能需要手动到 TIA 下的证书管理器中导出 CA证书和设备证书并拷贝到客户端对应受信证书列表里即可。
图18.建立连接
建立连接成功后浏览PLC数据,并进行读写访问测试,如下图19。
图19.数据访问
8、OPC UA 服务器方法的创建
在 S7-1500 CPU(自固件版本 V2.5 起)的 OPC UA 服务器中,可以选择通过用户程序提供方法。 OPC UA方法为不同通信节点之间的交互提供了有效机制,该机制提供作业确认和反馈值,用户无需再编程握手机制。
OPC UA 方法的工作原理
通常,OPC UA 方法的工作原理与运行系统中由外部 OPC UA客户端调用的受专有技术保护函数块的原理类似。OPC UA 客户端仅"监视"已定义的输入和输出,函数块、方法或算法的内容对外部 OPC UA 客户端保持隐藏,OPC UA客户端接收成功执行的反馈以及函数块(方法)返回的值,或者,如果执行不成功,则会收到错误消息。
服务器方法的实现
1. 使用 OPC_UA_ServerMethodPre 查询服务器方法调用该指令将执行以下任务:
– 通过该指令询问 CPU 的 OPC UA 服务器是否已通过 OPC UA 客户端调用服务器方法。
– 如果已调用方法,并且服务器方法具有输入参数,服务器方法现在会接收到输入参数。
2. 编辑服务器方法
在这部分服务器方法中,用户提供实际用户程序。如果服务器方法使用输入参数,则可使用这些参数。 仅当 OPC UA客户端已调用服务器方法时,才可执行服务器方法的这一部分。成功执行方法后,如果方法具有输出参数,需要设置服务器方法的输出参数。
3. 使用 OPC_UA_ServerMethodPost 响应服务器方法
要完成服务器方法,应调用 “OPC_UA_ServerMethodPost” 指令。使用参数通知“OPC_UA_ServerMethodPost” 指令是否已处理用户程序,如果用户程序已成功执行,则会通过相关参数通知 OPC UA服务器。OPC UA 服务器随后会将服务器方法的输出参数发送到 OPC UA 客户端。
无论用户程序是由 “OPC_UA_ServerMethodPre” 和“OPC_UA_ServerMethodPost” 指令处理还是在下一个周期继续执行,始终以成对的形式调用这两个指令。
如下图20所示给出了使用 OPC UA 服务器方法指令为用户程序中所执行的 OPC UA客户端提供一个方法。需要注意的是服务器方法指令的多重实例必须命名为 “OPC_UA_ServerMethodPre_Instance”和 “OPC_UA_ServerMethodPost_Instance”,否则不会在服务器上创建方法,还有就是需要声明“UAMethod_InParameters” 和 “UAMethod_OutParameters”两个变量分别连接到方法指令引脚上,否则方法指令会报错。
图20.方法程序代码
在客户端内浏览到创建的服务器方法,选中 Method 后鼠标右键来调用方法,在调用方法对话框中传输输入参数点击 Call按钮,返回输出参数及方法执行后的状态,如下图 21 所示。
图21.方法测试
常见问题及建议
1、通过 OPC UA 客户端访问 OPC UA 服务器的建议
● 对于一次性或不频繁的数据访问,请使用标准的读/写访问。
● 对于少量数据的循环访问(循环间隔Zui长约为 5 秒),请使用订阅。 优化 OPC UA服务器中的Zui短发布时间间隔设置和Zui小采样时间间隔设置。
● 如果定期访问某些特定变量(重复访问),则可使用函数 “RegisteredRead” 和 “Regist eredWrite” 。
2、导致 OPC UA 服务器连接失败的原因
当建立到 OPC UA 服务器的连接时,需用注意许多要点来保证过程顺利地进行。以下连接建立出错的原因与用到的 OPC UA客户端和服务器无关。
基于证书连接的日期和时间
基于证书授权的通讯中,在OPC UA 服务器上,需要检查证书的有效期。这就要求终端系统具备当前时间。对证书检查时,OPC UA服务器可能会给出时间错误响应,状态码为 “BadSecurityChecksFailed” 或者“BadCertificateTimeInvalid” 。解决方案建议使用 NTP 服务器来实现时钟同步。如果 NTP无法实现,则只能手动为终端系统设置当前时间。
经过 NAT 路由器的 OPC UA 客户端-服务器连接尝试失败,产生错误信息 “BadCommunicationError” 或“BadNotConnected” 。
在NAT系统中,IPv4 数据包被路由器处理。?这意味着数据包的源IP?( “Source NAT” ) 或者目的 IP (“Destination NAT” ) 会被路由器配置的IP地址替换掉 ( 取决于目的端口)。而客户端和服务器并不知道这个过程。