概述
應用與服務器之間的數據傳輸需確保安全,保護數據的機密性和完整性,防止敏感數據被竊取和篡改。推薦使用傳輸層安全協議(TLS)保護數據安全。
當應用通過HTTPS訪問云側服務器時,如果信任了用戶安裝的CA證書,用戶可以通過網絡代理工具(如Fiddler、Charles)對HTTPS消息進行中間人攻擊,如查看、篡改請求和響應消息,這可能導致應用或云側服務器產生安全風險。因此,通過HTTPS訪問云側服務器時,應配置CA證書進行合法性校驗。
本文介紹如何配置CA證書以進行合法性校驗,避免應用或云側服務器的安全風險。

配置CA證書對服務器進行合法性校驗
當應用通過TLS協議連接服務器時,服務器會提供證書鏈來證明其身份,應用需要使用可信的CA(證書頒發機構)證書對服務器證書鏈進行合法性校驗。
服務器根據場景使用不同類型的CA頒發的證書鏈:
權威CA證書,如CFCA、GlobalSign CA機構的根CA證書,滿足業界管理規范并通過審計認證,可信度高。
企業自建的CA證書,用于企業內部服務器的證書鏈。企業內部應用直接信任此類CA證書。
系統提供3種CA證書管理方式:
系統預置CA證書:系統預置了業界主流的權威CA證書。
應用管理的CA證書:應用可在Hap內預置可信的CA證書,如企業內部自建的CA證書。
用戶安裝的CA證書:通過系統設置界面安裝的私有CA證書。這類證書可信度較低,可能被用于中間人攻擊。
開發者應結合應用的業務場景,在不影響業務功能的前提下,合理設置可信CA證書的范圍:
面向互聯網用戶的應用,建議只配置信任系統預置的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section121091116142117)。
只訪問企業內部服務器的應用,建議只配置信任應用管理的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section05271716102218)。
同時訪問企業內部服務器和互聯網服務的應用,建議根據訪問的服務器域名分別配置信任系統預置的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section121091116142117)或應用管理的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section05271716102218)。
應用開發和調測過程中需要進行網絡抓包以定位問題和測試,建議僅在調測版本配置信任用戶安裝的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section12518142215236)。
應用需支持通過企業代理服務器訪問應用服務器,可信任企業MDM系統或設備管理員用戶手動安裝CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section12518142215236)。然而,設備管理員用戶可能通過代理工具抓取應用網絡數據,建議在應用層實施安全防護,如對敏感數據進行二次加密或簽名。
對于需要較高網絡安全的應用(如金融支付、銀行類應用),配置CA證書后,通過SSL Pinning方式(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section4337175511234)綁定服務器證書的公鑰,以增強安全性。
網絡連接安全配置
配置信任系統預置的CA證書
如果應用使用第三方庫進行網絡連接,需要手動設置系統預置的CA證書路徑:/etc/security/certificates。
示例:
使用三方庫curl進行HTTPS連接,通過下面代碼設置信任的CA證書路徑:
curl_easy_setopt(curl, CURLOPT_CATH,"/etc/security/certificates");
配置不信任用戶安裝的CA證書
Network Kit和Remote Communication Kit配置不信任用戶安裝的CA證書:在src/main/resources/base/profile/network_config.json配置文件(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/http-request#%E9%85%8D%E7%BD%AE%E8%AF%81%E4%B9%A6%E6%A0%A1%E9%AA%8C)中進行配置。
{
"network-security-config": {
... ...
},
"trust-global-user-ca":false, //Configure whether to trust the CA certificate manually installed by the enterprise MDM system or device administrator. The default value is true
"trust-current-user-ca":false// Configure whether to trust the CA certificate installed by the current user. The default value is true
}
配置信任應用管理的CA證書
如果應用服務器使用企業內部自建的CA證書,可以在Hap包中預置這些CA證書,并配置信任。
Network Kit和Remote Communication Kit可以通過src/main/resources/base/profile/network_config.json文件進行配置。例如,可以將應用級信任的 CA 證書預置到/data/storage/el1/bundle/entry/resources/resfile/appCaCert目錄,將特定域名信任的CA 證書預置到/data/storage/el1/bundle/entry/resources/resfile/domainCaCert目錄。
{
"network-security-config":{
"base-config":{
"trust-anchors":[
{
"certificates":"/data/storage/el1/bundle/entry/resources/resfile/appCaCert"
}
]
},
"domain-config":[
{
"domains":[
{
"include-subdomains":true,
"name":"example.com"
}
],
"trust-anchors":[
{
"certificates":"/data/storage/el1/bundle/entry/resources/resfile/domainCaCert"
}
]
}
]
}
}
Network Kit也支持在發起HTTPS請求的代碼中指定信任的CA證書路徑(https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#httprequestoptions):
httpRequest.request('EXAMPLE_URL', {
method: http.RequestMethod.POST,
header: {
'Content-Type':'application/json'
},
extraData:'data to send',
expectDataType: http.HttpDataType.STRING,
connectTimeout:60000,
caPath:'/data/storage/el1/bundle/entry/resources/resfile/domainCaCert', // Specifies the trusted CA certificate path
}, (err: BusinessError,data: http.HttpResponse) => {
// ...
})
Remote Communication Kit也支持在代碼中指定信任的CA證書路徑(https://developer.huawei.com/consumer/cn/doc/harmonyos-references/remote-communication-rcp#section1597118916425):
constcaPath: rcp.CertificateAuthority = {
folderPath:'/data/storage/el1/bundle/entry/resources/resfile/appCaCert',// 指定信任的CA證書路徑
}
constsecurityConfig: rcp.SecurityConfiguration = {
remoteValidation: caPath
};
// Use the security configuration in the session creation
constsessionWithSecurityConfig= rcp.createSession({requestConfiguration: {security: securityConfig } });
說明
系統Network Kit和Remote Communication Kit在完成上述配置后,HTTPS連接仍信任系統預置的CA證書和用戶安裝的CA證書。如需提升安全性,可配置不信任用戶安裝的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section11935814273)。
如果應用使用三方庫進行網絡連接,需要在代碼中設置應用管理的CA證書路徑。例如,使用三方庫curl進行HTTPS連接時,可以通過以下代碼設置信任的CA證書路徑:
curl_easy_setopt(curl, CURLOPT_CATH,"/data/storage/el1/bundle/entry/resources/resfile/domainCaCert");
配置信任用戶安裝的CA證書
用戶安裝的CA證書可信度較低,除以下場景外,建議應用不信任用戶安裝的CA證書:
應用開發和調測過程中需要進行網絡抓包以定位問題和測試。用戶通過系統的設置界面安裝的CA證書,保存在目錄:/data/certificates/user_cacerts/{userid},其中 userid 從100開始。
**注意:**在商用發布的應用版本中應該不信任用戶安裝的CA證書。
面向2B企業應用的場景,應用需支持通過企業代理服務器訪問應用服務器。設備需通過企業的MDM系統或設備管理員用戶手工安裝CA證書,并保存在目錄:/data/certificates/user_cacerts/0。
配置SSL Pinning證書鎖定
應用默認信任系統預置的CA證書。如果預置的CA頒發了不可信證書,應用將面臨攻擊風險。對于需要高網絡安全的應用,如金融支付和銀行類應用,可以通過配置SSL Pinning證書鎖定方式,僅信任指定服務器證書的公鑰。
配置SSL Pinning支持兩種方式。如果服務器域名固定,建議采用靜態SSL Pinning。否則,采用動態SSL Pinning。
說明
SSL Pinning要求應用云側服務器證書的公鑰不能變化。如果公鑰發生變化,需要修改應用內配置的證書公鑰,否則應用的網絡連接將失敗。因此,建議SSL Pinning配置始終包含至少一個備用公鑰。
應用還可以設置SSL Pinning的到期時間。到期后,證書將不再被鎖定,這有助于在服務器證書公鑰變化時防止尚未更新的應用出現連接問題。然而,設置SSL Pinning的到期時間可能會使攻擊者繞過證書鎖定。
請開發者評估并決定是否配置安全風險和SSL Pinning的限制約束。如果應用在應用層對敏感信息進行了加密或簽名,則安全風險較低。
1. 通過network_config.json文件進行靜態SSL Pinning配置:
{
"network-security-config":{
"domain-config":[
{
"domains":[
{
"include-subdomains":true,
"name":"server.com"
}
],
"pin-set":{
"expiration":"2024-11-08",
"pin":[
{
"digest-algorithm":"sha256",
"digest":"g8CsdcpyAKxmLoWFvMd2hC7ZDUy7L4E2NYOi1i8qEtE="http:// Hash of the server certificate public key
}
]
}
}
]
}
}
具體可參考配置指導的“預置鎖定證書PIN”章節(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/http-request#%E8%AF%81%E4%B9%A6%E9%94%81%E5%AE%9A)。
2. 通過在代碼中動態設置進行動態SSL Pinning配置:
· Network Kit配置動態SSL Pinning:
certificatePinning: [//Optional, supports dynamic setting of certificate lock configuration information. This property is supported since API 12
{
publicKeyHash:'g8CsdcpyAKxmLoWFvMd2hC7ZDUy7L4E2NYOi1i8qEtE=',// Hash of the server certificate public key
hashAlgorithm:'SHA-256'
}, {
publicKeyHash:'MGFiY2UyMDk5ZjEyMzI3MWQ4MDMyY2E4ODEzMmY3EtE=',// Hash of the secondary public key of the server certificate
hashAlgorithm:'SHA-256'
}
]
具體可參考配置指導的“certificatePinning”參數說明(https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#httprequestoptions)。· Remote Communication Kit配置動態SSL Pinning:
constkeyHash:string='g8CsdcpyAKxmLoWFvMd2hC7ZDUy7L4E2NYOi1i8qEtE=';// Public key of the server certificate
constsession = rcp.createSession();
constrequest =newrcp.Request(HTTP_SERVER);
constpin: rcp.CertificatePinning = {
kind:'public-key',
publicKeyHash: keyHash,
hashAlgorithm:'SHA-256'
};
request.configuration = {
security: {
certificatePinning: pin,
}
};
constresp =awaitsession.fetch(request);
具體可參考配置指導的“certificatePinning”參數說明。
(https://developer.huawei.com/consumer/cn/doc/harmonyos-references/remote-communication-rcp#section1597118916425)
-
服務器
+關注
關注
13文章
10065瀏覽量
90734 -
網絡安全
+關注
關注
11文章
3440瀏覽量
62843 -
HarmonyOS
+關注
關注
80文章
2146瀏覽量
35476
原文標題:HarmonyOS應用網絡連接安全配置方案
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
關于網絡連接轉換問題的解答【電子發燒友】
關于網絡連接問題
便攜數據庫管理系統的網絡連接與安全,不看肯定后悔
下載HarmonyOS SDK時,提示網絡連接錯誤的解決辦法
基于802.1X 的可信網絡連接技術
便攜數據庫管理系統的網絡連接與安全
便攜數據庫管理系統的網絡連接與安全
基于可信網絡連接的安全接入技術
網絡連接存儲器,什么是網絡連接存儲器
Linux教程之如何配置網絡連接的資料概述
面向EtherCAT運動控制應用的網絡連接解決方案
TogetherROS系統中如何配置網絡連接

HarmonyOS應用網絡連接安全配置方案
評論