Android Keystore KeyPairGeneratorSpec从哪里获得X500Principal

时间:2017-06-02 04:28:58

标签: android android-keystore

我正在构建一个密钥库,我将隐藏我的授权并刷新令牌。我在API 19.查看KeyPairGeneratorSpec的示例。大多数示例使用虚拟证书(X500Principal)。我还没有使用证书。我不知道我从哪里得到这个"主题。"这是用于生成签名APK的证书吗? IE https://developer.android.com/studio/publish/app-signing.html
或者我是否从CA这样的团体获得证书?

那说一旦我有了这些数据,我该如何将它转换成这个X500?如何将数据映射到x500?

由于我公司处理应用程序签名的方式,前者会出现问题。我不确定我是否可以访问它。

KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(this)
                        .setAlias(k)
                        .setSubject(new X500Principal("CN=Sample Name, O=Android Authority"))
                        .setSerialNumber(BigInteger.ONE)
                        .setStartDate(start.getTime())
                        .setEndDate(end.getTime())
                        .build();
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");

1 个答案:

答案 0 :(得分:2)

签署您的.apk以便在Google Play商店中分发,并使用AndroidKeyStore加密敏感用户数据是截然不同的。前者使用开发机器上的Java Key Store(jks)(即您的笔记本电脑或台式电脑)进行,而另一个则在安装了应用程序的手机上进行。

您无需获取X500Principal的证书颁发机构。您引用的示例代码是正确的,您只需将其替换为例如您的应用程序名称和组织:

new X500Principal("CN=StarWind, O=StarWindOrganization"); 

如果您想了解不同缩写的含义,请参阅Wikipedia entry for Lightweight Directory Access Protocol,但仅举例来说,“CN”表示“通用名称”,“O”表示组织。您在此处提供的属性仅用于形成唯一条目,就像您在com.starwind.myapp中使用Java形成唯一包名一样。

如果您发现它令人困惑,您可以查看Scytale这是Android KeyStore的包装器。即使你最终没有使用该库,那么代码对于解决如何使用KeyStore非常有用。