Android密钥库KeyPairGeneratorSpec从何处获取X500Principal

Android密钥库KeyPairGeneratorSpec从何处获取X500Principal,android,android-keystore,Android,Android Keystore,我正在构建一个密钥库,我将在其中隐藏授权和刷新令牌。我在API 19上。查看KeyPairGeneratorSpec的示例。大多数示例使用虚拟证书(X500Principal)。我在证书方面做得不多。我不知道从哪里得到这个“主题”。这是生成签名APK时使用的证书吗?IE 或者我可以从CA这样的组织获得证书吗 也就是说,一旦我有了这些数据,如何将其转换为X500?如何将数据映射到x500 前者将是有问题的,因为我的公司处理应用程序签名的方式。我不确定我是否能访问它 跟随 KeyPairGenera

我正在构建一个密钥库,我将在其中隐藏授权和刷新令牌。我在API 19上。查看KeyPairGeneratorSpec的示例。大多数示例使用虚拟证书(X500Principal)。我在证书方面做得不多。我不知道从哪里得到这个“主题”。这是生成签名APK时使用的证书吗?IE
或者我可以从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");

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

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

new X500Principal("CN=StarWind, O=StarWindOrganization"); 
如果您想了解不同缩写的含义,请参阅,但仅举个例子,“CN”表示“通用名称”,而“O”表示组织。这里提供的属性只是为了形成一个唯一的条目,就像在Java中形成一个唯一的包名一样,比如
com.starwind.myapp

如果您感到困惑,您可以看看Android密钥库的包装器。即使您最终没有使用该库,其中的代码对于解决如何使用密钥库也是非常有用的