Win10+VS2017实现OPC UA加密服务器(使用Openssl库)

本文利用VS2017和Openssl库实现OPC UA安全服务器,主要包括

1. Windows中Openssl库的安装和使用
2. 服务器证书的生成,信任列表的更新
3. VS2017中Openssl开发环境的配置
4. 支持加密的open62541源文件的编译生成及错误处理

文本参考了许多大佬的博客,都附在文章末尾

1. Windows安装Openssl库

这步很简单,http://slproweb.com/products/Win32OpenSSL.html寻找对应版本下载安装, 我的电脑是64位的,故选择64位非轻量级的msi格式文件进行安装,安装成功后将openssl的bin目录添加到系统的环境变量path中,如下图所示

重启。(超大声)

测试是否安装成功,打开命令行窗口,输入命令"openssl"

出现上图结果,第一步操作成功。

2. OPC UA服务器安全证书和私钥文件生成,以及和客户端之间的信任列表更新

使用open62541自带的工具生成证书和私钥文件,从open62541的官方github仓库中下载源码包,查看open62541源码目录tools/certs,运行这个python脚本即可生成证书和私钥。

从命令行进入这个目录,先安装netifaces库

接着运行python脚本

运行命令在没有参数的情况下默认生成服务器的证书和私钥文件。

运行成功后会在原文件夹下生成证书和私钥文件,如下图所示。

打开uaexpert,如下图所示,依次点击Settings——>Manage Certificates

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用OpenSSL的SM4加密算法可以分为以下几个步骤: 1. 初始化密钥:通过调用`EVP_BytesToKey`函数生成SM4加密所需的密钥和IV值。 2. 创建并初始化SM4加密上下文:使用`EVP_CIPHER_CTX_new`函数创建一个新的加密上下文,并使用`EVP_EncryptInit_ex`函数初始化SM4加密上下文。 3. 执行加密使用`EVP_EncryptUpdate`函数执行加密操作,将明文数据分块加密,并将结果输出到缓冲区中。 4. 结束加密操作:使用`EVP_EncryptFinal_ex`函数结束加密操作,并将最后一块数据进行加密。 5. 释放加密上下文:使用`EVP_CIPHER_CTX_free`函数释放加密上下文。 下面是一个简单的C++代码示例,演示如何使用OpenSSL进行SM4加密操作: ```c++ #include <openssl/evp.h> #include <openssl/rand.h> void sm4_encrypt(const unsigned char *key, const unsigned char *iv, const unsigned char *in, unsigned char *out, size_t len) { EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); int outlen, finallen; EVP_EncryptInit_ex(ctx, EVP_sm4_cbc(), NULL, key, iv); EVP_EncryptUpdate(ctx, out, &outlen, in, len); EVP_EncryptFinal_ex(ctx, out + outlen, &finallen); EVP_CIPHER_CTX_free(ctx); } int main() { unsigned char key[16], iv[16]; unsigned char plaintext[] = "hello world"; unsigned char ciphertext[1024]; // 生成16字节的随机密钥和IV值 RAND_bytes(key, 16); RAND_bytes(iv, 16); // 执行SM4加密 sm4_encrypt(key, iv, plaintext, ciphertext, strlen((char *)plaintext)); return 0; } ``` 需要注意的是,上述代码仅供参考,实际使用时需要根据具体需求进行调整和修改。同时,为了保证加密的安全性,建议生成的密钥和IV值应该是随机的,并且要使用安全的随机数生成器进行生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值