鸿蒙Next域名SSL证书校验中certificate pinning如何配置
在鸿蒙Next开发中,配置HTTPS请求时遇到SSL证书校验问题。请问如何正确实现certificate pinning(证书固定)?需要具体配置步骤或示例代码,包括如何获取并绑定特定域名的公钥或证书哈希值,以及是否需要修改系统默认的证书链验证逻辑?
2 回复
在鸿蒙Next中配置SSL证书锁定(certificate pinning)可通过以下步骤实现:
-
获取证书指纹
使用OpenSSL提取服务器证书的SHA256指纹:openssl s_client -connect example.com:443 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -
配置网络安全
在module.json5中声明网络权限:"requestPermissions": [ { "name": "ohos.permission.INTERNET" } ] -
实现证书校验
使用http模块创建请求时,通过[@ohos](/user/ohos)/sslCertificate模块验证指纹:import sslCert from '[@ohos](/user/ohos)/sslCertificate'; // 在请求选项中设置自定义校验逻辑 let options = { // 对比服务器返回证书与预置指纹是否匹配 caCerts: [/* 预置证书 */], verifyCert: (cert: sslCert.X509Cert) => { return cert.getFingerprint('SHA256') === '预置指纹'; } }; -
注意事项
- 建议预置多个证书指纹以支持证书轮换
- 生产环境需通过安全方式存储指纹(如加密配置)
- 定期更新证书指纹避免服务中断
通过以上步骤可有效防止中间人攻击,确保通信安全。
更多关于鸿蒙Next域名SSL证书校验中certificate pinning如何配置的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next(HarmonyOS NEXT)应用中配置SSL证书锁定(Certificate Pinning)可增强通信安全性,确保应用仅信任指定证书。以下是配置步骤及示例代码:
配置步骤:
-
获取证书公钥哈希
提取服务器证书的SHA-256哈希值(可通过OpenSSL命令获取):openssl s_client -connect example.com:443 | openssl x509 -pubkey | openssl pkey -pubin -outform der | openssl dgst -sha256 -
在代码中配置证书锁定
使用鸿蒙网络管理模块(@ohos.net.http)的CertificatePinning实现。
示例代码:
import http from '@ohos.net.http';
import { BusinessError } from '@ohos.base';
// 配置证书哈希(示例值,需替换为实际值)
const pinnedCertHashes: string[] = [
"SHA256:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" // 替换为实际哈希
];
// 创建HttpClient实例
let httpClient = http.createHttp();
// 设置证书锁定
try {
httpClient.setCertificatePinning({
certificates: pinnedCertHashes,
callback: (error: BusinessError) => {
if (error) {
console.error("Certificate pinning failed: " + JSON.stringify(error));
// 处理校验失败(如终止请求)
}
}
});
} catch (error) {
console.error("Failed to set certificate pinning: " + JSON.stringify(error));
}
// 发送HTTPS请求
httpClient.request(
"https://example.com",
{
method: http.RequestMethod.GET,
}, (err, data) => {
if (err) {
console.error("Request failed: " + JSON.stringify(err));
return;
}
console.info("Request success: " + JSON.stringify(data));
}
);
关键说明:
- 证书哈希:必须使用Base64编码的SHA-256哈希值,格式为
SHA256:<哈希值>。 - 错误处理:若证书校验失败,应在callback中中断请求或通知用户。
- 兼容性:确保证书更新时同步调整哈希值,避免因证书过期导致服务中断。
通过以上配置,应用将仅接受匹配预设哈希的证书,有效防御中间人攻击。

