如何使用bluetoothctl以BLE安全模式1等级3连接设备并解决认证错误
解决BLE设备写入特征时的"Insufficient authentication (5)"错误(配置Mode 1 Level 3安全等级)
我帮你梳理下问题和解决方案:你已经成功配对并连接了BLE设备,但写入特定特征时遇到Insufficient authentication (5)的ATT错误,核心原因是当前连接没有使用Mode 1 Level 3(即带认证的加密连接),而且设备未被标记为可信,导致BlueZ没有启用高安全等级的连接。
下面是具体的操作步骤,用bluetoothctl就能搞定:
步骤1:断开当前连接(如果设备已连接)
先确保设备处于断开状态,避免后续设置冲突:
bluetoothctl disconnect D2:A7:4C:76:F3:E0
步骤2:标记设备为可信
BlueZ默认不会给未标记为可信的设备启用高等级加密,所以先把设备设为可信:
trust D2:A7:4C:76:F3:E0 # 验证是否设置成功 info D2:A7:4C:76:F3:E0
执行info后,你应该能看到Trusted: yes的状态。
步骤3:配置安全模式为Mode 1 Level 3
进入安全菜单,强制启用带认证的加密连接(对应Mode 1 Level 3):
menu security # 设置安全模式为1(蓝牙Security Mode 1,基于链路层的安全) set-security-mode 1 # 设置安全等级为3(Authenticated Encryption,既认证又加密) set-security-level 3 # 或者直接用简化命令启用认证加密 set-encryption authenticated # 退出安全菜单 back
步骤4:重新连接设备
现在重新连接设备,此时BlueZ会自动建立加密连接:
connect D2:A7:4C:76:F3:E0
你可以用hcidump观察,此时会出现LE Start Encryption相关的HCI命令,说明加密连接已经建立。
步骤5:再次尝试写入特征
连接成功后,重新进入GATT菜单执行写入操作:
menu gatt select-attribute /org/bluez/hci0/dev_D2_A7_4C_76_F3_E0/service000c/char0013 write 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
补充说明
- 关于你提到的写入时只发送1字节且循环的问题,这是BlueZ 5.50版本在连接未加密时的小bug,当安全等级问题解决后,这个现象会自动消失,树莓派5.43版本能发送完整的8字节请求也验证了这一点,只是当时因为安全不足被设备拒绝。
- Mode 1 Level 3是蓝牙中要求最高的链路层安全等级,既需要设备配对认证,又需要链路加密,正好匹配你设备的特征访问要求。
内容的提问来源于stack exchange,提问作者user1381
相关产品推荐
相关产品推荐

