HarmonyOS鸿蒙Next中在华为手机上安卓app如何获取硬件密钥证明?

HarmonyOS鸿蒙Next中在华为手机上安卓app如何获取硬件密钥证明? 目前获取到的是证明根证书是Google的软件根证书的证明,但我需要生成硬件根证书的证明,这个硬件证明可以不是谷歌的,是华为的也行,关键是能如使用硬件的密钥证明。

问题描述

为更快的帮您定位问题,推荐您用以下模板反馈:

1、出现问题时,您做了哪些操作? 回答:在安卓app中获取密钥证明

2、在哪个步骤出现了问题? 回答:获取到的密钥证明证书链的根证书是Google的软根证书,不是硬件根证书;

3、您希望得到什么结果? 回答:我期望获得的密钥证明是基于硬件根证书的。请给出一个安卓app在华为手机上获取硬件根证书签发的密钥证明的方法以及从哪里获取对应的硬件根证书,是华为的硬件根也行。

4、您实际得到什么结果? 回答:软件根证书;

5、出现故障的手机型号以及操作系统版本? 回答: 型号名称 华为畅享70X 型号代码 BRE-AL80 HarmonyOS版本 4.2.0 序列号 4GJBB24C19011447 863575079608383 IMEI 863575079638380 运行内存 8.0 GB 存储 可用空间:277.51GB 总容量:512GB 屏幕 2700 x 1224 基带版本 21C30SPC306S000C000,21C30SPC30 6S000C000 5.10.43 内核版本 HarmonyOS@localhost #1 Fri Nov 7 10:42:59 CST 2025 参数版本 安全补丁标签 2025年11月1日

6、集成的KIT的SDK的版本? 回答:

7、请附上您出现问题页面的整屏截图; 回答: 密钥证明: -----BEGIN CERTIFICATE----- MIIC2DCCAn6gAwIBAgIBATAKBggqhkjOPQQDAjCBiDELMAkGA1UEBhMCVVMxEzAR BgNVBAgMCkNhbGlmb3JuaWExFTATBgNVBAoMDEdvb2dsZSwgSW5jLjEQMA4GA1UE CwwHQW5kcm9pZDE7MDkGA1UEAwwyQW5kcm9pZCBLZXlzdG9yZSBTb2Z0d2FyZSBB dHRlc3RhdGlvbiBJbnRlcm1lZGlhdGUwHhcNNzAwMTAxMDAwMDAwWhcNNDgwMTAx MDAwMDAwWjAfMR0wGwYDVQQDExRBbmRyb2lkIEtleXN0b3JlIEtleTBZMBMGByqG SM49AgEGCCqGSM49AwEHA0IABFBK2eBRbo8zhdVOOdQpOVhSee21H28tAitvmNuy Rpa7TphJNLtMMSVjaXqe7OmGE2H/9U5FI9NtpAqBKkzsFcqjggE/MIIBOzAOBgNV HQ8BAf8EBAMCA4gwggEnBgorBgEEAdZ5AgERBIIBFzCCARMCAWQKAQACAWQKAQAE FHRlbXBfY2hhbGxlbmdlX2J5dGVzBAAwgeqhCzEJAgECAgEDAgEGogMCAQOjBAIC AQClBTEDAgEEqgMCAQG/g3cCBQC/hT0IAgYBmyuuaKi/hT4DAgEAv4VATDBKBCAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAoBAgQgAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/hUEFAgMB1MC/hUIFAgMDFX6/hUVHBEUw QzEdMBsEFmNvbS5jaGVoZWppYS5jaGpzZWNzZGsCAQExIgQgXfgkuyV9g1jM+LC8 mZbnINE++01jn0SLSeU0bVHuImIwADAKBggqhkjOPQQDAgNIADBFAiEAqF+Fi2i+ QHmcSDyf7gEuRLUXcu9tDredLE+FE15NUyACIGUe6gIxO4PouYloELg/6lHDVWU4 kHGNW4cym+Tu0sqI -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICeDCCAh6gAwIBAgICEAEwCgYIKoZIzj0EAwIwgZgxCzAJBgNVBAYTAlVTMRMw EQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRUwEwYD VQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJvaWQxMzAxBgNVBAMMKkFu ZHJvaWQgS2V5c3RvcmUgU29mdHdhcmUgQXR0ZXN0YXRpb24gUm9vdDAeFw0xNjAx MTEwMDQ2MDlaFw0yNjAxMDgwMDQ2MDlaMIGIMQswCQYDVQQGEwJVUzETMBEGA1UE CAwKQ2FsaWZvcm5pYTEVMBMGA1UECgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdB bmRyb2lkMTswOQYDVQQDDDJBbmRyb2lkIEtleXN0b3JlIFNvZnR3YXJlIEF0dGVz dGF0aW9uIEludGVybWVkaWF0ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOue efhCY1msyyqRTImGzHCtkGaTgqlzJhP+rMv4ISdMIXSXSir+pblNf2bU4GUQZjW8 U7ego6ZxWD7bPhGuEBSjZjBkMB0GA1UdDgQWBBQ//KzWGrE6noEguNUlHMVlux6R qTAfBgNVHSMEGDAWgBTIrel3TEXDo88NFhDkeUM6IVowzzASBgNVHRMBAf8ECDAG AQH/AgEAMA4GA1UdDwEB/wQEAwIChDAKBggqhkjOPQQDAgNIADBFAiBLipt77oK8 wDOHri/AiZi03cONqycqRZ9pDMfDktQPjgIhAO7aAV229DLp1IQ7YkyUBO86fMy9 Xvsiu+f+uXc/WT/7 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIICizCCAjKgAwIBAgIJAKIFntEOQ1tXMAoGCCqGSM49BAMCMIGYMQswCQYDVQQG EwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmll dzEVMBMGA1UECgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdBbmRyb2lkMTMwMQYD VQQDDCpBbmRyb2lkIEtleXN0b3JlIFNvZnR3YXJlIEF0dGVzdGF0aW9uIFJvb3Qw HhcNMTYwMTExMDA0MzUwWhcNMzYwMTA2MDA0MzUwWjCBmDELMAkGA1UEBhMCVVMx EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFTAT BgNVBAoMDEdvb2dsZSwgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEzMDEGA1UEAwwq QW5kcm9pZCBLZXlzdG9yZSBTb2Z0d2FyZSBBdHRlc3RhdGlvbiBSb290MFkwEwYH KoZIzj0CAQYIKoZIzj0DAQcDQgAE7l1ex+HA220Dpn7mthvsTWpdamguD/9/SQ59 dx9EIm29sa/6FsvHrcV30lacqrewLVQBXT5DKyqO107sSHVBpKNjMGEwHQYDVR0O BBYEFMit6XdMRcOjzw0WEOR5QzohWjDPMB8GA1UdIwQYMBaAFMit6XdMRcOjzw0W EOR5QzohWjDPMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgKEMAoGCCqG SM49BAMCA0cAMEQCIDUho++LNEYenNVg8x1YiSBq3KNlQfYNns6KGYxmSGB7AiBN C/NR2TB8fVvaNTQdqEcbY6WFZTytTySn502vQX3xvw== -----END CERTIFICATE-----

获取密钥证明的代码: public static KeyPair generateECKeyPair(String alias, int purpose, String stdName, String digests) { // return null; if (FoglUtils.isEmptyString(alias) || purpose < 0) { return null; } try { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, KEYSTORE_PROVIDER); keyPairGenerator.initialize(new KeyGenParameterSpec.Builder(alias, purpose) .setAlgorithmParameterSpec(new java.security.spec.ECGenParameterSpec(stdName)) .setDigests(digests) .setAttestationChallenge(“temp_challenge_bytes”.getBytes()) .build()); return keyPairGenerator.generateKeyPair(); } catch (InvalidAlgorithmParameterException | NoSuchAlgorithmException | NoSuchProviderException e) { e.printStackTrace(); } return null; }

public static String getKeyAttestation(String alias) { try { // 1. 加载 KeyStore KeyStore keyStore = KeyStore.getInstance(KEYSTORE_PROVIDER); keyStore.load(null); // 2. 获取证书链 Certificate[] chain = keyStore.getCertificateChain(alias); if (chain == null || chain.length == 0) { return null; } // 3. 准备 StringBuilder 用于拼接 StringBuilder pemBuilder = new StringBuilder(); // 4. 遍历证书链 for (Certificate cert : chain) { // 添加头 pemBuilder.append("-----BEGIN CERTIFICATE-----\n"); // 获取证书的 encoded 字节 (DER格式) byte[] encodedCert = cert.getEncoded(); // 进行 Base64 编码 // 使用 MimeEncoder 可以自动每 64 个字符插入换行符,符合 PEM 标准规范 String base64Cert = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { base64Cert = Base64.getMimeEncoder(64, new byte[]{’\n’}) .encodeToString(encodedCert); } pemBuilder.append(base64Cert); // 添加尾 pemBuilder.append("\n-----END CERTIFICATE-----\n"); } // 5. 返回完整的 PEM 字符串 return pemBuilder.toString(); } catch (Exception e) { e.printStackTrace(); return null; } }

8、如果您上传文件失败,请以附件形式提交您的文件。 回答:


更多关于HarmonyOS鸿蒙Next中在华为手机上安卓app如何获取硬件密钥证明?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中,华为手机上的安卓App无法直接获取硬件密钥证明。HarmonyOS Next不再兼容安卓应用,因此安卓App无法调用鸿蒙系统的硬件密钥证明接口。如需使用硬件密钥证明功能,必须将应用开发为鸿蒙原生应用,并使用HarmonyOS提供的安全API。

更多关于HarmonyOS鸿蒙Next中在华为手机上安卓app如何获取硬件密钥证明?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,安卓应用无法直接获取基于华为硬件根证书的密钥证明。这是因为HarmonyOS Next采用了全新的系统架构,不再兼容安卓应用(APK)。您提供的代码和场景是基于安卓兼容框架的,这在HarmonyOS Next上不适用。

对于HarmonyOS Next应用,如果需要使用硬件级密钥证明,应使用HarmonyOS自身的安全能力,具体如下:

  1. 使用KeyChain API:HarmonyOS提供了@ohos.security.certManager@ohos.security.keyChain等Kit来管理密钥和证书。要生成硬件支持的密钥并获得证明,关键在于在生成密钥对时指定正确的参数。
  2. 关键参数设置:在创建非对称密钥生成参数(AsyKeyGenParaSpec)时,必须将secKey属性设置为true。这指示系统在硬件安全环境(如TEE或SE)中生成和保护密钥。
  3. 获取证明:生成硬件密钥后,您可以使用certManager模块的相关接口来获取该密钥的证明证书链。这个证书链的根证书将是华为的硬件根证书,从而证明密钥的硬件安全性。

结论:您无法在HarmonyOS Next上通过安卓API获取华为硬件证明。您需要将应用迁移为HarmonyOS应用,并使用HarmonyOS SDK中提供的安全API来生成硬件密钥并获取相应的证明证书链。

回到顶部