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

配置CA證書對服務(wù)器進行合法性校驗
當應(yīng)用通過TLS協(xié)議連接服務(wù)器時,服務(wù)器會提供證書鏈來證明其身份,應(yīng)用需要使用可信的CA(證書頒發(fā)機構(gòu))證書對服務(wù)器證書鏈進行合法性校驗。
服務(wù)器根據(jù)場景使用不同類型的CA頒發(fā)的證書鏈:
權(quán)威CA證書,如CFCA、GlobalSign CA機構(gòu)的根CA證書,滿足業(yè)界管理規(guī)范并通過審計認證,可信度高。
企業(yè)自建的CA證書,用于企業(yè)內(nèi)部服務(wù)器的證書鏈。企業(yè)內(nèi)部應(yīng)用直接信任此類CA證書。
系統(tǒng)提供3種CA證書管理方式:
系統(tǒng)預置CA證書:系統(tǒng)預置了業(yè)界主流的權(quán)威CA證書。
應(yīng)用管理的CA證書:應(yīng)用可在Hap內(nèi)預置可信的CA證書,如企業(yè)內(nèi)部自建的CA證書。
用戶安裝的CA證書:通過系統(tǒng)設(shè)置界面安裝的私有CA證書。這類證書可信度較低,可能被用于中間人攻擊。
開發(fā)者應(yīng)結(jié)合應(yīng)用的業(yè)務(wù)場景,在不影響業(yè)務(wù)功能的前提下,合理設(shè)置可信CA證書的范圍:
面向互聯(lián)網(wǎng)用戶的應(yīng)用,建議只配置信任系統(tǒng)預置的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section121091116142117)。
只訪問企業(yè)內(nèi)部服務(wù)器的應(yīng)用,建議只配置信任應(yīng)用管理的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section05271716102218)。
同時訪問企業(yè)內(nèi)部服務(wù)器和互聯(lián)網(wǎng)服務(wù)的應(yīng)用,建議根據(jù)訪問的服務(wù)器域名分別配置信任系統(tǒng)預置的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section121091116142117)或應(yīng)用管理的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section05271716102218)。
應(yīng)用開發(fā)和調(diào)測過程中需要進行網(wǎng)絡(luò)抓包以定位問題和測試,建議僅在調(diào)測版本配置信任用戶安裝的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section12518142215236)。
應(yīng)用需支持通過企業(yè)代理服務(wù)器訪問應(yīng)用服務(wù)器,可信任企業(yè)MDM系統(tǒng)或設(shè)備管理員用戶手動安裝CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section12518142215236)。然而,設(shè)備管理員用戶可能通過代理工具抓取應(yīng)用網(wǎng)絡(luò)數(shù)據(jù),建議在應(yīng)用層實施安全防護,如對敏感數(shù)據(jù)進行二次加密或簽名。
對于需要較高網(wǎng)絡(luò)安全的應(yīng)用(如金融支付、銀行類應(yīng)用),配置CA證書后,通過SSL Pinning方式(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section4337175511234)綁定服務(wù)器證書的公鑰,以增強安全性。
網(wǎng)絡(luò)連接安全配置
配置信任系統(tǒng)預置的CA證書
如果應(yīng)用使用第三方庫進行網(wǎng)絡(luò)連接,需要手動設(shè)置系統(tǒng)預置的CA證書路徑:/etc/security/certificates。
示例:
使用三方庫curl進行HTTPS連接,通過下面代碼設(shè)置信任的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
}
配置信任應(yīng)用管理的CA證書
如果應(yīng)用服務(wù)器使用企業(yè)內(nèi)部自建的CA證書,可以在Hap包中預置這些CA證書,并配置信任。
Network Kit和Remote Communication Kit可以通過src/main/resources/base/profile/network_config.json文件進行配置。例如,可以將應(yīng)用級信任的 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也支持在發(fā)起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 } });
說明
系統(tǒng)Network Kit和Remote Communication Kit在完成上述配置后,HTTPS連接仍信任系統(tǒng)預置的CA證書和用戶安裝的CA證書。如需提升安全性,可配置不信任用戶安裝的CA證書(https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-network-ca-security#section11935814273)。
如果應(yīng)用使用三方庫進行網(wǎng)絡(luò)連接,需要在代碼中設(shè)置應(yīng)用管理的CA證書路徑。例如,使用三方庫curl進行HTTPS連接時,可以通過以下代碼設(shè)置信任的CA證書路徑:
curl_easy_setopt(curl, CURLOPT_CATH,"/data/storage/el1/bundle/entry/resources/resfile/domainCaCert");
配置信任用戶安裝的CA證書
用戶安裝的CA證書可信度較低,除以下場景外,建議應(yīng)用不信任用戶安裝的CA證書:
應(yīng)用開發(fā)和調(diào)測過程中需要進行網(wǎng)絡(luò)抓包以定位問題和測試。用戶通過系統(tǒng)的設(shè)置界面安裝的CA證書,保存在目錄:/data/certificates/user_cacerts/{userid},其中 userid 從100開始。
**注意:**在商用發(fā)布的應(yīng)用版本中應(yīng)該不信任用戶安裝的CA證書。
面向2B企業(yè)應(yīng)用的場景,應(yīng)用需支持通過企業(yè)代理服務(wù)器訪問應(yīng)用服務(wù)器。設(shè)備需通過企業(yè)的MDM系統(tǒng)或設(shè)備管理員用戶手工安裝CA證書,并保存在目錄:/data/certificates/user_cacerts/0。
配置SSL Pinning證書鎖定
應(yīng)用默認信任系統(tǒng)預置的CA證書。如果預置的CA頒發(fā)了不可信證書,應(yīng)用將面臨攻擊風險。對于需要高網(wǎng)絡(luò)安全的應(yīng)用,如金融支付和銀行類應(yīng)用,可以通過配置SSL Pinning證書鎖定方式,僅信任指定服務(wù)器證書的公鑰。
配置SSL Pinning支持兩種方式。如果服務(wù)器域名固定,建議采用靜態(tài)SSL Pinning。否則,采用動態(tài)SSL Pinning。
說明
SSL Pinning要求應(yīng)用云側(cè)服務(wù)器證書的公鑰不能變化。如果公鑰發(fā)生變化,需要修改應(yīng)用內(nèi)配置的證書公鑰,否則應(yīng)用的網(wǎng)絡(luò)連接將失敗。因此,建議SSL Pinning配置始終包含至少一個備用公鑰。
應(yīng)用還可以設(shè)置SSL Pinning的到期時間。到期后,證書將不再被鎖定,這有助于在服務(wù)器證書公鑰變化時防止尚未更新的應(yīng)用出現(xiàn)連接問題。然而,設(shè)置SSL Pinning的到期時間可能會使攻擊者繞過證書鎖定。
請開發(fā)者評估并決定是否配置安全風險和SSL Pinning的限制約束。如果應(yīng)用在應(yīng)用層對敏感信息進行了加密或簽名,則安全風險較低。
1. 通過network_config.json文件進行靜態(tài)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”章節(jié)(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/http-request#%E8%AF%81%E4%B9%A6%E9%94%81%E5%AE%9A)。
2. 通過在代碼中動態(tài)設(shè)置進行動態(tài)SSL Pinning配置:
· Network Kit配置動態(tài)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”參數(shù)說明(https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-http#httprequestoptions)。· Remote Communication Kit配置動態(tài)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”參數(shù)說明。
(https://developer.huawei.com/consumer/cn/doc/harmonyos-references/remote-communication-rcp#section1597118916425)
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
10013瀏覽量
90324 -
網(wǎng)絡(luò)安全
+關(guān)注
關(guān)注
11文章
3424瀏覽量
62611 -
HarmonyOS
+關(guān)注
關(guān)注
80文章
2144瀏覽量
35153
原文標題:HarmonyOS應(yīng)用網(wǎng)絡(luò)連接安全配置方案
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
關(guān)于網(wǎng)絡(luò)連接轉(zhuǎn)換問題的解答【電子發(fā)燒友】
關(guān)于網(wǎng)絡(luò)連接問題
便攜數(shù)據(jù)庫管理系統(tǒng)的網(wǎng)絡(luò)連接與安全,不看肯定后悔
下載HarmonyOS SDK時,提示網(wǎng)絡(luò)連接錯誤的解決辦法
基于802.1X 的可信網(wǎng)絡(luò)連接技術(shù)
便攜數(shù)據(jù)庫管理系統(tǒng)的網(wǎng)絡(luò)連接與安全
便攜數(shù)據(jù)庫管理系統(tǒng)的網(wǎng)絡(luò)連接與安全
基于可信網(wǎng)絡(luò)連接的安全接入技術(shù)
網(wǎng)絡(luò)連接技術(shù)
網(wǎng)絡(luò)連接存儲器,什么是網(wǎng)絡(luò)連接存儲器
Linux教程之如何配置網(wǎng)絡(luò)連接的資料概述
面向EtherCAT運動控制應(yīng)用的網(wǎng)絡(luò)連接解決方案
TogetherROS系統(tǒng)中如何配置網(wǎng)絡(luò)連接

HarmonyOS應(yīng)用網(wǎng)絡(luò)連接安全配置方案
評論