gpt4 book ai didi

java - 在具有多个允许签名的 Android 服务上实现签名级安全性

转载 作者:IT老高 更新时间:2023-10-28 20:29:29 24 4
gpt4 key购买 nike

我目前正在开发一个包含大量个人用户信息的应用程序——比如 Facebook 联系人等……现在,我想要做的一件事(并且已经做过,相当有效)是使用 Android 的内置进程间通信协议(protocol) (AIDL) 向“第 3 方”应用程序开放部分应用程序。到目前为止一切顺利。

这里有一个问题:因为我们涉及处理大量的个人信息,所以我们必须非常小心谁可以和不能访问它;具体来说,只有“受信任”的应用程序才能这样做。因此,执行此操作的自然方法是在我们声明服务的 AndroidManifest.xml 文件中使用自定义权限。我的问题是:我希望能够制定签名级别的保护(类似于正常的“签名”权限级别),但有一点问题:

我不希望使用我们的内部签名进行签名的应用程序能够访问服务。我希望能够在运行时建立一个“可信签名”列表(或者如果有更好的方法,那么也许其他时间?)能够根据这个可信 key 列表检查传入的请求。

这将以与我认为的正常“签名”权限级别相同的方式满足安全约束 - 只有“受信任的 key 列表”上的程序才能访问服务,并且 key 很难欺骗(如果可能的话完全没有?)——但额外的好处是,我们不必使用我们内部团队的 key 签署每个使用 API 的应用程序。

目前在 Android 中是否可行?如果有,有什么特殊要求吗?

谢谢

最佳答案

我现在已经找到了这个问题的答案,但我会留下它以供将来寻找。

我在 android-security-discuss 上展开了讨论,并在其中得到了解答。链接:http://groups.google.com/group/android-security-discuss/browse_thread/thread/e01f63c2c024a767

简答:

    private boolean checkAuthorised(){
PackageManager pm = getPackageManager();
try {
for (Signature sig :
pm.getPackageInfo(pm.getNameForUid(getCallingUid()),
PackageManager.GET_SIGNATURES).signatures){
LogUtils.logD("Signature: " + sig.toCharsString());
if (Security.trustedSignatures.get(sig.toCharsString()) != null) {
return true;
}
}
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

LogUtils.logD("Couldn't find signature in list of trusted keys! Possibilities:");
for(String sigString : Security.trustedSignatures.keySet()){
LogUtils.logD(sigString);
}

/* Crash the calling application if it doesn't catch */
throw new SecurityException();

}

Security.trustedSignatures 是一个 Map 形式:

Map<String,String>().put("public key","some description eg. name");

将此方法放入外部进程正在调用的任何代码中(即在您的界面中)。请注意,这不会在 RemoteService 的 onBind() 方法中产生预期的效果。

关于java - 在具有多个允许签名的 Android 服务上实现签名级安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3760593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com