在“AndroidKeyStore”中使用私钥的encode()返回null

时间:2014-03-26 14:55:28

标签: android security pki

使用Android 4.3,此代码返回null。

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
keyStore.setKeyEntry(alias, privateKey, null, certificateChain);
PrivateKeyEntry entry=(PrivateKeyEntry)keyStore.getEntry(alias, new PasswordProtection(password));
assert(entry.getPrivateKey().getEncoded()!=null);

如何获得私钥的编码版本?

或者,是否可以将私钥处理程序传输到另一个应用程序?

感谢的

1 个答案:

答案 0 :(得分:3)

Android KeyChain API阻止您获取已编码的私钥。

请参阅OpenSSLRSAPrivateKey.java

第158行的方法
@Override
public final BigInteger getPrivateExponent() {
    if (key.isEngineBased()) {
        throw new UnsupportedOperationException("private exponent cannot be extracted");
    }

但使用KeyChain API的好处是它提供了系统范围的凭据存储。任何应用程序都应该能够通过别名检索密钥对和证书。请参阅KeyStore文档。