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

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