Apollo单向SSL认证(1)

本文介绍如何在Apollo中配置单向SSL认证,包括证书生成步骤和服务端及客户端的配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考链接:https://www.cnblogs.com/benwu/articles/4891758.html

keytool -genkey -alias mybroker -keyalg RSA -keyStore mybroker.ks
keytool -export -alias mybroker -keyStore mybroker.ks -file mybroker.cert
keytool -import -alias mybroker -keystore mybroker.ts -file mybroker.cert

 

Apollo单向SSL认证

1.SSL协议

SSL协议有单向和双向之分。

单向认证流程图:

 

双向认证流程图:

 

 

单向和双向的主要区别是:

  • 单向需要的是在broker上配置broker.ks,在客户端上配置client.ts,client每次建立SSL连接时会从服务端拿到证书并判断是否受信。
  • 双向则需要在客户端配置client.ts和client.ks,服务端配置上broker.ks和broker.ts,通信时必须双方都认可才能建立通信。

 

如果使用单向认证,那么客户端建议仍然使用密码+client.ts的方式来登录broker,这样可以减少每个client上线时都需要配置broker.ts的工作量。

2. 证书生成步骤

证书生成步骤:

1、生成服务端私钥,并导入到服务端keyStore文件中,此操作生成broker1.ks文件,用于保存服务端私钥,仅供服务端使用。

在命令行输入:

keytool -genkey -alias broker -keyalg RSA -keyStore broker1.ks

 

2、根据服务端私钥导出服务端证书,此操作生成broker_cert文件,该文件为服务端的证书。

在命令行输入:

keytool -export -alias broker -keyStore broker1.ks -file broker_cert

 

3、导入服务端证书到客户端的密钥库Trust keyStore中。此操作生成client.ts文件,保存服务端证书,供客户端使用。

在命令行输入:

keytool -import -alias broker -keystore client1.ts -file broker_cert

 

单向认证证书生成完成。

3. Apollo配置SSL

在Apollo服务端配置服务端证书broker1.ks。编辑Apollo配置文件apollo.xml,添加SSL证书配置,填写服务端证书broker1.ks文件地址和密钥:

<key_storage file="${apollo.base}/etc/broker1.ks" password="password" key_password="password"/>

4. 模拟连接SSL

客户端使用MQTT.fx模拟,配置客户端,端口号使用tls端口61614,启用SSL,使用TLSv1.2,选择CA keystore验证,填写客户端证书client1.ts文件地址和密钥。

 

客户端连接broker成功。

 

在百度Apollo中,可以通过以下步骤查询单向车道的数量: 1. 获取当前车辆所在的Lane信息,可以通过`Localization`模块获取。 2. 通过当前车辆所在的Lane信息,获取当前车道的ID。 3. 通过当前车道的ID,获取当前车道的信息,包括前驱车道、后继车道等信息。 4. 遍历前驱车道和后继车道,统计单向车道的数量。 具体实现代码如下: ```cpp #include "modules/common/log.h" #include "modules/common/util/util.h" #include "modules/map/hdmap/hdmap.h" #include "modules/map/hdmap/hdmap_util.h" // 获取当前车辆所在车道ID uint32_t GetCurrentLaneId() { apollo::hdmap::LaneInfoConstPtr current_lane = apollo::hdmap::HDMapUtil::BaseMap().GetLaneById( apollo::common::util::MakeMapId(FLAGS_current_lane_id)); if (!current_lane) { AERROR << "Failed to get current lane."; return 0; } return current_lane->id().id(); } // 统计单向车道数量 int CountOneWayLanes() { uint32_t current_lane_id = GetCurrentLaneId(); int one_way_lanes_count = 0; // 获取当前车道信息 apollo::hdmap::LaneInfoConstPtr current_lane = apollo::hdmap::HDMapUtil::BaseMap().GetLaneById( apollo::common::util::MakeMapId(current_lane_id)); if (!current_lane) { AERROR << "Failed to get current lane."; return 0; } // 统计前驱车道的单向车道数量 uint32_t predecessor_id = current_lane->predecessor_id().id(); while (predecessor_id != 0) { apollo::hdmap::LaneInfoConstPtr predecessor_lane = apollo::hdmap::HDMapUtil::BaseMap().GetLaneById( apollo::common::util::MakeMapId(predecessor_id)); if (!predecessor_lane) { break; } if (predecessor_lane->lane().turn() == apollo::hdmap::Lane::NO_TURN) { one_way_lanes_count++; } predecessor_id = predecessor_lane->predecessor_id().id(); } // 统计后继车道的单向车道数量 uint32_t successor_id = current_lane->successor_id().id(); while (successor_id != 0) { apollo::hdmap::LaneInfoConstPtr successor_lane = apollo::hdmap::HDMapUtil::BaseMap().GetLaneById( apollo::common::util::MakeMapId(successor_id)); if (!successor_lane) { break; } if (successor_lane->lane().turn() == apollo::hdmap::Lane::NO_TURN) { one_way_lanes_count++; } successor_id = successor_lane->successor_id().id(); } return one_way_lanes_count; } ``` 需要注意的是,上述代码只统计了前驱车道和后继车道的单向车道数量,如果要统计整个地图中所有的单向车道数量,需要遍历整个地图中的所有车道,并且判断车道是否为单向车道。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值