Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android应用程序之间的安全通信_Android_Security - Fatal编程技术网

android应用程序之间的安全通信

android应用程序之间的安全通信,android,security,Android,Security,我有两个Android应用程序,应用程序A和应用程序B 这两个人必须以安全的方式相互通信。 我在应用程序a中为此定义了自定义权限。应用程序B使用该自定义权限。如果我将protectionLevel设置为“normal”,那么这样做很好,但这似乎并不安全,因为任何人都可以使用该权限 如果我能将protectionLevel设置为signature,这将是唯一真正安全的方法。遗憾的是,我有以下限制: 应用程序A必须使用证书A签名 应用程序B必须与证书B签署 应用程序B也可以使用证书A(表示A和B)

我有两个Android应用程序,应用程序A和应用程序B

这两个人必须以安全的方式相互通信。 我在应用程序a中为此定义了自定义权限。应用程序B使用该自定义权限。如果我将protectionLevel设置为“normal”,那么这样做很好,但这似乎并不安全,因为任何人都可以使用该权限

如果我能将protectionLevel设置为signature,这将是唯一真正安全的方法。遗憾的是,我有以下限制:

  • 应用程序A必须使用证书A签名
  • 应用程序B必须与证书B签署
  • 应用程序B也可以使用证书A(表示A和B)签名,但确实如此 我似乎哪儿也找不到,也是根据
有什么办法可以让它工作吗?如果不是(我想是这样):


什么是确保只有应用程序B可以与应用程序a通信的好方法?

案例1:当应用程序a和应用程序B使用不同的密钥签名时,您至少可以通过广播侦听器检查呼叫者包名称

@Override    
Public void onReceive(Context context, Intent intent) {
    Uri packageNameUri = intent.getData();
    String packageName = packageNameUri.getSchemeSpecificPart();
    If(packageName.equals(“<App_A or App_B packageName>”){
        //Access granted, execute what you need!    
    }
    else{
        //deny access
    }
}
我已经测试了基于签名的权限,效果很好

希望这有帮助

<receiver android:name="<your_receiver_class " >
    <intent-filter>
        <action android:name="<give it any name>"/>
        <data android:scheme="package"/> 
    </intent-filter>
</receiver> 
<permission android:name="org.securecom.permission" android:protectionLevel="signature"></permission>
…
<activity
    android.permission="org.securecom.permission"
        ...
</activity>
@Override
public void onReceive(Context context, Intent intent) {
    Uri packageUri = intent.getData();
    String packageName = packageUri.getEncodedSchemeSpecificPart();
    int flags = PackageManager.GET_PERMISSIONS | PackageManager.GET_SIGNATURES;
    try {
        PackageInfo packageInfo = context.getPackageManager().getPackageInfo(packageName,flags);
        // verify packageInfo
    } catch (NameNotFoundException e) {
        // handle
    }
}