ROS OpenSSL SSL连接建立

Windows平台下Ros2安装与配置全攻略 本文详细介绍了在Windows平台下安装与配置ROS2的完整指南,包括环境准备、关键依赖安装、ROS2本体安装与配置、开发环境配置实战以及常见问题解决方案。特别针对Windows特有的问题提供了优化技巧,帮助开发者高效搭建ROS2开发环境。 阅读详情

ROS-OpenSSL-SSL-Connection-Build

重庆大学国家卓越工程师学院-智能汽车软件-智能网联汽车信息安全-实验

✨✨✨实验环境✨✨✨:
Windows 10 Linux Subsystem
BRANCH: vb_release
RELEASE: Ubuntu 20.04.3 LTS
KERNEL: Linux 5.10.16.3-microsoft-standard-WSL2
openssl 版本:OpenSSL 1.1.1f 31 Mar 2020

✨✨✨实验准备✨✨✨:
创建三级证书链。
ROS OpenSSL X509 证书链构建及自定义验证

SSL 建立连接

SSL 建立连接的过程可以大致分为:

  1. 握手阶段:确定加密套件,进行身份验证。
  2. 密钥协商阶段:协商确定后续通信使用的对称密钥。
  3. 校验阶段:根据之前通信内容生成hash。

这里大致的流程图如下:
SSL 建立连接流程图

图中密钥协商使用的是 ECDHE 密钥协商算法,后续实验也是使用这个算法。

详细的知识点说明许多文章已经写地非常详尽,这里就直接给出几个个博客,本文就不再赘述了。
相关参考资料:
SSL协议原理详解_ssl原理_曹世宏的博客的博客-优快云博客
TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别_ssl dh和rsa区别_Mrpre的博客-优快云博客
密钥协商算法的演变 —— RSA算法 - DH算法 - DHE算法 - ECDHE算法_故里有长安丶丶的博客-优快云博客

ROS 服务介绍

服务是ROS中的一种通信方法。它与话题通信的区别是,服务允许客户端(Client)发送请求(request)到服务端(Server)并等候服务端的响应(response)。因此,服务机制是一种双向的同步通信机制,且实现一对多的通信。

在使用时,需要首先启动 Master节点,然后运行 Server 节点,最后开启 Client 节点。
这里在 Server 中需要编写回调函数用于处理 Client 的请求。Client 内要组装请求信息,并通过 Client 的 call 方法发起请求。这里的 call 方法是阻塞的,所以在后续代码中可以直接使用 请求的返回信息。

ROS 服务架构

代码

GitHub - LinMu-z/ROS-OpenSSL-SSL-Build-Connect
Gitee - 林木/ROS-OpenSSL-SSL-Build-Connect

注意本实验中实现的SSL连接建立过程为简化,没有加上 hash计算。读者可自行学习后补充。

核心代码讲解

在 OpenSSL 中对于 ECDHE 算法的实现主要通过 EC_KEY 及其相关类,这里将其相关流程抽象为工具类 KeyAgree 如下:
每一次创建连接都需要创建一次密钥对,这里创建的过程放在了,里面主要包含获取公私钥的方法,其中公钥是需要传输的给对方的。
其中有两个私有方法,为公钥的数据类型转换函数。

#pragma once

#include <iostream>
#include <string>
#include <vector>
#include <openssl/ec.h>
#include <openssl/ecdh.h>
#include <openssl/obj_mac.h>

using namespace std;

class KeyAgree {
    private:
        EC_KEY* ec_key;
        const EC_GROUP* group;
        EC_POINT* key_other;
        // ec_point 转为 string
        EC_POINT* ec_point_from_string(const string& str);
        // string 转为 ec_point
        string ec_point_to_string(const EC_POINT* point);
    public:
        KeyAgree();
        ~KeyAgree();
        const BIGNUM* getPrivateKey();
        string getPublicKey();
        void setOtherKey(string keyStr);
        string getShareKey();
};

在构造函数内,首先设定了 ECDHE 算法使用的椭圆曲线,然后生成密钥对。

KeyAgree::KeyAgree() {
    // 指定曲线
    ec_key = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
    if (!ec_key) {
        cerr << "Failed to create EC key." << endl;
        return;
    }
    // 生成密钥对
    if (EC_KEY_generate_key(ec_key) != 1) {
        cerr << "Failed to generate EC key." << endl;
        return;
    }
    // 获取密钥组
    group = EC_KEY_get0_group(ec_key);
}

在获取公钥函数中,首先通过 EC_KEY_get0_public_key 方法从密钥对中提取公钥,这里看到 公钥的数据类型为 EC_POINT,为了便于传输我们这里将其串行化。同时为了提高log的可读性,我们将其转化为十六进制。

string KeyAgree::getPublicKey() {
    // 获取私钥
    const EC_POINT* key = EC_KEY_get0_public_key(ec_key);
    cout << "Public key:" << endl;

    // 密钥转为字符串
    string str = ec_point_to_string(key);
    cout << string_to_hex(str) << endl;
    return str;
}

生成对称密钥首先需要设置密钥的长度,然后提前创建号密钥的缓冲区,这里使用vector来保存。然后通过输入对方的对等公钥和自身的密钥对。
最后将其转化为字符串返回。

string KeyAgree::getShareKey() {
    // 设置对称密钥长度
    size_t shared_key_len = 32;
    // 用于保存对称密钥
    vector<unsigned char> shared_key(shared_key_len);
    // 生成对称密钥 (密钥缓存区,密钥长度,对等公钥,本地密钥对)
    if (ECDH_compute_key(shared_key.data(), shared_key.size(), key_other, ec_key, NULL) != shared_key_len) {
        cerr << "Failed to compute shared key." << endl;
        return "";
    }
    // 转为字符串
    string str(shared_key.begin(), shared_key.end());
    return str;
}

实验结果

服务器端:
image.png
客户端:
image.png
分析:
首先由客户端向服务器发送了 hello 消息,里面包含了证书套件,然后服务器返回消息中确定了证书套件并附上了证书链。
之后客户端对证书进行验证,并验证成功。
客户端生成了对等公钥发送给了服务器,服务器接收到之后马上同样生成了公钥并传给客户端。两者都根据对方的对等公钥及自身的密钥对生成了对称密钥。可以看到双方的对称公钥生成是相同的。
然后客户端 拟定了一条 finish 消息,里面包含了 “hello server!” ,并通过对称公钥使用 AES 对消息内容进行加密,然后传输给了服务器。服务器接收到之后回复了 “hello client!” 同样使用了 AES 进行加密。

git clone fatal: unable to access ‘https://github.com/robopeak/rplidar_ros.git/‘ 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 需要克隆Slamtec的rplidar的ROS节点到机器人工作空间。首先创建一个ROS工作空 阅读详情

相关推荐

ROS开发环境搭建实录:我是如何解决rosdep init失败的(附完整终端日志)

本文详细记录了在搭建ROS开发环境时遇到的rosdep初始化失败问题及其解决方案。通过分析SSL证书问题、尝试代理方案和本地化修改,最终找到稳定可靠的解决方法,适合面临类似问题的开发者参考。

weixin_30342209的博客 415

ROS 2 安全实战:keystore与enclave的生产级配置指南

ROS 2 安全机制并非简单启用开关,而是基于 DDS-Security 构建的分布式身份信任体系。其核心依赖数字证书链实现节点身份验证与策略管控,而非仅对通信数据加密。sros2 工具链通过 keystore(密钥存储根目录)和 enclave(节点身份路径)协同工作,严格绑定证书、权限策略与运行时上下文。该机制满足 ISO/SAE 21434 和 ISO/IEC 27001 等工业合规要求,支撑 AGV 调度、医疗机器人、电力巡检等高安全场景。本文聚焦 keystore 目录结构规范、enclave 路

weixin_30376509的博客 318

ROS 2安全实战:用sros2构建工业级DDS-Security通信基线

ROS 2安全本质是基于DDS-Security标准的零信任通信架构,其核心在于身份认证、访问控制与端到端加密的协同落地。不同于应用层TLS方案,DDS-Security将安全能力下沉至中间件层,原生保护发现流量、元数据及消息载荷,避免拓扑泄露与降级攻击。通过sros2工具链可自动化生成符合规范的密钥库、权限策略(permissions.xml)和治理配置(governance.xml),显著降低PKI运维复杂度。在AGV调度、智能仓储等工业场景中,启用Enforce策略并严格校验enclave路径、证书有

weixin_30709061的博客 413

有了这个网络安全面试题,面试就像开了挂!(附PDF)

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!【完整版领取方式在文末!!​​​​内容实在太多,不一一截图了。

lvaolan的博客 2507

ROS 2源码维护核心:vcs+repos同步机制详解

ROS 2是一个由百余个Git仓库构成的分布式系统,其稳定运行依赖于各组件间严格的版本一致性。理解vcs工具与.repos文件协同工作的原理,是保障源码构建可重现、可协作、可持续演进的基础能力。该机制通过声明式版本契约(.repos)与原子化状态同步(vcs import/pull)实现跨仓库一致性校验,避免手工git操作引发的分支漂移、Tag缺失和子模块失效等典型问题。在Jazzy等滚动发行版中,这一流程更成为应对高频更新、平衡新特性与兼容性的关键工程实践。本文深入解析vcs custom、vcs exp

361

ROS1软件源更新脚本入门:解决apt 404与GPG密钥失效问题

APT软件源是Linux系统包管理的基础机制,其核心原理在于通过可信签名验证的仓库地址获取二进制包元数据。在ROS1等第三方生态中,源配置失效常源于发行版生命周期终止、官方归档迁移及密钥管理方式升级三大技术断层。尤其当Ubuntu系统版本(如focal/bionic)与ROS1发行版(noetic/melodic)绑定关系失效时,传统`apt update`将频繁报错404 Not Found或NO_PUBKEY。采用清华TUNA等合规镜像源并配合`keyring`密钥方案,可显著提升源可用性与安装成功率。

chupu2979的博客 338

ROS OpenSSL X509 证书链构建及自定义验证

在WSL-Ubuntu20.04 基于 ROS、OpenSSL、C++实现X509证书链构建、发送接收及验证。本实验重庆大学国家卓越工程师学院实验。本人经验尚浅,如本文有任何错误或改进之处欢迎各位留言!😉如果觉得不错的话,可以✨一下吗?

Lin__Mu的博客 3445

LMI线性矩阵不等式之非线性变量处理

​ 如果一个LMI线性矩阵不等式中的某项存在两个矩阵变量相乘,那么称该类情形为非线性矩阵不等式,而要直接求解时很困难的,而且LMI工具箱也无法求解非线性矩阵,所以需要通过变量替换法进行处理。 ​...

Mr.邹的博客 4550

openssl 建立连接

下面是server 和client 的代码。用没跑过,但是用类似的代码跑了。流程是这样的。要注意的是openssl中ssl连接建立前用阻塞的socket,建立后可以设置非阻塞。openssl每个操作后最好检查下是否成功。 /************server*************************/ #include #include #include #include

ljloving的专栏 4722

SCI、中科院1区算法应用:(BWO-CNN-BiGRU-Attention)白鲸优化深度学习-融合注意力机制预测程序代码!包含特征可视化,数据Excel导入,直接运行!

BWO 白鲸优化算法,于2022年发表在SCI、中科院1区期刊《Knowledge-Based Systems》上。我们利用该高创新算法对我们的CNN-BiGRU-Attention时序和空间特征结合-融合注意力机制的回归预测程序代码中的超参数进行优化。

weixin_48747334的博客 3263

音视频入门:H264、H265概念总结

添加链接描述 什么是H.264与H.265 H.264与H.265都是视频压缩格式,由于视频本身的码流太大,所以需要经过压缩然后再通过网络进行传输。H.264是目前比较主流的压缩算法,像视频会议设备一般都采用这个编码格式。基础的H.264可以支持在1M带宽下传输720P30帧/秒的图像;H.264 HIGH PROFILE支持在512K带宽下传输720P30帧/秒的图像。 H.265是比较新的压缩算法,可以更一步提高压缩比,随着我们现在生活中出现的视频格式越来越大(比如现在基本都是1080P甚至4K的显示器

weixin_40673765的博客 8937

OpenSSL 编程指南

前言 初始化SSL库 创建SSL 上下文接口(SSL_CTX) 安装证书和私钥 加载证书(客户端/服务端证书) 加载私钥 加载CA证书 设置对端证书验证 例1 SSL服务端安装证书 例2 客户端安装证书 创建和安装SSL结构 1建立TCP/IP连接 客户端创建socket 服务端创建连接 创建SSL结构中的BIO SSL握手 服务端SSL握手 客户端握手 通过SSL_read以及SSL_write完成握手(可选的) 获取对端证书(可选) 数据传输 发送数据 接收数据 使用BIOs接口进行数据传输(可选的)

zhuguanlin121的博客 4027

CentOS7下用FreeRADIUS+AD实现802.1X认证完整指南(附华为交换机配置)

本文提供了在CentOS 7系统上部署FreeRADIUS并与Windows Active Directory集成,以实现企业级802.1X网络认证的完整实战指南。内容涵盖从架构原理、服务器配置(包括Kerberos、Samba Winbind集成)、FreeRADIUS核心设置与AD联动,到华为交换机的详细配置步骤。重点解决了生产环境中常见的高可用、动态VLAN下发及深度排错问题,为企业构建集中、安全的网络准入控制体系提供了经过验证的解决方案。

weixin_29273849的博客 407

RouterOS(Ros)开启HTTPS管理后台的安全访问

为了保障RouterOS(Ros)管理后台的安全访问,通常需要开启https服务,并且需要正确的配置SSL证书才可以安全访问。

GUAIYU的博客 1943

别再硬啃C代码了!用Simulink的Matlab Function模块手把手教你搭建CRC8校验模型(附完整M脚本)

本文详细介绍了如何利用Simulink的Matlab Function模块轻松实现CRC8校验模型,替代传统的C代码编写。通过可视化建模和即时验证,开发者可以高效完成算法设计,并自动生成嵌入式代码。文章包含完整的M脚本示例和工程实践技巧,特别适合嵌入式系统开发人员提升工作效率。

weixin_42520661的博客 183

Mooncake架构:基于KVCache解耦的LLM推理优化方案

在大语言模型推理中,KVCache是Transformer解码过程中用于缓存历史Key/Value向量的核心数据结构,它避免了序列重复计算,但会随上下文长度线性增长,成为显存占用的主要部分。其原理是在自回归生成时,将已计算过的注意力键值对存储下来,供后续Token生成时直接使用,从而提升计算效率。这项技术的核心价值在于,通过高效管理KVCache,可以显著降低长序列推理时的显存压力,提升GPU资源利用率。在实际应用场景中,尤其是在处理长上下文对话、高并发请求时,KVCache的管理策略直接决定了服务的吞吐量

weixin_35753431的博客 533

【ROS】ROS里使用IXWebSocket并配置支持wss时遇到的坑

网上的方法大多是cmake -DUSE_TLS什么的,但是这个选项是基于示例给的CMakeLists.txt里有这样一些选项:

weixin_41707730的博客 514

DICOM标准:DICOM医学影像中的覆盖层(Overlay)概念详解

DICOM标准:深入详解DICOM医学影像中的覆盖层(Overlay)

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1562

xf-ros实战指南:科大讯飞语音SDK在ROS中的稳定集成方法

语音交互是服务机器人核心能力之一,其底层依赖语音识别(ASR)与语音合成(TTS)技术的实时性、稳定性与硬件适配性。科大讯飞语音SDK提供成熟算法能力,但原生Linux版面向单机应用,缺乏ROS生态所需的节点生命周期管理、参数化配置与话题语义封装。xf-ros正是为弥合这一断层而生——它将SDK深度嵌入ROS通信范式,通过独立ASR/TTS节点、ring buffer音频流管理、ALSA设备动态发现及置信度过滤等机制,解决唤醒不灵、识别错乱、多线程崩溃等典型工程问题。本文聚焦树莓派与Jetson平台实测经验

weixin_30466039的博客 435

UDF学习(四)FLUENT UDF-DEFINE_PROFILE宏

利用DEFINE_PROFLILE可以指定以下边界或计算域信息:DEFINE_PROFILE(name,t,i)//既可以用。

weixin_44386973的博客 1806

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Ubuntu 22.04 编译安装 ROS noetic

本文介绍了在Ubuntu 22.04上安装ROS Noetic(ROS1最后一个版本)的方法。由于ROS2对ROS1兼容性不足,某些场景仍需使用ROS1。安装步骤包括:1)添加ROS2软件源;2)安装依赖库和工具;3)克隆ros_noetic_on_jammy仓库;4)编译安装ROS Noetic;5)配置环境变量。特别提醒编译ROS代码需使用特定路径下的catkin_make,或设置别名简化操作。文章还提供了相关参考链接,帮助解决编译时可能遇到的C++标准库兼容性问题。

人无远虑,必有近忧 2982

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

(Git错误)unable to access ‘https://github.com/siemens/ros-sharp.git/‘: OpenSSL SSL

错误: fatal: unable to access 'https://github.com/siemens/ros-sharp.git/': OpenSSL SSL_read: Connection was aborted, errno 10053 原因: Git默认限制推送的大小,运行命令更改限制大小即可 解决方案: git config --global http.postBuffer 524288000 ...

ZJ_____W的博客 2720

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ROS 2 Beta 3(r2b3):首个跨平台可用的底层架构黄金切片

ROS 2 是机器人操作系统向实时性、跨平台与中间件解耦演进的关键范式,其核心依赖于执行模型、DDS通信抽象与组件生命周期管理三大技术支柱。r2b3 作为 ROS 2 早期里程碑版本,首次在 Ubuntu 16.04、macOS 10.12 和 Windows 10 上实现稳定 DDS 发现与事件驱动执行器,暴露 RMW 句柄并支持有限 DDS 原生调用,为理解当前 rclcpp Executor 线程模型与 rclpy waitset 机制提供了不可替代的原始参照。它不面向生产部署,却承载着从概念验证到工

frank1998819 553

Ubuntu 开发环境必备C/C++库全攻略:从系统默认到ROS生态再到专业扩展

本文全面梳理了Ubuntu桌面版默认安装的C++基础库、通过鱼香一键安装ROS引入的庞大生态库,以及科学计算、网络通信、图形图像等领域常用的第三方库,助你构建完整的Linux C++开发知识体系。

佳木逢钺的博客 867

curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercontent.com:443

上课需要用到nvm,所以需要使用这条命令: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash (来自nvm的github:GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions) 但是报错如下: 于是搜索了帖.

Arsmart的博客 1万+

Linux 下 Codex CLI 连接手机:用手机 ChatGPT 远程连接 Linux 开发环境

Codex CLI 在 Linux 上的 Remote Control 能力实际上已经比之前完善了很多。Linux 主机终于具备了比较明确的手动配对入口。安装 standalone Codex CLI↓↓↓↓↓↓手机 ChatGPT Remote↓连接 Linux Codex当然,目前 Remote Control 依旧属于 experimental 功能,距离真正的 Linux 一等公民体验还有一些距离。

2302_78207226的博客 1307
上一篇: ROS OpenSSL X509 证书链构建及自定义验证
下一篇: MySQL的日志
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂重名的林木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值