ActiveSync クライアントについて
ActiveSync クライアントのトラブルシュートに便利な方法をご紹介します。
ActiveSync の仕様はすべて公開されており、特定のコマンド実行時の動作などについては基本的にこのプロトコルに沿ったものになっているかどうか照らし合わせて確認することとなります。以下の [MS-AS***] が ActiveSync 関連の資料となります。
Technical Documents
https://msdn.microsoft.com/en-us/library/cc425499(v=EXCHG.80).aspx
ただし、ActiveSync の通信内容を直接確認するには以下の 2 つの点で困難が伴います。
1. 通常 HTTPS を利用するため、SSL/TLS を解除した上でパケットを取得する必要がある
2. 仮に HTTP を使うように構成した場合にもその内容は WBXML というバイナリ形式になっており、人が読んで調査するには非効率であるため WBXML をデコードして平文の XML の内容を確認することが必要となる
※ WBXML は "Wireless Application Protocol (WAP) Binary XML" のことで、あらかじめ決められたマッピングを利用して XML をよりコンパクトなバイナリ形式にエンコードしたものです。ActiveSync における WBXML は以下の資料で定義されています。
[MS-ASWBXML]: Exchange ActiveSync: WAP Binary XML (WBXML) Algorithm
https://msdn.microsoft.com/en-us/library/dd299442(v=exchg.80).aspx
※ 一部のパケット パーサーでは ActiveSync の WBXML を理解するものもありますが、いずれにしても SSL/TLS を解除してパケット採取することは運用環境ではハードルが高いと思います。
Exchange サーバーにて ActiveSync のデバッグ ログを採取することで平文でのクライアントとの通信内容を確認することができますので、トラブルシュートに便利な機能となります。
以下は ActiveSync のデバッグ ログを採取する方法となります。
1. 対象のメールボックスで ActiveSyncDebugLogging を有効にします。
Set-CASMailbox <対象ユーザー> -ActiveSyncDebugLogging:$true
※ 以下の OWA のオプション ページにて、ユーザー自身が自身の端末について ActiveSyncDebugLogging を有効化することも
できます。
2. ActiveSync クライアントから操作し、現象を再現します。
3. ActiveSyncDebugLogging を無効化します
Set-CASMailbox <対象ユーザー> -ActiveSyncDebugLogging:$false
※ OWA のオプション ページから無効化する場合にも上記 1 と同様となります。
実際のログは以下のように、Get-MobileDeviceStatistics を使って確認することができます。
Get-MobileDeviceStatistics -Mailbox <対象ユーザー> -GetMailboxLog
例:
Get-MobileDeviceStatistics -Mailbox user01 -GetMailboxLog | fl
RunspaceId : b69d92c6-e947-4353-8114-6b1021a65885
FirstSyncTime : 8/17/2016 11:42:20 PM
LastPolicyUpdateTime :
LastSyncAttemptTime :
LastSuccessSync :
DeviceType : testDeviceType
DeviceID : 746573744465766963654964
DeviceUserAgent :
DeviceWipeSentTime :
DeviceWipeRequestTime :
DeviceWipeAckTime :
LastPingHeartbeat :
RecoveryPassword : ********
DeviceModel : testDeviceType
DeviceImei :
DeviceFriendlyName :
DeviceOS :
DeviceOSLanguage :
DevicePhoneNumber :
MailboxLogReport :
-----------------
Log Entry: 0
-----------------
RequestTime :
08/18/2016 08:42:21
ServerName :
E2013-1-E
AssemblyVersion :
15.00.1210.002
Identifier :
B32BB84
RequestHeader :
POST /Microsoft-Server-ActiveSync/Proxy/default.eas?
Cmd=FolderSync&DeviceId=746573744465766963654964&DeviceType=testDeviceType&User=user0
1@e.local HTTP/1.1
Connection: Keep-Alive
Content-Length: 13
Content-Type: application/vnd.ms-sync.wbxml
Accept-Language: en-us
Authorization: ********
Cookie: ClientId=IYYXJGKYB9SXACMEFW
Host: e2013-1-e.e.local:444
X-Forwarded-For: 192.168.1.106
X-Forwarded-Port: 60199
X-ExCompId: ClientAccessFrontEnd
MS-ASProtocolVersion: 14.1
X-OriginalRequestHost: mail.e.local
X-OriginalRequestHostSchemePort: 443:https:mail.e.local
X-MSExchangeActivityCtx: V=1.0.0.0;Id=fa43f768-fb02-44b0-902b-f094d06f5579;C=;P=
X-EAS-Proxy: S-1-5-21-3530942931-3896567873-2110482943-1140,E\user01
msExchProxyUri: https://mail.e.local/Microsoft-Server-ActiveSync?
jQkJBAx0ZXN0RGV2aWNlSWQADnRlc3REZXZpY2VUeXBlCA51c2VyMDFAZS5sb2NhbA==
X-IsFromCafe: 1
X-SourceCafeServer: E2013-1-E.E.LOCAL
X-CommonAccessToken: VgEAVAdXaW5kb3dzQwBBBUJhc2ljTAhFXHVzZXIwMVUuUy0xLTUtMjEtMzUzMDk0Mjk
zMS0zODk2NTY3ODczLTIxMTA0ODI5NDMtMTE0MEcHAAAABwAAAC1TLTEtNS0yMS0zNTMwOTQyOTMxLTM4O
c4NzMtMjExMDQ4Mjk0My01MTMHAAAAB1MtMS0xLTAHAAAAB1MtMS01LTIHAAAACFMtMS01LTExBwAAAAhT
TY1NjLTEtNS0xNQcAAMATUy0xLT UtNS0wLTQ0MzgyNzQ0NgcAACAuUy0xLTUtMjEtMzUzMDk0MjkzMS0z
ODk2NTY3ODczLTIxMTA0ODI5NDMtMTEwOUUAAAAA
X-vDirObjectId: 743cb6d8-577f-400d-b079-05127ffeb3f5
RequestBody :
<?xml version="1.0" encoding="utf-8" ?>
<FolderSync xmlns="FolderHierarchy:">
<SyncKey>0</SyncKey>
</FolderSync>
AccessState :
Allowed
AccessStateReason :
Global
ResponseHeader :
HTTP/1.1 200 OK
MS-Server-ActiveSync: 15.0
X-MS-RP: 2.0,2.1,2.5,12.0,12.1,14.0,14.1
MS-ASProtocolVersions: 2.0,2.1,2.5,12.0,12.1,14.0,14.1
MS-ASProtocolCommands: Sync,SendMail,SmartForward,SmartReply,GetAttachment,GetHierarchy
,CreateCollection,DeleteCollection,MoveCollection,
FolderSync,FolderCreate,FolderDelete,FolderUpdate,MoveItems,GetItemEstimate,MeetingResponse
,Search,Settings,Ping,ItemOperations,Provision
,ResolveRecipients,ValidateCert
ResponseBody :
<?xml version="1.0" encoding="utf-8" ?>
<FolderSync xmlns="FolderHierarchy:">
<Status>1</Status>
<SyncKey>1</SyncKey>
<Changes>
<Count>14</Count>
<Add>
<ServerId>1</ServerId>
<ParentId>0</ParentId>
<DisplayName>RSS フィード</DisplayName>
<Type>12</Type>
</Add>
<Add>
<ServerId>2</ServerId>
<ParentId>0</ParentId>
<DisplayName>ジャーナル</DisplayName>
<Type>11</Type>
</Add>
<Add>
<ServerId>3</ServerId>
<ParentId>0</ParentId>
<DisplayName>タスク</DisplayName>
<Type>7</Type>
</Add>
<Add>
<ServerId>4</ServerId>
<ParentId>0</ParentId>
<DisplayName>メモ</DisplayName>
<Type>10</Type>
</Add>
<Add>
<ServerId>5</ServerId>
<ParentId>0</ParentId>
<DisplayName>下書き</DisplayName>
<Type>3</Type>
</Add>
<Add>
<ServerId>6</ServerId>
<ParentId>0</ParentId>
<DisplayName>削除済みアイテム</DisplayName>
<Type>4</Type>
</Add>
<Add>
<ServerId>7</ServerId>
<ParentId>0</ParentId>
<DisplayName>受信トレイ</DisplayName>
<Type>2</Type>
</Add>
<Add>
<ServerId>8</ServerId>
<ParentId>0</ParentId>
<DisplayName>送信トレイ</DisplayName>
<Type>6</Type>
</Add>
<Add>
<ServerId>9</ServerId>
<ParentId>0</ParentId>
<DisplayName>送信済みアイテム</DisplayName>
<Type>5</Type>
</Add>
<Add>
<ServerId>10</ServerId>
<ParentId>0</ParentId>
<DisplayName>迷惑メール</DisplayName>
<Type>12</Type>
</Add>
<Add>
<ServerId>11</ServerId>
<ParentId>0</ParentId>
<DisplayName>予定表</DisplayName>
<Type>8</Type>
</Add>
<Add>
<ServerId>12</ServerId>
<ParentId>0</ParentId>
<DisplayName>連絡先</DisplayName>
<Type>9</Type>
</Add>
<Add>
<ServerId>13</ServerId>
<ParentId>0</ParentId>
<DisplayName>連絡先候補</DisplayName>
<Type>14</Type>
</Add>
<Add>
<ServerId>RI</ServerId>
<ParentId>0</ParentId>
<DisplayName>RecipientInfo</DisplayName>
<Type>19</Type>
</Add>
</Changes>
</FolderSync>
ResponseTime :
08/18/2016 08:42:21
DeviceEnableOutboundSMS : False
DeviceMobileOperator :
Identity : e.local/Users/user01/ExchangeActiveSyncDevices/testDeviceType§746573744465766963654964
Guid : 5cca7ae5-9870-49f3-851b-9934b77e3f85
IsRemoteWipeSupported : True
Status : DeviceOk
StatusNote :
DeviceAccessState : Allowed
DeviceAccessStateReason : Global
DeviceAccessControlRule :
DevicePolicyApplied : Default
DevicePolicyApplicationStatus : NotApplied
LastDeviceWipeRequestor :
ClientVersion : 14.1
NumberOfFoldersSynced : 0
SyncStateUpgradeTime :
ClientType : EAS
IsValid : True
ObjectState : Unchanged
上記のとおり、ActiveSync のデバッグ ログの MailboxLogReport では 実際にやり取りされた XML の内容を平文で確認することができます。
なお、ActiveSync のデバッグ ログは対象メールボックス内に保存され、保持ポリシーにより 5 日で自動的に削除されます。
特定の内容のリクエスト送信時のサーバーの反応を確認したい場合などには、EASTester というオープン ソースの ActiveSync クライアントを利用することができますのでご紹介いたします。
例えば、特定のユーザーで ActiveSync の機能が意図したように利用できない場合などでは、端末や搭載されている ActiveSync クライアント プログラム依存なのかを確認するために、上記のデバッグ ログと合わせてこちらのツールを利用することができます。
EASTester
https://eastester.codeplex.com/
1. EASTester.exe を起動します。
2. [EAS Conversations] をクリックします。
3. リクエスト先ホスト名、ユーザー名、パスワード、"EAS Version"、"Device Id"、"Device Type" 等必要な情報を入力します。
4. 実行する ActiveSync Command を [Command] から選択し、画面下のテキスト ボックスに送信する XML の内容を入力して、
[Run] をクリックします。
基本的な XML は、[Load Example] から選択し、必要に応じてカスタマイズすることができます。
以下は FolderSync リクエストを送信した結果です。
※ Provisioning が必須となっている環境では先に Provision コマンドを実行して、Policy Key を取得する必要があります。
EASTester はテキスト ボックスに入力された XML を WBXML に変換して送信するツールのため、任意の XML を入力して検証することができます。
なお、EASTester で同期した場合にも通常どおり、OWA のオプション ページの [電話] にデバイスとして表示されますので、こちらから削除することができます。
また、管理者が Exchange 管理コマンドを使って削除することも可能です。
例: Get-MobileDevice e.local/Users/user01/ExchangeActiveSyncDevices/testDeviceType§746573744465766963654964 | Remove-MobileDevice
ActiveSync クライアントが利用するコマンドについては、上述の ActiveSync のプロトコル資料に加え、EASTester の Help にも説明がありますのでご参考いただければと思います。
本ブログが ActiveSync のトラブルシュートや動作について理解を深めるためにお役に立てば幸いです。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。