【发布时间】:2013-05-18 14:05:03
【问题描述】:
我正在使用 OMA DM 1.2 SyncML 协议实现通信服务器,并参考OMA Device Management Security 文档。我遇到了身份验证问题。客户端向服务器发送挑战:
<Chal>
<Meta>
<Format xmlns="syncml:metinf">b64</Format>
<Type xmlns="syncml:metinf">syncml:auth-md5</Type>
<NextNonce xmlns="syncml:metinf">RLLe7tWM313qHMq9ooUZUPJX0RqU9mEZuyoVF+jXhqQ=</NextNonce>
</Meta>
</Chal>
然后我使用 java 代码计算 md5-digest 以返回到设备,其中 nonce 是上述挑战中“NextNonce”中的 Base64 字符串:
MessageDigest digest = MessageDigest.getInstance("MD5");
String usrPwd = username + ":" + password;
String usrPwdHash = Base64.encodeBase64String(digest.digest(usrPwd.getBytes("utf-8")));
String usrPwdNonce = usrPwdHash + ":" + nonce;
String usrPwdNonceHash = Base64.encodeBase64String(digest.digest(usrPwdNonce.getBytes("utf-8")));
return usrPwdNonceHash;
然后这个哈希返回到设备为:
<Cred>
<Meta>
<ns2:Type>syncml:auth-md5</ns2:Type>
<ns2:Format>b64</ns2:Format>
</Meta>
<Data>QpbMtvvfNGRIavJ0jqcxaw==</Data>
</Cred>
但设备返回状态 401 和新的质询。我计算 md5-hash 的方式有问题还是一定有其他问题?
【问题讨论】: