[英]How do you create a Certificate Signing Request using the KeyStore on Android?
我正在使用KeyStore
API 在 Android 應用程序中生成一個 SSL KeyPair。我想從公鑰/私鑰對創建證書簽名請求 (CSR),以便它可以發送到外部 CA 進行簽名。
這可能嗎? 如果可能的話,我想使用內置的 Android 庫而不是 BouncyCastle,以便 Android 安全地存儲密鑰。
檢查此鏈接。 它生成密鑰對和 CSR。 關於在 android 手機上生成 CSR(證書簽名請求),我認為使用 Spongycastle 是相當簡單的。 它是 Bouncycastle 的 android 端口。
您可以使用 Bouncy Castle 來處理 Android KeyStore 中的密鑰。 這並不意味着您必須將 Bouncy Castle 設置為安全提供程序。 包含庫就足夠了:
implementation 'org.bouncycastle:bcpkix-jdk18on:1.72'
注意:海綿城堡已過時。 標准的 Bouncy Castle 庫必須包含在您的 Android 應用程序中。 詳細原因見: https://github.com/rtyley/spongycastle/issues/34
val keyPairGenerator: KeyPairGenerator = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_EC,
"AndroidKeyStore"
)
val keySpecBuilder = KeyGenParameterSpec.Builder(
Constants.clientCertificateKeyAlias,
KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY
).setDigests(KeyProperties.DIGEST_NONE, KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
keyPairGenerator.initialize(keySpecBuilder.build())
val pair = keyPairGenerator.generateKeyPair()
val p10Builder: PKCS10CertificationRequestBuilder = JcaPKCS10CertificationRequestBuilder(
X500Principal("CN=My Client Certificate"), pair.public
)
val csBuilder = JcaContentSignerBuilder("SHA256withECDSA")
val signer: ContentSigner = csBuilder.build(pair.private)
val csr: PKCS10CertificationRequest = p10Builder.build(signer)
val pemObject = PemObject("CERTIFICATE REQUEST", csr.encoded)
val csrAsString = csrAsStringingWriter()
val pemWriter = PEMWriter(csrAsString)
pemWriter.writeObject(pemObject)
pemWriter.close()
csrAsString.close()
Log.v("CSR", "CSR: $csrAsString")
由於 Android 應用程序是使用 Java 構建的,因此您可以使用 Java keytool
工具生成 CSR: 從 CA 請求簽名證書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.