Android Keystore KeyPairGeneratorSpec 我从哪里获得 X500Principal

Android Keystore KeyPairGeneratorSpec Where do I get X500Principal

我正在构建一个密钥库,我将在其中隐藏我的授权和刷新令牌。我在 API 19。查看 KeyPairGeneratorSpec 的示例。大多数示例使用虚拟证书 (X500Principal)。我对证书的工作不多。我不确定我从哪里得到这个 "subject." 这是生成签名 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");

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

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

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

如果您想了解不同缩写的含义,请参阅 Wikipedia entry for Lightweight Directory Access Protocol,但仅举个例子,"CN" 表示 "common name","O" 表示组织。你在这里提供的属性只是为了形成一个唯一的条目,就像你在 Java 中形成一个唯一的包名称一样,比如 com.starwind.myapp.

如果您觉得它令人困惑,您可以查看 Scytale,它是 Android KeyStore 的包装器。即使您最终没有使用该库,其中的代码对于了解如何使用 KeyStore 也非常有用。