簡體   English   中英

如何使用 Android 上的密鑰庫創建證書簽名請求?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM