搭载Android 4.0(ICS)附带了一些改进,使其更容易为人们带来他们的个人的Android设备工作的。在这篇文章中,我们将看看密钥存储功能。
Android 2.2通过提供Android设备管理API引入了对企业应用的支持。设备管理API的系统级提供了设备管理功能。这些API允许你创建在企业设置有用的安全感知应用程序,其中IT专业人士需要对员工的设备丰富的控制。例如,内置Android应用程序的电子邮件已经利用新的API,从而增强Exchange支持。通过电子邮件应用程序,Exchange管理员可以实施密码策略 - 包括字母数字密码或数字PIN码 - 跨设备。管理员还可以远程擦除(也就是,在恢复出厂默认值)丢失或被盗的手机。 Exchange用户可以同步他们的电子邮件和日历数据。
这份文件的目的是谁想要开发Android供电设备的企业解决方案的开发。它讨论了设备管理API提供给由搭载Android员工设备提供更强的安全性的各种功能。
注意有关建设工作方针控制器部署Android for Work信息,请参阅构建工作政策控制器。
设备管理API概述
以下是类型的可能使用设备管理API应用程序的示例:
•电子邮件客户端。
•那些远程擦除安全应用程序。
•设备管理服务和应用。
它是如何工作的?
您可以使用设备管理API来编写用户安装在他们的设备设备管理应用程序。设备管理应用程序强制执行所需的政策。下面是它如何工作的:
•系统管理员写道,实施远程/本地设备安全策略的设备管理应用程序。这些政策可能被硬编码到应用程序或应用程序可以动态地获取来自第三方服务器策略。
•应用程序安装在用户的设备。 Android版目前还没有一个自动化供应解决方案。是一些系统管理员会在应用程序分发给用户的方法如下:◦Google播放。
从另一家商店◦Enabling安装。
◦Distributing通过其他手段,如电子邮件或网站的应用程序。
•系统会提示用户启用该设备管理应用程序。如何以及何时发生这种情况取决于应用程序是如何实现的。
•一旦用户打开设备管理应用程序,它们都受到其政策。这些政策通常符合授予利益,如访问敏感系统和数据。
如果用户不启用该设备管理应用程序,它仍然在设备上,但处于非活动状态。用户将不会受到其政策,他们将反过来不会得到任何的应用程序的好处,例如,他们可能无法同步数据。
如果用户不遵从该策略(例如,如果用户设置违反准则密码),它是由应用程序来决定如何处理这个问题。然而,典型地,这将导致用户不能够同步数据。
如果某个设备试图连接到需要的设备管理API中不支持的政策服务器,连接不会被允许。设备管理API目前不允许部分配置。换句话说,如果一个设备(例如,传统设备)不支持的所有陈述的政策,也没有办法让设备进行连接。
如果设备包含多个启用管理应用程序,最严格的政策执行。有没有办法针对特定的管理应用程序。
要卸载现有设备管理应用程序,用户需要先注销该应用程序为管理员。
政策
在企业环境中,它往往是员工设备必须遵循一套严格的支配使用该设备的政策的情况下。设备管理API支持表1.注意设备管理API目前仅支持屏幕锁密码列出的策略:
表1.政策由设备管理API的支持。
政策
描述
启用密码
要求设备要求PIN或密码。
最小密码长度
设置所需的数字作为密码的字符。例如,您可能需要PIN或密码至少有六个字符。
需要字母数字密码
要求密码有字母和数字的组合。它们可以包括符号字符。
需要复杂的密码
要求密码必须至少包含一个字母,数位和一个特殊符号。介绍了Android 3.0的。
在密码所需的最小字母
最小数量的密码为所有管理员或一个特定需要的字母。介绍了Android 3.0的。
在密码所需的最小小写字母
最小数量的密码为所有管理员或特定的一个需要小写字母。介绍了Android 3.0的。
在密码所需的最小非字母字符
在密码为所有管理员或一个特定的要求非字母字符的最小数目。介绍了Android 3.0的。
在密码所需的最小数字位数
最小数量的密码为所有管理员或特定的一个需要的数值数字。介绍了Android 3.0的。
在密码所需的最小符号
最小号的密码,所有的管理员或特定的一个必需的符号。介绍了Android 3.0的。
在密码所需的最小大写字母
最小数的密码,所有的管理员或特定的一个必需的大写字母。介绍了Android 3.0的。
密码过期超时
当密码将过期,表示为当一个设备管理员设置过期超时以毫秒为单位的增量。介绍了Android 3.0的。
密码历史记录限制
此策略可以防止用户重用的最后n唯一的密码。此策略通常用于结合setPasswordExpirationTimeout(),这迫使用户在指定的时间量已过去之后更新其密码。介绍了Android 3.0的。
最大密码尝试失败
指定设备湿巾其数据之前用户可以多少次输入错误密码。设备管理API还允许管理员对设备远程重置到出厂默认值。这种固定的情况下,在设备丢失或被盗的数据。
最大不活动时间锁定
设置,因为用户的时间长度最后触摸屏幕或设备锁定屏幕前,按下按钮。发生这种情况时,用户需要再次输入其PIN或密码才可以使用他们的设备和访问数据。的值可以是1到60分钟之间。
需要存储加密
指定该存储区应该被加密,如果设备支持它。介绍了Android 3.0的。
禁用摄像头
指定相机应该被禁用。需要注意的是,这并不必须是一个永久禁用。照相机可以动态地基于上下文,时间启用/禁用,等等。介绍了Android 4.0的。
其他特性
除了支持上述表中列出的策略,设备管理API可以让你做到以下几点:
•提示用户设置新密码。
•锁定装置立即生效。
•擦拭设备的数据(也就是,将设备恢复到出厂默认设置)。
示例应用程序
本文档中使用的示例基于设备管理API样本,这是(通过Android SDK管理器中可用)包含在SDK样本中,位于您的系统上为<sdk_root> / ApiDemos /应用/ src目录/主/ JAVA / COM /例子/安卓/的API /应用/ DeviceAdminSample.java。
示例应用程序提供的设备管理功能的演示。它提出了一个用户界面,让他们能够在设备管理应用程序的用户。一旦启用了该应用程序,他们可以使用这些按钮在用户界面中执行以下操作:
•设置密码质量。
•指定用户的口令的要求,如最小长度,它必须包含数字字符的最小数目,等等。
•设置密码。如果密码不符合规定的政策,系统将返回一个错误。
•将擦除设备之前怎么会出现很多失败的密码尝试(即,恢复到出厂设置)。
•设置密码将如何从现在开始不久到期。
•设置密码历史长度(长度指的是存储在历史旧密码的数量)。这样可以防止用户重用他们以前使用的最后n个密码之一。
•指定存储区域应该被加密,如果设备支持它。
•设置可在设备锁定前经过的时间处于非活动状态的最高金额。
•立即设备锁。
•擦拭设备的数据(也就是,恢复出厂设置)。
•禁用摄像头。
图1.示例应用程序的屏幕截图
开发一个设备管理中的应用
系统管理员可以使用设备管理API来编写强制执行远程/本地设备安全策略强制执行的申请。本节总结参与创建的设备管理应用程序的步骤。
创建清单
要使用设备管理API,应用程序的清单必须包括以下内容:•DeviceAdminReceiver的子类,包括以下内容:◦TheBIND_DEVICE_ADMIN许可。
向ACTION DEVICE_ADMIN启用意图做出回应◦The能力,在清单中表示为一个意图过滤器。
•在元数据使用的安全策略的声明。
下面是从设备管理样品清单的摘录:
<activity android:name=".app.DeviceAdminSample" android:label="@string/activity_sample_device_admin"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.SAMPLE_CODE" /> </intent-filter> </activity> <receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver" android:label="@string/sample_device_admin" android:description="@string/sample_device_admin_description" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_sample" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>需要注意的是:•下列属性指的是示例应用程序驻留在ApiDemos / RES /价值/ strings.xml中的字符串资源。有关资源的详细信息,请参阅应用程序资源。 ◦android:标签=“@字符串/活性样品device_admin”指的是该活动的用户可读的标签。
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <limit-password /> <watch-login /> <reset-password /> <force-lock /> <wipe-data /> <expire-password /> <encrypted-storage /> <disable-camera /> </uses-policies> </device-admin>在设计你的设备管理应用程序,你并不需要包括所有的政策,只是有关你的应用程序的人。对于manifest文件的更多讨论,请参阅Android开发者指南。
public class DeviceAdminSample extends DeviceAdminReceiver { void showToast(Context context, String msg) { String status = context.getString(R.string.admin_receiver_status, msg); Toast.makeText(context, status, Toast.LENGTH_SHORT).show(); } @Override public void onEnabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_enabled)); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { return context.getString(R.string.admin_receiver_status_disable_warning); } @Override public void onDisabled(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_disabled)); } @Override public void onPasswordChanged(Context context, Intent intent) { showToast(context, context.getString(R.string.admin_receiver_status_pw_changed)); } ... }使应用程序
@Override public boolean onPreferenceChange(Preference preference, Object newValue) { if (super.onPreferenceChange(preference, newValue)) { return true; } boolean value = (Boolean) newValue; if (preference == mEnableCheckbox) { if (value != mAdminActive) { if (value) { // Launch the activity to have the user enable our admin. Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, mActivity.getString(R.string.add_admin_extra_app_text)); startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); // return false - don't update checkbox until we're really active return false; } else { mDPM.removeActiveAdmin(mDeviceAdminSample); enableDeviceCapabilitiesArea(false); mAdminActive = false; } } } else if (preference == mDisableCameraCheckbox) { mDPM.setCameraDisabled(mDeviceAdminSample, value); ... } return true; }行intent.putExtra(DevicePolicyManager.EXTRA DEVICE_ADMIN,mDeviceAdminSample)指出mDeviceAdminSample(这是一个DeviceAdminReceiver成分)是目标的策略。此行调用在图2中,它通过添加设备管理员向系统指导用户(或允许他们拒绝它)中所示的用户界面。
DevicePolicyManager mDPM; ... private boolean isActiveAdmin() { return mDPM.isAdminActive(mDeviceAdminSample); }管理策略
DevicePolicyManager mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);本节将介绍如何使用DevicePolicyManager来执行管理任务:
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent);设置密码质量
DevicePolicyManager mDPM; ComponentName mDeviceAdminSample; ... mDPM.setPasswordQuality(mDeviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);设置最小密码长度
DevicePolicyManager mDPM; ComponentName mDeviceAdminSample; int pwLength; ... mDPM.setPasswordMinimumLength(mDeviceAdminSample, pwLength);设置最大密码尝试失败
DevicePolicyManager mDPM; ComponentName mDeviceAdminSample; int maxFailedPw; ... mDPM.setMaximumFailedPasswordsForWipe(mDeviceAdminSample, maxFailedPw);设置密码过期超时
DevicePolicyManager mDPM; ComponentName mDeviceAdminSample; long pwExpiration; ... mDPM.setPasswordExpirationTimeout(mDeviceAdminSample, pwExpiration);根据病史限制密码
DevicePolicyManager mDPM; ComponentName mDeviceAdminSample; ... long timeMs = 1000L*Long.parseLong(mTimeout.getText().toString()); mDPM.setMaximumTimeToLock(mDeviceAdminSample, timeMs);您也可以通过编程告诉设备,立即锁定:
DevicePolicyManager mDPM; mDPM.lockNow();执行数据擦除
DevicePolicyManager mDPM; mDPM.wipeData(0);该wipeData()方法作为参数的附加选项的位掩码。目前该值必须是0。
private CheckBoxPreference mDisableCameraCheckbox; DevicePolicyManager mDPM; ComponentName mDeviceAdminSample; ... mDPM.setCameraDisabled(mDeviceAdminSample, mDisableCameraCheckbox.isChecked());存储加密
DevicePolicyManager mDPM; ComponentName mDeviceAdminSample; ... mDPM.setStorageEncryption(mDeviceAdminSample, true);查看设备管理API样本如何启用加密存储一个完整的例子。