我想在我的Android设备上生成一个KeyPair,该设备具有根证书作为 Google Hardware Attestation Root Certificate。
我在Android here上的文档中看到,我可以更改自签名证书
对于非对称密钥对,还将生成自签名X.509证书并存储在Android Keystore中。这是因为KeyStore抽象不支持在没有证书的情况下存储密钥对。证书的主题、序列号和有效期可以在此规范中自定义。自签名证书可以在以后被由证书颁发机构(CA)签名的证书替换。
我可以在这里看到,我可以使用keyStore getCertificateChain()
获取与硬件支持的密钥库相关联的X.509证书链
使用KeyStore对象的getCertificateChain()
方法获取对与硬件支持的密钥库关联的X.509证书链的引用。
但是,我还没有找到如何使用 *Google硬件认证根证书 * 更改KeyPair上的证书
private fun generateKeyPairAttestationAndGetPublicKey(): String {
val keyStore = KeyStore.getInstance("AndroidKeyStore")
val keyPairGenerator = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore"
)
keyPairGenerator.initialize(
KeyGenParameterSpec.Builder(
"my-mobile-key",
KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_ENCRYPT
)
.setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
.setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
.build()
)
keyPairGenerator.generateKeyPair()
keyStore.load(null)
val keyEntry = keyStore.getEntry("my-mobile-key", null) as KeyStore.PrivateKeyEntry
val x509Cert = keyEntry.certificate as? X509Certificate ?: throw Exception("Certificate generated by the KeyPair is not a X509Certificate")
}
我怎么能这么做呢?
1条答案
按热度按时间6mw9ycah1#
您是正确的,当在Android Keystore中生成非对称密钥对时,它将自动为该密钥对创建自签名证书。要将其替换为链接到Google硬件认证根的证书,您需要:
1.生成密钥对,就像您在代码段中所做的那样。
1.为生成的私钥获取证书签名请求(CSR):
1.将CSR发送到您的Google Cloud帐户或第三方CA进行签名。它们将返回链接到硬件证明根的证书。
1.将签名的证书链导入密钥库:
现在,当您检索条目时,它将包含Google签名的证书,而不是自签名的证书。
关键部分是获取生成的密钥对的CSR,并将自签名证书替换为Google签名的证书。让我知道这是否有助于解释这个过程!