更新时间:2026-06-17 GMT+08:00
分享

校验HTTP(S)签名证书

SMN服务推送的HTTP(S)协议消息体内携带signing_cert_url字段,该字段用于标识消息签名证书的外部下载路径。通过该外部路径获取证书时,存在中间人攻击导致证书内容被篡改的安全风险。为保障签名校验安全性,建议您直接采用本页面公示的HTTP(S)消息签名证书(cert.pem)完成消息签名校验工作。本页面公示的HTTP(S)消息签名证书由华为自有PKI CA签发;同时本页面同步对外公示对应CA证书公钥,可配套用于证书合法性核验。

HTTP(S)消息签名证书(cert.pem)

-----BEGIN CERTIFICATE-----
MIIDWTCCAkGgAwIBAgIIdv23u/vU1zcwDQYJKoZIhvcNAQELBQAwODELMAkGA1UE
BhMCQ04xDzANBgNVBAoTBkh1YXdlaTEYMBYGA1UEAxMPSHVhd2VpIENsb3VkIENB
MB4XDTIwMDkwOTA2NDAwNFoXDTMwMDkwNzA2NDAwNFowPzELMAkGA1UEBhMCQ04x
DzANBgNVBAoTBkh1YXdlaTEfMB0GA1UEAxMWSHVhd2VpLUNsb3VkLVNNTi1NZXRl
cjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOunOsnncSp53UP4xetr
A4tHiRj6kldrmyx5gYB/zbGblfwHDvh7Pw9633iq0y1ZwfE0yVu7mNAwdAAo1u7X
lvO+ZLJkBsOjg2BU/BD7VfsVV7YJ51u467G0D7U8Qz8gIqsTbU1iT3koyNuUPmKe
9J0bhKdR8wy6xuROWh/5Ec0y2n28FqIDXP91udkYgrXhasmejLwx4saRFaVl6nPE
MOOWyrFDtU5bKWj8wZUwhRAuIeUVxu4TRxLu+zyuXk1Y4mG1RCDpIf5XsgDeitMr
TsrdjuxEsgRTDCVl6WVEojzBv/AccLoBrbHFa+Pppp8/RDvDhuQrxizp+K4zSunQ
iukCAwEAAaNgMF4wHwYDVR0jBBgwFoAU9JLn3OgwPepGkfxQ4xg4L8UVUSswDAYD
VR0TBAUwAwEBADAOBgNVHQ8BAf8EBAMCA6gwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
CCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4IBAQALQt+Fy2yOs/Z7PL0xq2g8lWx0
7zNaUcYYdFcZeiwfuLSTOeFJiPFKyAsN7Bl7wIjFT8ZsHDhBJE5bkYnjdYxO1jnq
xCeNDErlP0nD7j+p5YZMtMWv/vPod3EBQ4z5ThNvAljeSx9iQKL0HL7lxOJ4ssId
zsFlSZCdkRbNQb4Vb8r72J0Yu8hiSUTvvIMERTBzYtTFUTTmJz4oX5HvBj4KEycF
RWjrNp6g82RRcSEPQl8XeoqOAiCSr1ddsTLQDqWgKWA68Tc64LPMxG3BC2cl0GrK
Ilqom+ZuaR05jslMr7jSCQwUcLIk0Loxv2YYrE9Yqju/v2s8LKXwiLVsxxTU
-----END CERTIFICATE-----

CA证书(ca.pem)

# Issuer: CN=Huawei Equipment CA,O=Huawei,C=CN
# Subject: CN=Huawei Cloud CA,O=Huawei,C=CN
# Label: "Huawei Cloud CA"
# Serial: 76666a0a296170cd981e6ebaf9a4808c3f
# SHA256 Fingerprint: B8:14:1F:4A:8B:93:4A:E5:8C:01:06:49:4A:9D:00:48:94:DB:A8:8B:44:63:C8:13:C5:0E:24:2C:1D:89:F4:D3
-----BEGIN CERTIFICATE-----
MIIErDCCApSgAwIBAgIRdmZqCilhcM2YHm66+aSAjD8wDQYJKoZIhvcNAQELBQAw
PDELMAkGA1UEBhMCQ04xDzANBgNVBAoTBkh1YXdlaTEcMBoGA1UEAxMTSHVhd2Vp
IEVxdWlwbWVudCBDQTAeFw0xNzA4MzExMjEzMTRaFw00MTEwMTIxMjEzMTRaMDgx
CzAJBgNVBAYTAkNOMQ8wDQYDVQQKEwZIdWF3ZWkxGDAWBgNVBAMTD0h1YXdlaSBD
bG91ZCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKvJNCZTjMj8
nCmfWE2B9XMOLHWAZkXk0hAY4pby6Nt+lVqqcBp3UBJqCNSn4LzkgcFe2q46aBUt
lik1k49S8eo5zmVx2eWWTKGiofJncakvDVR4Co3zBDJTOPxxwuSR0fRb8O3KNaYm
Tf62zYiJ0snokW+iDO+1NqQGy0WELZ8N4utHzMOC4gYB9A+9QmFArDB/6bxxEYmy
AG2txm8HNQBn5hCvEDLEEuSbVWHbih4F4ftyebho0oHIeKIfNK48voeOeBPFQe9L
0tBU8EOmND05psqphRhojytqmrZUY/YnqQpTWpeykeI1MbVW0YZ5HRbSC6mgoyvo
Nuiya+WZ2f0CAwEAAaOBrDCBqTAfBgNVHSMEGDAWgBQq+BBZJ4A1H6d8ujufKuRK
qpuS6jBGBgNVHSAEPzA9MDsGBFUdIAAwMzAxBggrBgEFBQcCARYlaHR0cDovL3N1
cHBvcnQuaHVhd2VpLmNvbS9zdXBwb3J0L3BraTAPBgNVHRMECDAGAQH/AgEAMA4G
A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU9JLn3OgwPepGkfxQ4xg4L8UVUSswDQYJ
KoZIhvcNAQELBQADggIBAJx9817HslSMkxX/Dcs2GX8nGIbXl72/71pl9Hf9lWOY
cqh3W8gz7HxEDYrgpl5+nIw8jKxi3PbBfoSXQnaTYz0DOesNwkHx7Dn9jb6usovc
wjxcZbB/7GedLriiCrG/RX0CoSlkFFo2V0jkUa6sMonmaA+E5kpjqgXymvfdW1C7
q+B/6rB/ISZP+RYUsRqoWRHXWDxgaB7h5moKPw0R88jwfrkl7m0gk1GICc1QM4f5
CDC0tIjBxfr2WBH4ypkSdzzFwH6wO/bPhOqH1clw7ULwsnY/olSBEqncayIoE6+b
Klxr3TS1NLOw4p7JowJ3T5BaEndu22BoDotiVGnaTDdP1kSZFZFXbXORKL1vvk1b
49fWeUqSsN5ZfFv77feOnTqZhqLC9pXYWF0bhH6cQgY82pUeqQuuznYR7wMzBIaU
Dfc/RlTB5Cjsz4LCApeXCC+bFz0Z0fkYfj64jK9dg5uG+kQlO3iCcrSkhQzTwZXX
Oi1oPbSEBVlCxb+5f4B2doV5LOwZPErmxBkOWRD60jOS4sQfs6AwzXH9JclzAkF+
5Fmi9AYzeZuigdndEm4cGyuq04xtAwSx0TQppyTtyWsOs1wQ9wYgOG6MbJm1qMoJ
xJSl6+m5J8ImH2VH3SUQcO7fI3fgvoPh57tfaf8rv3cOj6EY2xzNniTpUaDxw4Cj
-----END CERTIFICATE-----

# Issuer: CN=Huawei Equipment CA,O=Huawei,C=CN
# Subject: CN=Huawei Equipment CA,O=Huawei,C=CN
# Label: "Huawei Equipment CA"
# Serial: 762560022a475eeca62b7c68ac9b3f2986
# SHA256 Fingerprint: DA:2A:BE:92:25:D7:95:A3:80:E2:89:9D:53:0E:F0:31:8A:5B:32:BC:81:AA:FD:44:88:BA:96:1D:DF:75:02:D4
-----BEGIN CERTIFICATE-----
MIIFPzCCAyegAwIBAgIRdiVgAipHXuymK3xorJs/KYYwDQYJKoZIhvcNAQELBQAw
PDELMAkGA1UEBhMCQ04xDzANBgNVBAoTBkh1YXdlaTEcMBoGA1UEAxMTSHVhd2Vp
IEVxdWlwbWVudCBDQTAeFw0xMTEyMDYwNzM0MjNaFw00MTExMjgwNzM0MjNaMDwx
CzAJBgNVBAYTAkNOMQ8wDQYDVQQKEwZIdWF3ZWkxHDAaBgNVBAMTE0h1YXdlaSBF
cXVpcG1lbnQgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCiiYQn
C/Mp9obmAnXmu/Nj6rccSkEQJXlZipOv8tIjvr0B8ObpFUnU+qLojZUYlNmXH8Rg
RgFB1sBSyOuGiiP0uNtJ0lPLbylsc+2fr2Rlt/qbYs1oQGz+oNl+UdAOtm/lPzgg
UOVVst15Ovf0Yf6LQ3CQalN2VJWgKpFUudDKWQ2fzbFT5YSfvhFxvtvWfgdntKAJ
t3sFvkKr9Qw+0EYNpQiw5EALeLWCZSYU7A939puqYR6aNA447S1K8SgWoav82P4U
Y/ykLXjcgTeCnvRRtUga1gdIwm5d/vRlB5il5wspGLLes4SomzUYrvnvHio555NZ
PpvmpIXNolwvYW5opAyYzE05pVSOmHf/RY/dHto8XWexOJq/UAFBMyiH4NT4cZpW
jYWR7W9GxRXApmQrrLXte1CF/IzXWBMA2tSL0WnRJz5HRcKzsOC6FksiqsYstFjc
CE7J7Nicr3Bwq5FrZiqGSdLmLRn97XqVlWdN31HX16fzRhZMiOkvQe+uYT+BXbhU
1fZIh6RRAH3V1APobVlCXh5PDq8Ca4dClHNHYp5RP0Pb5zBowTqBzSv7ssHrNceQ
sWDeNjX9t59NwviaIlXIlPiWEEJc22XtMm4sc/+8mgOFMNXr4FWu8vdG2fgRpeWJ
O0E035D6TClu4So2GlN/fIccp5wVYAWF1WhxSQIDAQABozwwOjAMBgNVHRMEBTAD
AQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUKvgQWSeANR+nfLo7nyrkSqqbkuow
DQYJKoZIhvcNAQELBQADggIBAEDHZJ4vvx2kPmHEsN3OJOeF2nV6chjF1QZcUwlo
jhUtIv9jte9mci5qllvYRU5mia9rYZiP61XfdrwORf8QdJcI63QgrIj7MtnJULcU
Ukk0Sj9Fz6rswfhlaqtRjDp2ljizCl9bmUzKZTl40m/SMbItbSyYXvKrgSPTwgPo
/MralqpJcuoUkf+JDZIP3AaIy+vecksJwmoFIc0OqwP7uNC55kr8kx70eH3QKaiA
U+8CL3N7gtMFBL2MALlk3vFEICEAhWvMGrYNtSzBUEJNTspx+qVxERBqxJImBsPG
D7LhLOaPlSzfbU6CD3C8G92Y7r4nCcQ+SOQv4k6TTRn8pOj5c0oy3Z28DeZGuzSX
NPsWur3aRVwE0mOY8cLBkgio7AQjqIAmdbo5vie7X1zshyEcA7FaE1mJdNS3WVCv
lMwTFwygq13svLQ5MwGPSexsHudZ5JP55tHXkQyPRqxdhFr+gxDw5oiv/LlxApB8
5MwEfTTs/uzS6FSWAUC0IAxWyZ3MytVAAL7SiwZp/eODWBwLXETlIKcu/fdhTfN5
q1Mm9TjMjJmDEoqzIDRjDuVR4v/3czRxMOkKtUHJt2ixeiidh9hjY6ae669BqpBR
W0d5dyNozy+IJcUo7Gg2+F1AhTLwvPiYlJLsNGZZvqXfhplpwcAnvtoGJvAj+QkL
iW4z
-----END CERTIFICATE-----

签名证书校验示例

以下代码演示如何通过CA证书(ca.pem)验证 HTTP(S)消息签名证书(cert.pem)的合法性。

public static void main(String[] args) {
    boolean result = verify("ca.pem", "cert.pem");
    if (result) {
        System.out.println("Verify success");
    } else {
        System.out.println("Verify failed");
    }
}
public static boolean verify(String caPath, String certPath) {
    try {
        X509Certificate cert = loadX509Cert(certPath);
        X509Certificate ca = loadX509Cert(caPath);
        cert.verify(ca.getPublicKey());
        return true;
    } catch (Exception e) {
        System.err.println(String.format("Failed to verify certificate: %s", e.getMessage()));
        return false;
    }
}
public static X509Certificate loadX509Cert(String path) throws CertificateException {
    try (InputStream in = Files.newInputStream(Paths.get(path))) {
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        return (X509Certificate) cf.generateCertificate(in);
    } catch (Exception e) {
        throw new CertificateException(String.format("Failed to load certificate from: %s", path), e);
    }
}

相关文档