10个帖子/ 0个新帖子
最后发表
ao
离线
最后看到:1个月1个星期前
加入:2016-06-02 20:58
安全培训05

你好,

我目前正在通过您的05安全培训,并遵循了步骤,已经能够连接到设备。
然而,经过一段时间的测试,我不再能够连接到LightBlue。我得到的错误:外设断开时被询问。
然后我测试了与另一部手机的连接,能够正确连接并使用该设备。
进一步调查后,我尝试用自己在xcode上开发的iPhone应用连接到该设备,我能够连接到该设备,但随后由于一个未知的错误而立即断开。我已经尝试上传不同的项目,但仍然无法连接到我正在测试的手机。

谁能告诉我如何解决这个问题或者学习更多使用安全系统的方法?

MT_dialog
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨ao,

嗨ao,

断开连接的原因可能是安全,当你与设备配对后,如果你尝试再次配对,设备将拒绝连接,因为它已经配对。尝试解除设备与手机的绑定,并尝试再次连接,您也可以捕捉到断开回拨,并检查断开的原因。关于立即断开连接的事实,您正在测试您的手机的应用程序是否实现了安全性?外围设备会发出安全请求,但启动配对过程是主程序的责任,如果外围设备发出这样的请求,而中心设备没有回应,外围设备就会自动断开连接。您可以查看实现安全性并处理配对过程检索的密钥的Smart Tag项目。

由于MT_dialog

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
嗨太,

嗨太,

我和Ao有类似的问题,在培训05中,我按照指示尝试打开安全,如果我关闭安全,它会重新连接。

断开原因是0x16 (CO_ERROR_CO_TERM_BY_LOCAL_HOST),它的确切含义是什么?

准确的说,我记得,在第一次,它是成功的绑定和工作,不知怎么的,它断开后重置DA14580 Dev Kit。
在我的手机上忘记绑定设备(运行的是iOS 9.3.2)后,它仍然无法连接到安全。

有线索吗?

ao
离线
最后看到:1个月1个星期前
加入:2016-06-02 20:58
霍勒斯,

霍勒斯,
当我忘记手机上的设备时,我能够重新绑定DA14580。为了与芯片一起工作,我不得不经常忘记设备,每次我重新编程。

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
嗨Ao,

嗨Ao,

是的,我和你有同样的情况,现在想彻底解决它。

MT_dialog
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨Horach,

嗨Horach,

得到CO_ERROR_CO_TERM_BY_LOCAL_HOST的消息是因为设备显式地拒绝连接。如果您已经在设备中启用了安全性,而该设备没有绑定数据,它将接受配对请求并与该设备绑定。如果断开连接,重新连接的过程是不同的。要重新连接绑定设备,中心应该发送加密请求。加密请求的处理程序将检查来自中央的安全数据,如果数据不匹配,设备将拒绝连接。你的手机会记住你连接的绑定数据,但如果你对580进行电源循环或重新编程,所有的绑定数据都会丢失,当一个重新连接的加密请求到来时,580会拒绝它。

你可以抓住的配对和加密事件处理程序函数在user_callback_config.h文件(default_app_on_pairing_request()函数应该在配对请求消息和default_app_on_ecryption_req_ind调用()函数应该调用的请求消息加密,以防断开顺序reconnetion)。您可以通过使用模板示例进行测试,就像在user_config.h文件中使用DEF_SEC_REQ_ON_CONNECT更改.security_request_scenario以请求连接的安全性一样,这将使您能够使用一个工作安全连接。

由于MT_dialog

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
亲爱的太,

亲爱的太,

非常感谢您的回复。

这是我在user_config.h上的修改

@@ const static sleep_state_t app_default_sleep_mode=ARCH_SLEEP_OFF;
Static const struct security_configuration user_security_configuration = {
.oob = GAP_OOB_AUTH_DATA_NOT_PRESENT,
.key_size = KEY_LEN,
+ #如果1
.iocap = GAP_IO_CAP_NO_INPUT_NO_OUTPUT,
.auth = GAP_AUTH_REQ_NO_MITM_BOND,
- .sec_req = GAP_NO_SEC,
+ .sec_req = GAP_SEC1_NOAUTH_PAIR_ENC,
+ #其他
+ .iocap = GAP_IO_CAP_KB_ONLY,
+ .auth = GAP_AUTH_REQ_MITM_BOND,
+ .sec_req = GAP_SEC1_AUTH_PAIR_ENC,
+ # endif
.ikey_dist = GAP_KDIST_SIGNKEY,
.rkey_dist = GAP_KDIST_ENCKEY,
.tk = {
@@ - 21,7 + 22,7 @@ static const struct default_handlers_configuration user_default_hnd_conf= {

//配置默认处理程序的安全启动操作
//如果启用了安全性(CFG_APP_SECURITY)
- .security_request_scenario = DEF_SEC_REQ_NEVER
+ .security_request_scenario = DEF_SEC_REQ_ON_CONNECT
};

# endif / / _USER_CONFIG_H_

按照您的指导,我捕获了default_app_on_pairing_request()和default_app_on_ecryption_req_ind()函数,
但是它只调用default_app_on_encryption_req_ind()。
我想这是因为外设以前和手机配对过,不是吗?

Void default_app_on_encrypt_req_ind(uint8_t connection_idx, struct gapc_encrypt_req_ind const *param)
= = >
If (app_easy_security_validate_encrypt_req_against_env(connection_idx, param))
= = >
Bool app_easy_security_validate_encrypt_req_against_env (uint8_t connection_idx, struct gapc_encrypt_req_ind const *param)

如果(((app_sec_env [connection_idx]。& GAP_AUTH_BOND) != 0)
...
返回(真正的);
其他的
返回(假);——>假。

Connection_idx = 0, app_sec_env[0]用0填充

这是否意味着我必须将绑定信息保存在永久存储中
如第18页training_05 material for multiple device bonding?

因此,稍后,可以在encrypt_req_ind中检查它,对吗?

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
嗨对话框支持,

嗨对话框支持,

你能帮忙回答第7个问题吗?谢谢你!

MT_dialog
离线
最后看到:6个月2个星期前
工作人员
加入:2015-06-08 34
嗨,霍勒斯,

嗨,霍勒斯,

正如我已经指出的,如果外设已经绑定,它将只触发加密请求函数,以检查中央为连接所拥有的密钥是否有效。配对完成后,指定连接(connection_idx)的app_sec_env不应该为零,而是应该具有配对过程中定义的键。如果设备断电,密钥不会被保留(app_sec_env将被设置为0),因为它们存储在RAM空间中,是的,你应该将它们存储在flash中,并自定义应用程序,以便检查flash中的密钥。

由于MT_dialog

贺拉斯谢长廷
离线
最后看到:2年12个月前
加入:2016-05-05 16:34
嗨,MT,好的,知道了,谢谢!

嗨太,

好的,知道了,谢谢!

主题锁定