我正在使用 OMA DM 1.2 SyncML 协议实现通信服务器,并参考OMA 设备管理安全文档。我遇到了身份验证问题。客户端向服务器发送挑战:
<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>
然后我计算 md5-digest 以使用 java 代码返回到设备,其中 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 的方式有问题还是必须有其他问题?