1

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 の計算方法に何か問題があるのでしょうか、それとも他の問題があるのでしょうか?

4

1 に答える 1

0

私のエラーを見つけました。nonce は、Base64 文字列ではなく、デコードされた Base64 文字列値である必要があります。

nonce = new String(Base64.decodeBase64("RLLe7tWM313qHMq9ooUZUPJX0RqU9mEZuyoVF+jXhqQ="), "utf-8");
于 2013-05-23T11:44:53.517 に答える