鸿蒙应用签名实操及机制探究
0x00 背景
华为鸿蒙单框架操作系统HarmonyOS NEXT已于2024年10月23日正式发布Release版。HarmonyOSNEXT仅支持鸿蒙原生应用,不再兼容安卓。本文对鸿蒙公开资料进行了深入分析和解读,梳理了鸿蒙单框架应用的签名机制,拆解每一步的实操过程和背后的实现原理,并对源码分析整理签名的校验机制。从中管中窥豹,探究鸿蒙系统的安全设计思路,给从事鸿蒙研发的同学提供一些借鉴。
生成开发者签名证书,包括①、② 、③。 生成Profile文件,包括④ 、⑤ 。 生成签名的App,包括⑥ 、⑦。
1.生成开发者签名证书
openssl asn1parse -in my.p12 -inform DER //解码DER和解析ASN.1openssl pkcs12 -info -in my.p12 //查看公钥证书和私钥信息
-----BEGIN CERTIFICATE-----MIIBqTCCAU+gAwIBAgIIKG2ih6j2GSswCgYIKoZIzj0EAwIwSTEJMAcGA1UEBhMAMQkwBwYDVQQIEwAxCTAHBgNVBAcTADEJMAcGA1UEChMAMQkwBwYDVQQLEwAxEDAOBgNVBAMTB3Rlc3RzY3IwHhcNMjQwOTIzMTI1NjM3WhcNNDkwOTE3MTI1NjM3WjBJMQkwBwYDVQQGEwAxCTAHBgNVBAgTADEJMAcGA1UEBxMAMQkwBwYDVQQKEwAxCTAHBgNVBAsTADEQMA4GA1UEAxMHdGVzdHNjcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD28s78rF8+X1JWgkQcfHB2Gy20MCT51Oue6eG5ZbPsUKlZrPx0aRX0einL2E5WsE3st0zI4yvj0KzhdEwksCWCjITAfMB0GA1UdDgQWBBRtCEWMjEr+bnXoAqSCfjmk1btJQDAKBggqhkjOPQQDAgNIADBFAiAAiMtQXgCMUxrKtaPKvGqllswi1FRUh1brCAbJ1t81FgIhAMXbzmeJlA7/zxZDULLRW0rCY6CU3KMDHr8N38EmuDug-----END CERTIFICATE-----
openssl x509 -in my.pem -text -noout
Certificate:Data:Version: 3 (0x2) //证书的版本号Serial Number: 2913163237517564203 (0x286da287a8f6192b) //证书的序列号,用于唯一标识证书Signature Algorithm: ecdsa-with-SHA256Issuer: C = , ST = , L = , O = , OU = , CN = testscr //证书颁发者的信息ValidityNot Before: Sep 23 12:56:37 2024 GMT //证书的开始有效期Not After : Sep 17 12:56:37 2049 GMT //证书的结束有效期Subject: C = , ST = , L = , O = , OU = , CN = testscr //证书持有者的信息Subject Public Key Info:Public Key Algorithm: id-ecPublicKey //公钥算法,这里是椭圆曲线Public-Key: (256 bit) //公钥的位数,这里是256pub:// 证书持有者的公钥值,以十六进制表示04:3d:bc:b3:bf:2b:17:cf:97:d4:95:a0:91:07:1f:1c:1d:86:cb:6d:0c:09:3e:75:3a:e7:ba:78:6e:59:6c:fb:14:2a:56:6b:3f:1d:1a:45:7d:1e:8a:72:f6:13:95:ac:13:7b:2d:d3:32:38:ca:f8:f4:2b:38:5d:13:09:2c:09:60ASN1 OID: prime256v1NIST CURVE: P-256X509v3 extensions:X509v3 Subject Key Identifier: //证书持有者的标识6D:08:45:8C:8C:4A:FE:6E:75:E8:02:A4:82:7E:39:A4:D5:BB:49:40Signature Algorithm: ecdsa-with-SHA256Signature Value: //证书的数字签名值30:45:02:20:00:88:cb:50:5e:00:8c:53:1a:ca:b5:a3:ca:bc:6a:a5:96:cc:22:d4:54:54:87:56:eb:08:06:c9:d6:df:35:16:02:21:00:c5:db:ce:67:89:94:0e:ff:cf:16:43:50:b2:d1:5b:4a:c2:63:a0:94:dc:a3:03:1e:bf:0d:df:c1:26:b8:3b:a0
For CA certificates, subject key identifiers SHOULD be derived from the public key or a method that generates unique values. Two common methods for generating key identifiers from the public key are: (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the value of the BIT STRING subjectPublicKey (excluding the tag, length, and number of unused bits). (2) The keyIdentifier is composed of a four bit type field with the value 0100 followed by the least significant 60 bits of the SHA-1 hash of the value of the BIT STRING subjectPublicKey (excluding the tag, length, and number of unused bit string bits).
openssl x509 -in my.pem -pubkey -noout
-----BEGIN PUBLIC KEY----- //公钥标头MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE95zFs5cFHauzIYEuuw3g2R75a1irqEW0JWP9qAKkyVCizN0nnzcn/Fo5oeSZR1iPUnJvjlnpNvZL9BcQbLqa7g==-----END PUBLIC KEY-----
openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
openssl x509 -in my.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
fzyRjPvTPElBAj0VlYlVA74M3RMtUh5ljKbOYf1NDA0=
-----BEGIN NEW CERTIFICATE REQUEST----- //CSR标头MIIBMzCB2wIBADBJMQkwBwYDVQQGEwAxCTAHBgNVBAgTADEJMAcGA1UEBxMAMQkwBwYDVQQKEwAxCTAHBgNVBAsTADEQMA4GA1UEAxMHdGVzdHNjcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD28s78rF8+X1JWgkQcfHB2Gy20MCT51Oue6eG5ZbPsUKlZrPx0aRX0einL2E5WsE3st0zI4yvj0KzhdEwksCWCgMDAuBgkqhkiG9w0BCQ4xITAfMB0GA1UdDgQWBBRtCEWMjEr+bnXoAqSCfjmk1btJQDAKBggqhkjOPQQDAgNHADBEAiAlzkRf0AHKh59/deFGo/4JHQRSbw6P+Q7qsiiMMWHT7wIgGugWrCm7tFLhmRjEEyJNOpen9kfhyOanSRrwtBlEFc0=-----END NEW CERTIFICATE REQUEST-----
openssl req -text -noout -verify -in my.csr
Certificate request self-signature verify OK //表明CSR的自签名已成功验证Certificate Request:Data:Version: 1 (0x0)Subject: C = , ST = , L = , O = , OU = , CN = testscr //证书申请者的信息Subject Public Key Info:Public Key Algorithm: id-ecPublicKeyPublic-Key: (256 bit)pub: //证书申请者的公钥值,和上面my.pem里的公钥值相同04:3d:bc:b3:bf:2b:17:cf:97:d4:95:a0:91:07:1f:1c:1d:86:cb:6d:0c:09:3e:75:3a:e7:ba:78:6e:59:6c:fb:14:2a:56:6b:3f:1d:1a:45:7d:1e:8a:72:f6:13:95:ac:13:7b:2d:d3:32:38:ca:f8:f4:2b:38:5d:13:09:2c:09:60ASN1 OID: prime256v1NIST CURVE: P-256Attributes:Requested Extensions:X509v3 Subject Key Identifier: //证书申请者的标识6D:08:45:8C:8C:4A:FE:6E:75:E8:02:A4:82:7E:39:A4:D5:BB:49:40Signature Algorithm: ecdsa-with-SHA256Signature Value:30:44:02:20:25:ce:44:5f:d0:01:ca:87:9f:7f:75:e1:46:a3:fe:09:1d:04:52:6f:0e:8f:f9:0e:ea:b2:28:8c:31:61:d3:ef:02:20:1a:e8:16:ac:29:bb:b4:52:e1:99:18:c4:13:22:4d:3a:97:a7:f6:47:e1:c8:e6:a7:49:1a:f0:b4:19:44:15:cd
openssl req -in my.csr -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
fzyRjPvTPElBAj0VlYlVA74M3RMtUh5ljKbOYf1NDA0=
颁发者(Issuer)说:持有者(Subject)的公钥是某某某。
叶子证书由中间证书颁发(即叶子证书的Issuer+AKID和中间证书的Subject+SKID相同) 中间证书由根证书颁发(即中间证书的Issuer+AKID和根证书的Subject+SKID相同) 根证书由自己颁发(也就是自签名,根证书的Issuer和Subject相同)
-----BEGIN CERTIFICATE-----MIICGjCCAaGgAwIBAgIIShhpn519jNAwCgYIKoZIzj0EAwMwUzELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UEAwwVSHVhd2VpIENCRyBSb290IENBIEcyMB4XDTIwMDMxNjAzMDQzOVoXDTQ5MDMxNjAzMDQzOVowUzELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UEAwwVSHVhd2VpIENCRyBSb290IENBIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWidkGnDSOw3/HE2y2GHl+fpWBIa5S+IlnNrsGUvwC1I2QWvtqCHWmwFlFK95zKXiM8s9yV3VVXh7ivN8ZJO3SC5N1TCrvB2lpHMBwcz4DA0kgHCMm/wDec6kOHx1xvCRo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUo45a9Vq8cYwqaiVyfkiS4pLcIAAwCgYIKoZIzj0EAwMDZwAwZAIwMypeB7P0IbY7c6gpWcClhRznOJFj8uavrNu2PIoz9KIqr3jnBlBHJs0myI7ntYpEAjBbm8eDMZY5zq5iMZUC6H7UzYSix4Uy1YlsLVV738PtKP9hFTjgDHctXJlC5L7+ZDY=-----END CERTIFICATE----------BEGIN CERTIFICATE-----MIIDATCCAoigAwIBAgIIXmuDXbWpOB8wCgYIKoZIzj0EAwMwUzELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UEAwwVSHVhd2VpIENCRyBSb290IENBIEcyMB4XDTIwMDcwOTAyMDQyNFoXDTMwMDcwNzAyMDQyNFowYjELMAkGA1UEBgwCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEtMCsGA1UEAwwkSHVhd2VpIENCRyBEZXZlbG9wZXIgUmVsYXRpb25zIENBIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE65LdoIZh1hlpZ2gPbJ6gPhHsvYSRe22KETgdqeVeYnrbRHI9wsPT6RGYS+pU4mPl6wxzgDMqN6SY/BoZluhkE1PzaHoPoNIWIq0O33hpyKyyYwAacIUEjYurkw1E9r9no4IBGDCCARQwHwYDVR0jBBgwFoAUo45a9Vq8cYwqaiVyfkiS4pLcIAAwHQYDVR0OBBYEFNtek7Ij6NDk/nF6Zumkc0dbf/NeMEYGA1UdIAQ/MD0wOwYEVR0gADAzMDEGCCsGAQUFBwIBFiVodHRwOi8vY3BraS1jYXdlYi5odWF3ZWkuY29tL2Nwa2kvY3BzMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMGYGA1UdHwRfMF0wW6BZoFeGVWh0dHA6Ly9jcGtpLWNhd2ViLmh1YXdlaS5jb20vY3BraS9zZXJ2bGV0L2NybEZpbGVEb3duLmNybD9jZXJ0eXBlPTEwJi9yb290X2cyX2NybC5jcmwwCgYIKoZIzj0EAwMDZwAwZAIwWO1X5q2MdfpR1Q237GpUHGbL1C13rGyFg2p3AYo44FpZ2/A9ss0wOHKM4KDlZPqdAjBLkf8NPZy7KVog98+iCTLq35DJ2ZVxkCxknA9YhiHVyXf4HPm4JlT7rW7oQ+FzM3c=-----END CERTIFICATE----------BEGIN CERTIFICATE-----MIICujCCAkGgAwIBAgIOY8ui/vvwxqFf+kFokYUwCgYIKoZIzj0EAwMwYjELMAkGA1UEBgwCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEtMCsGA1UEAwwkSHVhd2VpIENCRyBEZXZlbG9wZXIgUmVsYXRpb25zIENBIEcyMB4XDTI0MDkyMzEyNTgwNFoXDTI3MDkyMzEyNTgwNFowazELMAkGA1UEBhMCQ04xDzANBgNVBAoMBuW8oOaZqDEcMBoGA1UECwwTMTI4OTY3Njc4NjA2NTQ5NDk3NzEtMCsGA1UEAwwk5byg5pmoKDEyODk2NzY3ODYwNjU0OTQ5NzcpXCxSZWxlYXNlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPbyzvysXz5fUlaCRBx8cHYbLbQwJPnU657p4blls+xQqVms/HRpFfR6KcvYTlawTey3TMjjK+PQrOF0TCSwJYKOB0TCBzjAMBgNVHRMBAf8EAjAAMFkGA1UdHwRSMFAwTqBMoEqGSGh0dHA6Ly9oNWhvc3RpbmctZHJjbi5kYmFua2Nkbi5jbi9jY2g1L2NybC9oZHJjYWcyL0h1YXdlaUNCR0hEUkcyY3JsLmNybDAfBgNVHSMEGDAWgBTbXpOyI+jQ5P5xembppHNHW3/zXjAdBgNVHQ4EFgQUbQhFjIxK/m516AKkgn45pNW7SUAwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMAoGCCqGSM49BAMDA2cAMGQCMFzNlsafNs7ad5xelZOzCebdRofEVaQZJW0o5QAdTX0t9Ij1o/zUm0bXIf8ZZTJLYgIwKuuZu+LeLCLZJFEM7tYKDhIKTegCiesP1THuMgiZhZYOYl1kIZBPVrEB8O1wtxEm-----END CERTIFICATE-----
Certificate:Data:Version: 3 (0x2)Serial Number: 5339133492510690512 (0x4a18699f9d7d8cd0)Signature Algorithm: ecdsa-with-SHA384Issuer: C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Root CA G2ValidityNot Before: Mar 16 03:04:39 2020 GMTNot After : Mar 16 03:04:39 2049 GMTSubject: C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Root CA G2Subject Public Key Info:Public Key Algorithm: id-ecPublicKeyPublic-Key: (384 bit)pub:04:5a:27:64:1a:70:d2:3b:0d:ff:1c:4d:b2:d8:61:e5:f9:fa:56:04:86:b9:4b:e2:25:9c:da:ec:19:4b:f0:0b:52:36:41:6b:ed:a8:21:d6:9b:01:65:14:af:79:cc:a5:e2:33:cb:3d:c9:5d:d5:55:78:7b:8a:f3:7c:64:93:b7:48:2e:4d:d5:30:ab:bc:1d:a5:a4:73:01:c1:cc:f8:0c:0d:24:80:70:8c:9b:fc:03:79:ce:a4:38:7c:75:c6:f0:91ASN1 OID: secp384r1NIST CURVE: P-384X509v3 extensions:X509v3 Key Usage: criticalCertificate Sign, CRL SignX509v3 Basic Constraints: criticalCA:TRUEX509v3 Subject Key Identifier:A3:8E:5A:F5:5A:BC:71:8C:2A:6A:25:72:7E:48:92:E2:92:DC:20:00Signature Algorithm: ecdsa-with-SHA384Signature Value:30:64:02:30:33:2a:5e:07:b3:f4:21:b6:3b:73:a8:29:59:c0:a5:85:1c:e7:38:91:63:f2:e6:af:ac:db:b6:3c:8a:33:f4:a2:2a:af:78:e7:06:50:47:26:cd:26:c8:8e:e7:b5:8a:44:02:30:5b:9b:c7:83:31:96:39:ce:ae:62:31:95:02:e8:7e:d4:cd:84:a2:c7:85:32:d5:89:6c:2d:55:7b:df:c3:ed:28:ff:61:15:38:e0:0c:77:2d:5c:99:42:e4:be:fe:64:36
Certificate:Data:Version: 3 (0x2)Serial Number: 6803676100576229407 (0x5e6b835db5a9381f)Signature Algorithm: ecdsa-with-SHA384Issuer: C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Root CA G2ValidityNot Before: Jul 9 02:04:24 2020 GMTNot After : Jul 7 02:04:24 2030 GMTSubject: C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Developer Relations CA G2Subject Public Key Info:Public Key Algorithm: id-ecPublicKeyPublic-Key: (384 bit)pub:04:eb:92:dd:a0:86:61:d6:19:69:67:68:0f:6c:9e:a0:3e:11:ec:bd:84:91:7b:6d:8a:11:38:1d:a9:e5:5e:62:7a:db:44:72:3d:c2:c3:d3:e9:11:98:4b:ea:54:e2:63:e5:eb:0c:73:80:33:2a:37:a4:98:fc:1a:19:96:e8:64:13:53:f3:68:7a:0f:a0:d2:16:22:ad:0e:df:78:69:c8:ac:b2:63:00:1a:70:85:04:8d:8b:ab:93:0d:44:f6:bf:67ASN1 OID: secp384r1NIST CURVE: P-384X509v3 extensions:X509v3 Authority Key Identifier:A3:8E:5A:F5:5A:BC:71:8C:2A:6A:25:72:7E:48:92:E2:92:DC:20:00X509v3 Subject Key Identifier:DB:5E:93:B2:23:E8:D0:E4:FE:71:7A:66:E9:A4:73:47:5B:7F:F3:5EX509v3 Certificate Policies:Policy: X509v3 Any PolicyCPS: http://cpki-caweb.huawei.com/cpki/cpsX509v3 Basic Constraints: criticalCA:TRUE, pathlen:0X509v3 Key Usage: criticalCertificate Sign, CRL SignX509v3 CRL Distribution Points:Full Name:URI:http://cpki-caweb.huawei.com/cpki/servlet/crlFileDown.crl?certype=10&/root_g2_crl.crlSignature Algorithm: ecdsa-with-SHA384Signature Value:30:64:02:30:58:ed:57:e6:ad:8c:75:fa:51:d5:0d:b7:ec:6a:54:1c:66:cb:d4:2d:77:ac:6c:85:83:6a:77:01:8a:38:e0:5a:59:db:f0:3d:b2:cd:30:38:72:8c:e0:a0:e5:64:fa:9d:02:30:4b:91:ff:0d:3d:9c:bb:29:5a:20:f7:cf:a2:09:32:ea:df:90:c9:d9:95:71:90:2c:64:9c:0f:58:86:21:d5:c9:77:f8:1c:f9:b8:26:54:fb:ad:6e:e8:43:e1:73:33:77
Certificate:Data:Version: 3 (0x2)Serial Number:63:cb:a2:fe:fb:f0:c6:a1:5f:fa:41:68:91:85Signature Algorithm: ecdsa-with-SHA384Issuer: C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Developer Relations CA G2ValidityNot Before: Sep 23 12:58:04 2024 GMTNot After : Sep 23 12:58:04 2027 GMTSubject: C = CN, O = \E5\BC\A0\E6\99\A8, OU = 1289676786065494977, CN = "\E5\BC\A0\E6\99\A8(1289676786065494977)\\,Release"Subject Public Key Info:Public Key Algorithm: id-ecPublicKeyPublic-Key: (256 bit)pub:04:3d:bc:b3:bf:2b:17:cf:97:d4:95:a0:91:07:1f:1c:1d:86:cb:6d:0c:09:3e:75:3a:e7:ba:78:6e:59:6c:fb:14:2a:56:6b:3f:1d:1a:45:7d:1e:8a:72:f6:13:95:ac:13:7b:2d:d3:32:38:ca:f8:f4:2b:38:5d:13:09:2c:09:60ASN1 OID: prime256v1NIST CURVE: P-256X509v3 extensions:X509v3 Basic Constraints: criticalCA:FALSEX509v3 CRL Distribution Points:Full Name:URI:http://h5hosting-drcn.dbankcdn.cn/cch5/crl/hdrcag2/HuaweiCBGHDRG2crl.crlX509v3 Authority Key Identifier:DB:5E:93:B2:23:E8:D0:E4:FE:71:7A:66:E9:A4:73:47:5B:7F:F3:5EX509v3 Subject Key Identifier:6D:08:45:8C:8C:4A:FE:6E:75:E8:02:A4:82:7E:39:A4:D5:BB:49:40X509v3 Key Usage: criticalDigital SignatureX509v3 Extended Key Usage:Code SigningSignature Algorithm: ecdsa-with-SHA384Signature Value:30:64:02:30:5c:cd:96:c6:9f:36:ce:da:77:9c:5e:95:93:b3:09:e6:dd:46:87:c4:55:a4:19:25:6d:28:e5:00:1d:4d:7d:2d:f4:88:f5:a3:fc:d4:9b:46:d7:21:ff:19:65:32:4b:62:02:30:2a:eb:99:bb:e2:de:2c:22:d9:24:51:0c:ee:d6:0a:0e:12:0a:4d:e8:02:89:eb:0f:d5:31:ee:32:08:99:85:96:0e:62:5d:64:21:90:4f:56:b1:01:f0:ed:70:b7:11:26
Subject: C = CN, O = \E5\BC\A0\E6\99\A8, OU = 1289676786065494977, CN = "\E5\BC\A0\E6\99\A8(1289676786065494977)\\,Release"
Subject: C = , ST = , L = , O = , OU = , CN = testscr
2.生成Profile文件
openssl pkcs7 -in my.p7b -print -inform DER
openssl smime -verify -in my.p7b -inform DER -noverify //查看配置信息openssl pkcs7 -in my.p7b -print_certs -inform DER //查看证书信息
{"version-name": "2.0.0","version-code": 2,"app-distribution-type": "app_gallery","uuid": "234e1d73-****-****-****-f81e2598d0ff","validity": {"not-before": 1727096284,"not-after": 1821704284},"type": "release","bundle-info": {"developer-id": "300**********7916","distribution-certificate": "-----BEGIN CERTIFICATE-----\nMIICujCCAkGgAwIBAgIOY8ui/vvwxqFf+kFokYUwCgYIKoZIzj0EAwMwYjELMAkG\nA1UEBgwCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEt\nMCsGA1UEAwwkSHVhd2VpIENCRyBEZXZlbG9wZXIgUmVsYXRpb25zIENBIEcyMB4X\nDTI0MDkyMzEyNTgwNFoXDTI3MDkyMzEyNTgwNFowazELMAkGA1UEBhMCQ04xDzAN\nBgNVBAoMBuW8oOaZqDEcMBoGA1UECwwTMTI4OTY3Njc4NjA2NTQ5NDk3NzEtMCsG\nA1UEAwwk5byg5pmoKDEyODk2NzY3ODYwNjU0OTQ5NzcpXCxSZWxlYXNlMFkwEwYH\nKoZIzj0CAQYIKoZIzj0DAQcDQgAEPbyzvysXz5fUlaCRBx8cHYbLbQwJPnU657p4\nblls+xQqVms/HRpFfR6KcvYTlawTey3TMjjK+PQrOF0TCSwJYKOB0TCBzjAMBgNV\nHRMBAf8EAjAAMFkGA1UdHwRSMFAwTqBMoEqGSGh0dHA6Ly9oNWhvc3RpbmctZHJj\nbi5kYmFua2Nkbi5jbi9jY2g1L2NybC9oZHJjYWcyL0h1YXdlaUNCR0hEUkcyY3Js\nLmNybDAfBgNVHSMEGDAWgBTbXpOyI+jQ5P5xembppHNHW3/zXjAdBgNVHQ4EFgQU\nbQhFjIxK/m516AKkgn45pNW7SUAwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoG\nCCsGAQUFBwMDMAoGCCqGSM49BAMDA2cAMGQCMFzNlsafNs7ad5xelZOzCebdRofE\nVaQZJW0o5QAdTX0t9Ij1o/zUm0bXIf8ZZTJLYgIwKuuZu+LeLCLZJFEM7tYKDhIK\nTegCiesP1THuMgiZhZYOYl1kIZBPVrEB8O1wtxEm\n-----END CERTIFICATE-----\n","bundle-name": "com.***.test","apl": "normal","app-feature": "hos_normal_app","app-identifier": "576************2509"},"baseapp-info": {},"permissions": {},"acls": {},"issuer": "app_gallery"}
| ||
subject=C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Root CA G2issuer=C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Root CA G2-----BEGIN CERTIFICATE-----MIICGjCCAaGgAwIBAgIIShhpn519jNAwCgYIKoZIzj0EAwMwUzELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UEAwwVSHVhd2VpIENCRyBSb290IENBIEcyMB4XDTIwMDMxNjAzMDQzOVoXDTQ5MDMxNjAzMDQzOVowUzELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UEAwwVSHVhd2VpIENCRyBSb290IENBIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWidkGnDSOw3/HE2y2GHl+fpWBIa5S+IlnNrsGUvwC1I2QWvtqCHWmwFlFK95zKXiM8s9yV3VVXh7ivN8ZJO3SC5N1TCrvB2lpHMBwcz4DA0kgHCMm/wDec6kOHx1xvCRo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUo45a9Vq8cYwqaiVyfkiS4pLcIAAwCgYIKoZIzj0EAwMDZwAwZAIwMypeB7P0IbY7c6gpWcClhRznOJFj8uavrNu2PIoz9KIqr3jnBlBHJs0myI7ntYpEAjBbm8eDMZY5zq5iMZUC6H7UzYSix4Uy1YlsLVV738PtKP9hFTjgDHctXJlC5L7+ZDY=-----END CERTIFICATE-----subject=C = CN, O = Huawei, OU = HOS AppGallery, CN = HOS Profile Managementissuer=C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Software Signing Service CA-----BEGIN CERTIFICATE-----MIIC7TCCAnOgAwIBAgIIV5nKqt2oGmwwCgYIKoZIzj0EAwMwZDELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEvMC0GA1UEAwwmSHVhd2VpIENCRyBTb2Z0d2FyZSBTaWduaW5nIFNlcnZpY2UgQ0EwHhcNMjMwNDI0MDYyNjMxWhcNMjgwNDI0MDYyNjMxWjBYMQswCQYDVQQGDAJDTjEPMA0GA1UECgwGSHVhd2VpMRcwFQYDVQQLDA5IT1MgQXBwR2FsbGVyeTEfMB0GA1UEAwwWSE9TIFByb2ZpbGUgTWFuYWdlbWVudDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDdY3RoPqb6WD8UpXJiavZLN48iamektKUKZHFl9xwr1Siu77z3lI86cREa3Flw50uKcxkMNKM4FWBRMd3CDhI+jggEZMIIBFTAfBgNVHSMEGDAWgBT69fe+IFZdXdTabfEUFTwdCduyNDAdBgNVHQ4EFgQU0a99kztpYeCetotz0YIduJ2I2VcwRgYDVR0gBD8wPTA7BgRVHSAAMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly9wa2kuY29uc3VtZXIuaHVhd2VpLmNvbS9jYS9jcHMwDgYDVR0PAQH/BAQDAgeAMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuY29uc3VtZXIuaHVhd2VpLmNvbS9jYS9jcmwvc29mdF9zaWduX3Nydl9jcmwuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMDMBgGDCsGAQQBj1sCgngBAwQIMAYCAQEKAQEwCgYIKoZIzj0EAwMDaAAwZQIwRYOlQ6Qq2SF8LHQ78xpNYh47zMemerx5oG4F6Uq/3ARPfowvdrEu5Ss+njPMG0FFAjEA0s7YhO7Ktm60mkuHuxQS46fqIHh/PAPJ2ozg1yDSD771bAGn7mDeGjaAFXEtKzU5-----END CERTIFICATE-----subject=C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Software Signing Service CAissuer=C = CN, O = Huawei, OU = Huawei CBG, CN = Huawei CBG Root CA G2-----BEGIN CERTIFICATE-----MIIDADCCAoegAwIBAgIIJGDixWQS3MkwCgYIKoZIzj0EAwMwUzELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UEAwwVSHVhd2VpIENCRyBSb290IENBIEcyMB4XDTIwMDMxNjEyMzIzOVoXDTQwMDMxNjEyMzIzOVowZDELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEvMC0GA1UEAwwmSHVhd2VpIENCRyBTb2Z0d2FyZSBTaWduaW5nIFNlcnZpY2UgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASsEz7cwYkzFh9bxIwKfXx5qHGjl5WITy0teGnNWqv+jYCceeixHqErvK7YRn2hVPIqhRqKWeANHZUKG0qxi+NIpmSmQS8/63CLz1QAcxfv2Xl3/V82dF0v9lm16ehMsN+jggEVMIIBETAfBgNVHSMEGDAWgBSjjlr1WrxxjCpqJXJ+SJLiktwgADAdBgNVHQ4EFgQU+vX3viBWXV3U2m3xFBU8HQnbsjQwDwYDVR0TAQH/BAUwAwEB/zBGBgNVHSAEPzA9MDsGBFUdIAAwMzAxBggrBgEFBQcCARYlaHR0cDovL2Nwa2ktY2F3ZWIuaHVhd2VpLmNvbS9jcGtpL2NwczAOBgNVHQ8BAf8EBAMCAQYwZgYDVR0fBF8wXTBboFmgV4ZVaHR0cDovL2Nwa2ktY2F3ZWIuaHVhd2VpLmNvbS9jcGtpL3NlcnZsZXQvY3JsRmlsZURvd24uY3JsP2NlcnR5cGU9MTAmL3Jvb3RfZzJfY3JsLmNybDAKBggqhkjOPQQDAwNnADBkAjBrAQQxUlNgqhYkcEm5eksnPxDkPJSY/qNd2BDgbvEydiLwPSvB7Z9lipxz8ikZEeUCMGppWcaV//SIG1y5tEwthLwWeEaF613vUILWQLir8+CA3RZGsRBqtE8xSqfzyafLYQ==-----END CERTIFICATE-----
3.生成签名的APP
/*** The value of lower 8 bytes of magic word*/public static final long HAP_SIG_BLOCK_MAGIC_LO_V3 = 0x676973207061683cL;/*** The value of higher 8 bytes of magic word*/public static final long HAP_SIG_BLOCK_MAGIC_HI_V3 = 0x3e6b636f6c62206eL;/*** Size of hap signature block header*/public static final int HAP_SIG_BLOCK_HEADER_SIZE = 32;
/*** ID of profile block*/public static final int HAP_PROFILE_BLOCK_ID = 0x20000002;
java -jar hap-sign-tool.jar verify-app -inFile my-signed.app -outCertChain my-signed.cer -outProfile my-signed.p7b
CN=HOS AppGallery Application Release, OU=HOS AppGallery, O=Huawei, C=CN-----BEGIN CERTIFICATE-----MIIC+TCCAn+gAwIBAgIIWXsBFAJOQzIwCgYIKoZIzj0EAwMwZDELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEvMC0GA1UEAwwmSHVhd2VpIENCRyBTb2Z0d2FyZSBTaWduaW5nIFNlcnZpY2UgQ0EwHhcNMjMwNDI0MDYyMjA1WhcNMjgwNDI0MDYyMjA1WjBkMQswCQYDVQQGDAJDTjEPMA0GA1UECgwGSHVhd2VpMRcwFQYDVQQLDA5IT1MgQXBwR2FsbGVyeTErMCkGA1UEAwwiSE9TIEFwcEdhbGxlcnkgQXBwbGljYXRpb24gUmVsZWFzZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIokjn9tVRpgEC6b1AR9chiiejUGBiF83Lzm1giyZX9XKVzTPkHqRRuML+zhRtT1JESEMOUggPyJbe9+rt3k9CijggEZMIIBFTAfBgNVHSMEGDAWgBT69fe+IFZdXdTabfEUFTwdCduyNDAdBgNVHQ4EFgQUFzRtDLYZ7zX/idRsHYmJZ734vwgwRgYDVR0gBD8wPTA7BgRVHSAAMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly9wa2kuY29uc3VtZXIuaHVhd2VpLmNvbS9jYS9jcHMwDgYDVR0PAQH/BAQDAgeAMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuY29uc3VtZXIuaHVhd2VpLmNvbS9jYS9jcmwvc29mdF9zaWduX3Nydl9jcmwuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMDMBgGDCsGAQQBj1sCgngBAwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaAAwZQIxAJofyGQW4ZVDW64qTeiVQVn5w7iRhejP6YFqYX9h/5mNXKMQ8ZuQCFT7EaqhVblWlQIwWIPBxC+YhPz6JmDMSZDynZINnXi0T3k9UvbcCybbd2k2PWHYvYqQdKAuYGcNc2Ho-----END CERTIFICATE-----CN=Huawei CBG Software Signing Service CA, OU=Huawei CBG, O=Huawei, C=CN-----BEGIN CERTIFICATE-----MIIDADCCAoegAwIBAgIIJGDixWQS3MkwCgYIKoZIzj0EAwMwUzELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UEAwwVSHVhd2VpIENCRyBSb290IENBIEcyMB4XDTIwMDMxNjEyMzIzOVoXDTQwMDMxNjEyMzIzOVowZDELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEvMC0GA1UEAwwmSHVhd2VpIENCRyBTb2Z0d2FyZSBTaWduaW5nIFNlcnZpY2UgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASsEz7cwYkzFh9bxIwKfXx5qHGjl5WITy0teGnNWqv+jYCceeixHqErvK7YRn2hVPIqhRqKWeANHZUKG0qxi+NIpmSmQS8/63CLz1QAcxfv2Xl3/V82dF0v9lm16ehMsN+jggEVMIIBETAfBgNVHSMEGDAWgBSjjlr1WrxxjCpqJXJ+SJLiktwgADAdBgNVHQ4EFgQU+vX3viBWXV3U2m3xFBU8HQnbsjQwDwYDVR0TAQH/BAUwAwEB/zBGBgNVHSAEPzA9MDsGBFUdIAAwMzAxBggrBgEFBQcCARYlaHR0cDovL2Nwa2ktY2F3ZWIuaHVhd2VpLmNvbS9jcGtpL2NwczAOBgNVHQ8BAf8EBAMCAQYwZgYDVR0fBF8wXTBboFmgV4ZVaHR0cDovL2Nwa2ktY2F3ZWIuaHVhd2VpLmNvbS9jcGtpL3NlcnZsZXQvY3JsRmlsZURvd24uY3JsP2NlcnR5cGU9MTAmL3Jvb3RfZzJfY3JsLmNybDAKBggqhkjOPQQDAwNnADBkAjBrAQQxUlNgqhYkcEm5eksnPxDkPJSY/qNd2BDgbvEydiLwPSvB7Z9lipxz8ikZEeUCMGppWcaV//SIG1y5tEwthLwWeEaF613vUILWQLir8+CA3RZGsRBqtE8xSqfzyafLYQ==-----END CERTIFICATE-----
SignatureSchemeBlock区校验。 Profile校验和解析。 Hap包完整性校验。
1.SignatureSchemeBlock区校验
/system/etc/security/trusted_root_ca.json
{"C=CN, O=Huawei, OU=Huawei CBG, CN=Huawei CBG Root CA G2":"-----BEGIN CERTIFICATE-----\nMIICGjCCAaGgAwIBAgIIShhpn519jNAwCgYIKoZIzj0EAwMwUzELMAkGA1UEBhMC\nQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEeMBwGA1UE\nAwwVSHVhd2VpIENCRyBSb290IENBIEcyMB4XDTIwMDMxNjAzMDQzOVoXDTQ5MDMx\nNjAzMDQzOVowUzELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UE\nCwwKSHVhd2VpIENCRzEeMBwGA1UEAwwVSHVhd2VpIENCRyBSb290IENBIEcyMHYw\nEAYHKoZIzj0CAQYFK4EEACIDYgAEWidkGnDSOw3/HE2y2GHl+fpWBIa5S+IlnNrs\nGUvwC1I2QWvtqCHWmwFlFK95zKXiM8s9yV3VVXh7ivN8ZJO3SC5N1TCrvB2lpHMB\nwcz4DA0kgHCMm/wDec6kOHx1xvCRo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T\nAQH/BAUwAwEB/zAdBgNVHQ4EFgQUo45a9Vq8cYwqaiVyfkiS4pLcIAAwCgYIKoZI\nzj0EAwMDZwAwZAIwMypeB7P0IbY7c6gpWcClhRznOJFj8uavrNu2PIoz9KIqr3jn\nBlBHJs0myI7ntYpEAjBbm8eDMZY5zq5iMZUC6H7UzYSix4Uy1YlsLVV738PtKP9h\nFTjgDHctXJlC5L7+ZDY=\n-----END CERTIFICATE-----\n"}
/system/etc/security/trusted_apps_sources.json
{"version": "1.0.1","release-time":"2021-06-03 10:06:00","trust-app-source":[{"name":"huawei app gallery","app-signing-cert":"C=CN, O=Huawei, OU=HOS AppGallery, CN=HOS AppGallery Application Release","profile-signing-certificate":"C=CN, O=Huawei, OU=HOS AppGallery, CN=HOS Profile Management","profile-debug-signing-certificate":"C=CN, O=Huawei, OU=HOS AppGallery, CN=HOS Profile Management Debug","issuer-ca":"C=CN, O=Huawei, OU=Huawei CBG, CN=Huawei CBG Software Signing Service CA","root-ca": "C=CN, O=Huawei, OU=Huawei CBG, CN=Huawei CBG Root CA G2","max-certs-path":3,"critialcal-cert-extension":["keyusage","huawei-signing-capability"]},{"name":"huawei system apps","app-signing-cert":"C=CN, O=Huawei CBG, OU=HOS Development Team, CN=HOS Application Provision Release","profile-signing-certificate":"C=CN, O=Huawei CBG, OU=HOS Development Team, CN=HOS Application Provision Profile Release","profile-debug-signing-certificate":"C=CN, O=Huawei CBG, OU=HOS Development Team, CN=HOS Application Provision Profile Release_Debug","issuer-ca":"C=CN, O=Huawei, OU=Huawei CBG, CN=Huawei CBG Software Signing Service CA","root-ca": "C=CN, O=Huawei, OU=Huawei CBG, CN=Huawei CBG Root CA G2","max-certs-path":3,"critialcal-cert-extension":["keyusage","huawei-signing-capability"]},{"name":"third_party app preload","app-signing-cert":"C=CN, O=Huawei, OU=HOS Open Platform, CN=HOS Preload Service","profile-signing-certificate":"","profile-debug-signing-certificate":"","issuer-ca":"C=CN, O=Huawei, OU=Huawei CBG, CN=Huawei CBG Software Signing Service CA","root-ca": "C=CN, O=Huawei, OU=Huawei CBG, CN=Huawei CBG Root CA G2","max-certs-path":3,"critialcal-cert-extension":["keyusage","huawei-signing-capability"]}]}
2. Profile解析和校验
发布,会校验是否为允许的安装来源,根据hap_verify_v2.cpp的IsAppDistributedTypeAllowInstall函数(https://gitee.com/openharmony/security_appverify/blob/OpenHarmony-v5.0.0-Release/interfaces/innerkits/appverify/src/verify/hap_verify_v2.cpp),允许的来源包括企业签名、MDM、众包测试等分发场景。 调试,会校验待安装的设备UDID是否在Profile的device-ids列表中。
// bundle_install_checker.cppnewInfo.SetProvisionId(provisionInfo.appId);// inner_bundle_info.hvoid SetProvisionId(const std::string &provisionId){baseBundleInfo_->appId = baseBundleInfo_->name + Constants::FILE_UNDERLINE + provisionId;}
3.Hap包完整性校验
这一步的过程和Hap包签名类似,将ZIP包中数据和HapSigningBlock区里非SignatureSchemeBlock的部分拼接,重新计算hash,与使用Hap签名叶子证书公钥解密SignatureSchemeBlock区签名后的hash比较,相同则认为Hap包未被篡改。具体可以参考hap_signing_block_utils.cpp的VerifyHapIntegrity函数(https://gitee.com/openharmony/security_appverify/blob/OpenHarmony-v5.0.0-Release/interfaces/innerkits/appverify/src/util/hap_signing_block_utils.cpp),这里就不展开了。
美团信息安全部,肩负统筹保障公司整体业务和数据的信息安全重要职责,涵盖合规与隐私保护、基础安全、移动安全、数据安全、内容安全、业务风控等风险领域。随着业务升级与拓展,我们拥有诸多全球化安全领域人才,依托前瞻的安全技术视野、创新的机器学习技术、领先的产品运营体系和针对性的安全解决方案,构建全方位、多维度的智能防御体系,全面赋能公司各业务合规、安全和高质量的发展,为美团业务生态链上亿万C端、B端用户的安全提供有力保障。