【问题标题】:Android KeyStore - How to save an RSA PrivateKeyAndroid KeyStore - 如何保存 RSA PrivateKey
【发布时间】:2013-12-06 09:42:51
【问题描述】:

我从 Web 服务(由我自己制作)收到一个 RSA PrivateKey PKCS#8,以 base 64 字符串编码。 我的 Android 应用必须将此密钥安全地保存到手机中的某个位置。

从 Android 4.3 版本开始,可以使用新的 KeyStore API 保存密钥。 我找到了一个article with code axample,它展示了如何生成一个具有存储密钥所需规范的密钥对。并在恢复密钥之后。

// generate a key pair
Context ctx = getContext();
Calendar notBefore = Calendar.getInstance()
Calendar notAfter = Calendar.getInstance();
notAfter.add(1, Calendar.YEAR);
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx)
            .setAlias("key1")
            .setSubject(
                    new X500Principal(String.format("CN=%s, OU=%s", alais,
                            ctx.getPackageName())))
            .setSerialNumber(BigInteger.ONE).setStartDate(notBefore.getTime())
            .setEndDate(notAfter.getTime()).build();

KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
kpGenerator.initialize(spec);
KeyPair kp = kpGenerator.generateKeyPair();

// in another part of the app, access the keys
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)keyStore.getEntry("key1", null);
RSAPublicKey pubKey = (RSAPublicKey)keyEntry.getCertificate().getPublicKey();
RSAPrivateKey privKey = (RSAPrivateKey) keyEntry.getPrivateKey();

但我不明白如何保存现有的密钥。有谁能够帮我? 提前致谢

【问题讨论】:

标签: security keystore android-4.3-jelly-bean


【解决方案1】:

KeyStore 中,私钥必须与证书(即使是伪造的自签名证书)一起存储。要将您的密钥存储在AndroidKeyStore 中,您应该按照以下步骤操作:

  1. 解码 Base64 PKCS#8 以获得PrivateKey 实例
  2. Web 服务将证书(或证书链)连同私钥一起发送,或者 PKCS#8 blob 也包含公钥。
  3. 如果需要,您需要为私钥生成证书。 BouncyCastle 库可以做到这一点(可以找到代码示例 here)。

现在您可以将密钥添加到密钥库。

PrivateKey myKey = getKey();
X509Certificate certificate = getCertificate();
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
keystore.setKeyEntry("anAlias", myKey, null, new Certificate[] { certificate });

【讨论】:

    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多