1

错误:

android.security.KeyChainException: java.lang.IllegalStateException: uid 10111 doesn't have permission to access the requested alias

代码:

new Thread(new Runnable() {

        public void run() {
            try {
                X509Certificate[] myCertificates=KeyChain.getCertificateChain(MainActivity.this, "ServerCertificate");
                if(myCertificates!=null)
                {
                    System.out.println("myCertificates size "+myCertificates.length);

                    for(int i=0;i<myCertificates.length;i++)
                    {
                        System.out.println("myCertificates i= "+i+"    "+myCertificates[i]);
                    }
                }
            } catch (KeyChainException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }).start();
4

1 回答 1

6

该类KeyChain要求应用程序choosePrivateKeyAlias()在安装应用程序后至少调用一次,然后再调用getPrivateKey()getCertificateChain()。因此,即使事先知道别名,也choosePrivateKeyAlias()必须至少调用一次,否则在应用程序和使用的内部数据库之间没有建立信任KeyChain

于 2012-12-10T16:18:38.293 回答