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>
次に、Java コードを使用してデバイスに返される md5-digest を計算します。ここで、ノンスは、上記の課題の「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 の計算方法に何か問題があるのでしょうか、それとも他の問題があるのでしょうか?