【OpcUA开发笔记 3】Open62541证书登录方式

ops/2024/10/9 7:28:57/

前言:

       OpcUA的登录方式有3种,分别是匿名,用户名+密码,证书。其中前两个比较简单,我们就从最复杂的说起,前两个顺带说下也就会了,属于抛砖引玉讲述解决思路,非保姆式教程。

       材料:open62541-1.4.0,cmake 3.29.2,openssl 3.3.0.9,visual studio2022,python3.8.6

一、代码生成

       匿名和用户名+密码方式不需要在代码生成时只需要勾选UA_ENABLE_AMALGAMATION。但是为了支持证书,则在CMake生成代码时,就要选择以下选项

  • UA_ENABLE_ENCRYPTION = OPENSSL

       有了这两个选项,再加之安装了OpenSSL,并正确设置了OpenSSL的环境变量。则代码中证书部分的功能才被支持,否则就是灰的。

/* #undef UA_ENABLE_MQTT */
/* #undef UA_ENABLE_NODESET_INJECTOR */
/* #undef UA_INFORMATION_MODEL_AUTOLOAD */
/* #undef UA_ENABLE_ENCRYPTION_MBEDTLS */
/* #undef UA_ENABLE_CERT_REJECTED_DIR */
/* #undef UA_ENABLE_TPM2_SECURITY */
#define UA_ENABLE_ENCRYPTION_OPENSSL
/* #undef UA_ENABLE_ENCRYPTION_LIBRESSL */
#if defined(UA_ENABLE_ENCRYPTION_MBEDTLS) || defined(UA_ENABLE_ENCRYPTION_OPENSSL) || defined(UA_ENABLE_ENCRYPTION_LIBRESSL)
#define UA_ENABLE_ENCRYPTION
#endif
#ifdef UA_ENABLE_ENCRYPTIONUA_EXPORT UA_StatusCode
UA_ServerConfig_setDefaultWithSecurityPolicies(UA_ServerConfig *conf,UA_UInt16 portNumber,const UA_ByteString *certificate,const UA_ByteString *privateKey,const UA_ByteString *trustList,size_t trustListSize,const UA_ByteString *issuerList,size_t issuerListSize,const UA_ByteString *revocationList,size_t revocationListSize);

        如果老是生成失败,可以考虑换个cmake,反正我一开始老是失败,后来重装了个最新版,代码就能顺利生成了,太坑了。

二、编译

       

        成功生成vs代码以后,用vs打开项目,此时examples里会相较没有勾选UA_ENABLE_ENCRYPTION时,多了 access_control_client_encryptserver_encryption用于演示证书使用

        1. 编译这两个例子的时候,会编译失败,那是因为缺少以来库,在工程的链接器输入里加入以下库文件,注意OpenSSL要引用MDd文件夹下的两个lib:

ws2_32.lib      #socket相关
iphlpapi.lib      #忘了
C:\Program Files\OpenSSL-Win64\lib\VC\x64\MDd\libssl.lib           #openssl相关
C:\Program Files\OpenSSL-Win64\lib\VC\x64\MDd\libcrypto.lib      #openssl相关

       2. 将OpenSSL的include文件夹路径包含到工程的VC++目录里的包含目录里去,记得要指定到Include这一层,因为代码里直接用的是#include <openssl/x509.h>这种路径,不指定到include,可能就报找不到openssl头文件

C:\Program Files\OpenSSL-Win64\include

三、登录方式

1. 匿名登录

    匿名登录就参考官方例子就好,没什么好说的。

2. 用户名+密码登录

    以下代码中,赋予user1所有权限,而user2没有权限删除节点和引用。

#include "open62541.h"//record the UA_UsernamePasswordLogin object for delete on service closing.
typedef struct {UA_Boolean allowAnonymous;size_t usernamePasswordLoginSize;UA_UsernamePasswordLogin* usernamePasswordLogin;UA_UsernamePasswordLoginCallback loginCallback;void* loginContext;UA_CertificateVerification verifyX509;
} AccessControlContext;typedef struct {UA_String userName;UA_Boolean fAllowAddNode;UA_Boolean fAllowAddReference;UA_Boolean fAllowDeleteNode;UA_Boolean fAllowDeleteReference;
} UserRight_t;#define ANONYMOUS_POLICY "open62541-anonymous-policy"
#define CERTIFICATE_POLICY "open62541-certificate-policy"
#define USERNAME_POLICY "open62541-username-policy"
const UA_String anonymous_policy = UA_STRING_STATIC(ANONYMOUS_POLICY);
const UA_String certificate_policy = UA_STRING_STATIC(CERTIFICATE_POLICY);
const UA_String username_policy = UA_STRING_STATIC(U

http://www.ppmy.cn/ops/14101.html

相关文章

云原生Service Mesh服务网格简单介绍

serviceMesh是什么 Service Mesh是一个用于处理服务间通信的基础设施层&#xff0c;旨在实现云原生应用复杂服务拓扑中的可靠请求传递。其基本构成是一组与应用一起部署的轻量级网络代理&#xff0c;这些代理对应用来说是透明的。Service Mesh通过统一的方式来控制和处理服务间…

常用的Git和Linux命令

Git命令&#xff1a; Git是一个分布式版本控制系统&#xff0c;它可以帮助开发者跟踪和管理代码的变化。 git init&#xff1a;初始化一个Git仓库 git clone&#xff1a;克隆一个已有的Git仓库到本地 git add&#xff1a;将当前目录下的修改添加到暂存区 git commit&#xff1…

jenkins流水线学习(工具)

Jenkins特意为了更好使用pipeline&#xff0c;开发了一些工具类&#xff0c;方便我们更好地在step中处理各种需求。 一、Pipeline Utility Steps Pipeline Utility Steps 这是个插件&#xff0c;需要在jenkins插件管理安装。参考来源&#xff1a;Jenkins高级篇之Pipeline方法…

原生小程序自定义vantUI中van-collapse手风琴组件的标题

可以根据官网的提示&#xff1a; Vant Weapp - 轻量、可靠的小程序 UI 组件库 自己做的&#xff1a; <van-collapse accordion value"{{ activeName }}" bind:change"onChange"><van-collapse-item name"{{index}}"><!-- 这是自…

MybatisPlus 常用注解

一、前言 Mybatis-Plus是一个在Mybatis基础上进行增强的ORM框架&#xff0c;提供了许多便捷的注解来简化数据库操作。本文将介绍Mybatis-Plus常用的注解以及它们的使用方法。 二、常用注解 2.1、TableName TableName注解用于指定实体类对应的数据库表名。使用该注解可以省去…

No spring.config.import property has been defined

运行Springcloud项目出现下面错误&#xff1a; Description: No spring.config.import property has been defined Action: Add a spring.config.importnacos: property to your configuration. If configuration is not required add spring.config.importoptional:nac…

CISSP通关学习笔记:共计 9 个章节(已完结)

1. 笔记说明 第 0 章节为开篇介绍&#xff0c;不包括知识点。第 1 - 8 章节为知识点梳理汇总&#xff0c;8 个章节的知识框架关系如下图所示&#xff1a; 2. 笔记目录 「 CISSP学习笔记 」0.开篇「 CISSP学习笔记 」1.安全与风险管理「 CISSP学习笔记 」2.资产安全「 CISSP…

Centos Top 30常用命令及详解

在Linux的众多发行版中&#xff0c;CentOS以其稳定性和高效性备受青睐。掌握CentOS的操作对于系统管理员来说至关重要&#xff0c;而熟悉一系列核心命令更是提高工作效率的关键。从文件管理到系统监控&#xff0c;我们精心编制的Top 50常用CentOS命令列表是每位Linux用户的实战…