【问题标题】:How to create Android Signing Certificate (keystore JKS file) programmatically instead of using Android Studio?如何以编程方式而不是使用 Android Studio 创建 Android 签名证书(密钥库 JKS 文件)?
【发布时间】:2021-03-25 19:31:31
【问题描述】:

我想在不使用 Android Studio 的情况下以编程方式创建 jks 文件(密钥库)文件(Java/Kotlin JVM 上的一些脚本)。有可能吗?

我有一些代码来创建这个文件,但是如何将所有需要的数据填充到该键?

fun createJksFile() {
    val keyFilePassword = "test"
    val keyAlias = "test"
    val keyPassword = "test"
    val keyValidity = "100"
    val CertificateFirstandLastName = "Test"
    val CertificateOrganizationalUnit = "Test"
    val CertificateOrganization = "Test"
    val CertificateCityorLocality = "US"
    val CertificateStateorProvince = "US"
    val CertificateCountryCode = "US"

    val ks = KeyStore.getInstance(KeyStore.getDefaultType())
    val password = keyFilePassword.toCharArray()
    ks.load(null, password)
    
    // TODO: how to set all needed data?

    FileOutputStream(File(projectDir, "_test_key.jks")).use { fos ->
        ks.store(fos, password)
    }
}

【问题讨论】:

    标签: android keystore android-keystore jks android-signing


    【解决方案1】:

    我决定使用这个解决方案

    val keystoreCommand = "keytool -genkey -noprompt \n" +
            "-alias ${keyStore.keyAlias} \n" +
            "-dname \"CN=${keyStore.certificateFirstandLastName}, OU=${keyStore.certificateOrganizationalUnit}, O=${keyStore.certificateOrganization}, L=${keyStore.certificateCityorLocality}, S=${keyStore.certificateStateorProvince}, C=${keyStore.certificateCountryCode}\" \n" +
            "-keystore \"C:\\Users\\Desktop\\keystore.jks\" \n" +
            "-storepass ${keyStore.keyFilePassword} \n" +
            "-keypass ${keyStore.keyPassword}"
    
    Runtime.getRuntime().exec(keystoreCommand).apply {
        waitFor()
    }
    
    data class KeyStore(
        val keyFilePassword: String,
        val keyAlias: String,
        val keyPassword: String,
        val keyValidity: String,
        val certificateFirstandLastName: String,
        val certificateOrganizationalUnit: String,
        val certificateOrganization: String,
        val certificateCityorLocality: String,
        val certificateStateorProvince: String,
        val certificateCountryCode: String
    )
    

    虽然我们可以在没有 keytool 的情况下做到这一点,但处理 https://stackoverflow.com/a/45700785/7767664 的代码相当多

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2011-06-27
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 2017-07-12
      • 2012-08-05
      相关资源
      最近更新 更多