1.數(shù)據(jù)安全
01數(shù)據(jù)安全的原則1)在網(wǎng)絡(luò)上"不允許"傳輸用戶隱私數(shù)據(jù)的"明文"2.)在本地"不允許"保存用戶隱私數(shù)據(jù)的"明文"
1.png
2.Base64
1.Base64簡單說明? ? 描述:Base64可以成為密碼學(xué)的基石,非常重要贯涎。? ? 特點(diǎn):可以將任意的二進(jìn)制數(shù)據(jù)進(jìn)行Base64編碼? ? 結(jié)果:所有的數(shù)據(jù)都能被編碼為并只用65個(gè)字符就能表示的文本文件疟丙。65字符:A~Z a~z0~9+ / =? ? 對(duì)文件進(jìn)行base64編碼后文件數(shù)據(jù)的變化:編碼后的數(shù)據(jù)~=編碼前數(shù)據(jù)的4/3,會(huì)大1/3左右黍特。2.命令行進(jìn)行Base64編碼和解碼? ? 編碼:base64123.png -o123.txt? ? 解碼:base64123.txt -o test.png -D2.Base64編碼原理1)將所有字符轉(zhuǎn)化為ASCII碼触创;2)將ASCII碼轉(zhuǎn)化為8位二進(jìn)制瘟滨;3)將二進(jìn)制3個(gè)歸成一組(不足3個(gè)在后邊補(bǔ)0)共24位候醒,再拆分成4組,每組6位室奏;4)統(tǒng)一在6位二進(jìn)制前補(bǔ)兩個(gè)0湊足8位火焰;5)將補(bǔ)0后的二進(jìn)制轉(zhuǎn)為十進(jìn)制;6)從Base64編碼表獲取十進(jìn)制對(duì)應(yīng)的Base64編碼胧沫;處理過程說明:? ? a.轉(zhuǎn)換的時(shí)候昌简,將三個(gè)byte的數(shù)據(jù),先后放入一個(gè)24bit的緩沖區(qū)中绒怨,先來的byte占高位纯赎。? ? b.數(shù)據(jù)不足3byte的話,于緩沖區(qū)中剩下的bit用0補(bǔ)足南蹂。然后犬金,每次取出6個(gè)bit,按照其值選擇查表選擇對(duì)應(yīng)的字符作為編碼后的輸出六剥。? ? c.不斷進(jìn)行晚顷,直到全部輸入數(shù)據(jù)轉(zhuǎn)換完成。? ? d.如果最后剩下兩個(gè)輸入數(shù)據(jù)疗疟,在編碼結(jié)果后加1個(gè)“=”该默;? ? e.如果最后剩下一個(gè)輸入數(shù)據(jù),編碼結(jié)果后加2個(gè)“=”策彤;? ? f.如果沒有剩下任何數(shù)據(jù)栓袖,就什么都不要加,這樣才可以保證資料還原的正確性店诗。3.實(shí)現(xiàn)? ? a.說明:1)從iOS7.0開始裹刮,蘋果就提供了base64的編碼和解碼支持2)如果是老項(xiàng)目,則還能看到base64編碼和解碼的第三方框架庞瘸,如果當(dāng)前不再支持iOS7.0以下版本捧弃,則建議替換。? ? b.相關(guān)代碼://給定一個(gè)字符串恕洲,對(duì)該字符串進(jìn)行Base64編碼塔橡,然后返回編碼后的結(jié)果-(NSString *)base64EncodeString:(NSString *)string{//1.先把字符串轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)NSData *data = [stringdataUsingEncoding:NSUTF8StringEncoding];//2.對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行base64編碼梅割,返回編碼后的字符串return[data base64EncodedStringWithOptions:0];? ? }//對(duì)base64編碼后的字符串進(jìn)行解碼-(NSString *)base64DecodeString:(NSString *)string{//1.將base64編碼后的字符串『解碼』為二進(jìn)制數(shù)據(jù)NSData *data = [[NSData alloc]initWithBase64EncodedString:stringoptions:0];//2.把二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為字符串返回return[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];? ? }? ? c.終端測(cè)試命令? ? ? ? $ echo -n A | base64? ? ? ? $ echo -n QQ== |base64 -D
3.常見的加密算法和其它
1.base64 編碼格式2.密碼學(xué)演化"秘密本"-->RSA3.常見的加密算法1)消息摘要(單向散列函數(shù))2)對(duì)稱加密3)非對(duì)稱加密4)證書等
4.單向散列函數(shù)
1.單向散列函數(shù)的特點(diǎn):? ? ①加密后密文的長度是定長的? ? ②如果明文不一樣霜第,那么散列后的結(jié)果一定不一樣? ? ③如果明文一樣葛家,那么加密后的密文一定一樣(對(duì)相同數(shù)據(jù)加密,加密后的密文一樣)? ? ④所有的加密算法是公開的? ? ⑤不可以逆推反算2.經(jīng)典加密算法1)MD5加密2)SHA13)SHA5123.MD5加密算法簡單說明1)對(duì)字符串進(jìn)行MD5加密可以得到一個(gè)32個(gè)字符的密文2)加密之后不能根據(jù)密文逆推出明文3)MD5已經(jīng)被破解(暴力破解|碰撞檢測(cè))4.MD5加密進(jìn)階1)先加鹽泌类,然后再進(jìn)行MD52)先亂序癞谒,再進(jìn)行MD5加密3)亂序|加鹽,多次MD5加密等4)使用消息認(rèn)證機(jī)制刃榨,即HMAC-MD5-先對(duì)密鑰進(jìn)行加密弹砚,加密之后進(jìn)行兩次MD5散列5)加密命令行? ? ? ? MD5加密-字符串? ? $ echo -n"520it"|md5? ? ? ? MD5加密-文件1$ md5 abc.png? ? ? ? SHA1加密:? ? ? ? $ echo -n"520it"|openssl sha -sha1? ? ? ? SHA256? ? ? ? ? ? $ echo -n"520it"|openssl sha -sha256? ? ? ? SHA512? ? ? ? ? ? $ echo -n"520it"|openssl sha -sha512? ? ? ? hmacMD5加密? ? ? $ echo -n"520it"|openssl dgst -md5 -hmac"123"5.散列函數(shù)應(yīng)用領(lǐng)域1)搜索 多個(gè)關(guān)鍵字,先對(duì)每個(gè)關(guān)鍵字進(jìn)行散列枢希,然后多個(gè)關(guān)鍵字進(jìn)行或運(yùn)算桌吃,如果值一致則搜索結(jié)果一致2)版權(quán) 對(duì)文件進(jìn)行散列判斷該文件是否是正版或原版的3)文件完整性驗(yàn)證 對(duì)整個(gè)文件進(jìn)行散列,比較散列值判斷文件是否完整或被篡改6.消息認(rèn)證機(jī)制(HMAC)簡單說明1)原理? ? ? ? ①消息的發(fā)送者和接收者有一個(gè)共享密鑰? ? ? ? ②發(fā)送者使用共享密鑰對(duì)消息加密計(jì)算得到MAC值(消息認(rèn)證碼)? ? ? ? ③消息接收者使用共享密鑰對(duì)消息加密計(jì)算得到MAC值? ? ? ? ④比較兩個(gè)MAC值是否一致2)使用? ? ? ? ①客戶端需要在發(fā)送的時(shí)候把(消息)+(消息·HMAC)一起發(fā)送給服務(wù)器? ? ? ? ②服務(wù)器接收到數(shù)據(jù)后苞轿,對(duì)拿到的消息用共享的KEY進(jìn)行HMAC茅诱,比較是否一致,如果一致則信任
2.png
5.對(duì)稱加密
1.對(duì)稱加密的特點(diǎn)1)加密/解密使用相同的密鑰2)加密和解密的過程是可逆的(明文-》明文-》明文)
3.png
2.經(jīng)典算法1)DES 數(shù)據(jù)加密標(biāo)準(zhǔn)2)3DES 使用3個(gè)密鑰搬卒,對(duì)消息進(jìn)行(密鑰1·加密)+(密鑰2·解密)+(密鑰3·加密)3)AES 高級(jí)加密標(biāo)準(zhǔn)3.分組密碼簡單說明? ? 密碼算法可以分為分組密碼和流密碼兩種瑟俭。? ? 分組密碼:每次只能處理特定長度的一zu數(shù)據(jù)的一類密碼算法。一個(gè)分組的比特?cái)?shù)量就稱之為分組長度契邀。? ? ex:DES和3DES的分組長度都是64比特摆寄。即每次只能加密64比特的明文,并生成64比特的密文坯门。AES的分組長度有128比特微饥、192比特和256比特可以選擇。? ? 流密碼:對(duì)數(shù)據(jù)流進(jìn)行連續(xù)處理的一類算法古戴。流密碼中一般以1比特欠橘、8比特或者是32比特等作為單位倆進(jìn)行加密和解密。4.ECB分組模式? ? ECB模式的全稱為Electronic CodeBook模式允瞧。又成為電子密碼本模式简软。? ? 特點(diǎn):1)使用ECB模式加密的時(shí)候,相同的明文分組會(huì)被轉(zhuǎn)換為相同的密文分組述暂。2)類似于一個(gè)巨大的明文分組-》密文分組的對(duì)照表痹升。
4.png
5.png
終端測(cè)試命令:? ? 加密 $ openssl enc -des-ecb -K616263-nosalt -in123.txt -out123.bin? ? 解密 $ openssl enc -des-ecb -K616263-nosalt -in123.bin -out1231.txt -d5.CBC分組模式? ? CBC模式全稱為Cipher Block Chainning模式(密文分組鏈接模式|電子密碼鏈條)? ? 特點(diǎn):在CBC模式中,首先將明文分組與前一個(gè)密文分組進(jìn)行XOR運(yùn)算畦韭,然后再進(jìn)行加密疼蛾。
6.非對(duì)稱加密
1.非對(duì)稱加密的特點(diǎn)1)使用公鑰加密,使用私鑰解密2)公鑰是公開的艺配,私鑰保密3)加密處理安全察郁,但是性能極差
6.png
2.經(jīng)典算法---RSA1)RSA 原理? ? ? ? (1)求N衍慎,準(zhǔn)備兩個(gè)質(zhì)數(shù)p和q,N = p x q? ? ? ? (2)求L,L是p-1和q-1的最小公倍數(shù)。L = lcm(p-1,q-1)? ? ? ? (3)求E皮钠,E和L的最大公約數(shù)為1(E和L互質(zhì))? ? ? ? (4)求D稳捆,E x D mode L =12)RSA加密小實(shí)踐? ? ? ? (1)p =17,q =19=>N =323(2)lcm(p-1,q-1)=>lcm(16,18)=>L=144(3)gcd(E,L)=1=>E=5(4)E乘以幾可以mode L =1? D=29可以滿足? ? ? ? (5)得到公鑰為:E=5,N=323(6)得到私鑰為:D=29,N=323(7)加密 明文的E次方 mod N =123的5次方 mod323=225(密文)? ? ? ? (8)解密 密文的D次方 mod N =225的29次方 mod323=123(明文)? ? ? ? ----------------3)openssl生成密鑰命令? ? ? ? 生成強(qiáng)度是512的 RSA 私鑰:$ openssl genrsa -outprivate.pem512以明文輸出私鑰內(nèi)容:$ openssl rsa -inprivate.pem -text -outprivate.txt? ? ? ? 校驗(yàn)私鑰文件:$ openssl rsa -inprivate.pem -check? ? ? ? 從私鑰中提取公鑰:$ openssl rsa -inprivate.pem -outpublic.pem -outform PEM -pubout? ? ? ? 以明文輸出公鑰內(nèi)容:$ openssl rsa -inpublic.pem -outpublic.txt -pubin -pubout -text? ? ? ? 使用公鑰加密小文件:$ openssl rsautl -encrypt -pubin -inkeypublic.pem -in msg.txt -out msg.bin? ? ? ? 使用私鑰解密小文件:$ openssl rsautl -decrypt -inkeyprivate.pem -in msg.bin -out a.txt? ? ? ? 將私鑰轉(zhuǎn)換成 DER 格式:$ openssl rsa -inprivate.pem -outprivate.der -outform der? ? ? ? 將公鑰轉(zhuǎn)換成 DER 格式:$ openssl rsa -inpublic.pem -outpublic.der -pubin -outform der? ? ? ? -----------------
7.數(shù)字簽名
1.數(shù)字簽名的應(yīng)用場景? ? 答:需要嚴(yán)格驗(yàn)證發(fā)送方身份信息情況2.數(shù)字簽名原理1)客戶端處理? ? ? ? ①對(duì)"消息"進(jìn)行 HASH 得到"消息摘要"②發(fā)送方使用自己的私鑰對(duì)"消息摘要"加密(數(shù)字簽名)? ? ? ? ③把數(shù)字簽名附著在"報(bào)文"的末尾一起發(fā)送給接收方2)服務(wù)端處理? ? ? ? ①對(duì)"消息"HASH 得到"報(bào)文摘要"②使用公鑰對(duì)"數(shù)字簽名"解密? ? ? ? ③對(duì)結(jié)果進(jìn)行匹配
7.png
8.數(shù)字證書
1.簡單說明? ? 證書和駕照很相似麦轰,里面記有姓名乔夯、組織、地址等個(gè)人信息款侵,以及屬于此人的公鑰末荐,并有認(rèn)證機(jī)構(gòu)施加數(shù)字簽名,只要看到公鑰證書,我們就可以知道認(rèn)證機(jī)構(gòu)認(rèn)證該公鑰的確屬于此人2.數(shù)字證書的內(nèi)容1)公鑰2)認(rèn)證機(jī)構(gòu)的數(shù)字簽名3.證書的生成步驟1)生成私鑰 openssl genrsa -outprivate.pem10242)創(chuàng)建證書請(qǐng)求 openssl req -new-keyprivate.pem -out rsacert.csr3)生成證書并簽名新锈,有效期10年 openssl x509 -req -days3650-in rsacert.csr -signkeyprivate.pem -out rsacert.crt4)將 PEM 格式文件轉(zhuǎn)換成 DER 格式 openssl x509 -outform der -in rsacert.crt -out rsacert.der5)導(dǎo)出P12文件 openssl pkcs12 -export-out p.p12 -inkeyprivate.pem -in rsacert.crt4.iOS開發(fā)中的注意點(diǎn)1)在iOS開發(fā)中甲脏,不能直接使用 PEM 格式的證書,因?yàn)槠鋬?nèi)部進(jìn)行了Base64編碼妹笆,應(yīng)該使用的是DER的證書块请,是二進(jìn)制格式的2)OpenSSL默認(rèn)生成的都是PEM格式的證書
9.HTTPS的基本使用
1.https簡單說明? ? HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的HTTP通道晾浴,簡單講是HTTP的安全版负乡。? ? 即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL脊凰,因此加密的詳細(xì)內(nèi)容就需要SSL抖棘。 它是一個(gè)URI scheme(抽象標(biāo)識(shí)符體系),句法類同http:體系狸涌。用于安全的HTTP數(shù)據(jù)傳輸切省。? ? https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默認(rèn)端口及一個(gè)加密/身份驗(yàn)證層(在HTTP與TCP之間)帕胆。2.HTTPS和HTTP的區(qū)別主要為以下四點(diǎn):? ? ? ? 一朝捆、https協(xié)議需要到ca申請(qǐng)證書,一般免費(fèi)證書很少懒豹,需要交費(fèi)芙盘。? ? ? ? 二、http是超文本傳輸協(xié)議脸秽,信息是明文傳輸蛉加,https 則是具有安全性的ssl加密傳輸協(xié)議讹堤。? ? ? ? 三歇攻、http和https使用的是完全不同的連接方式粗恢,用的端口也不一樣,前者是80,后者是443囚衔。? ? ? ? 四挖腰、http的連接很簡單,是無狀態(tài)的练湿;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸猴仑、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全鞠鲜。3.簡單說明1)HTTPS的主要思想是在不安全的網(wǎng)絡(luò)上創(chuàng)建一安全信道宁脊,并可在使用適當(dāng)?shù)募用馨头?wù)器證書可被驗(yàn)證且可被信任時(shí)断国,對(duì)竊聽和中間人攻擊提供合理的保護(hù)贤姆。2)HTTPS的信任繼承基于預(yù)先安裝在瀏覽器中的證書頒發(fā)機(jī)構(gòu)(如VeriSign、Microsoft等)(意即“我信任證書頒發(fā)機(jī)構(gòu)告訴我應(yīng)該信任的”)稳衬。3)因此霞捡,一個(gè)到某網(wǎng)站的HTTPS連接可被信任,如果服務(wù)器搭建自己的https 也就是說采用自認(rèn)證的方式來建立https信道薄疚,這樣一般在客戶端是不被信任的碧信。4)所以我們一般在瀏覽器訪問一些https站點(diǎn)的時(shí)候會(huì)有一個(gè)提示,問你是否繼續(xù)街夭。4.對(duì)開發(fā)的影響砰碴。4.1如果是自己使用NSURLSession來封裝網(wǎng)絡(luò)請(qǐng)求,涉及代碼如下板丽。- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{NSURLSession*session = [NSURLSessionsessionWithConfiguration:[NSURLSessionConfigurationdefaultSessionConfiguration] delegate:selfdelegateQueue:[NSOperationQueuemainQueue]];NSURLSessionDataTask*task =? [session dataTaskWithURL:[NSURLURLWithString:@"https://www.apple.com"] completionHandler:^(NSData*data,NSURLResponse*response,NSError*error) {NSLog(@"%@", [[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding]);? ? }];? ? [task resume];}/*
只要請(qǐng)求的地址是HTTPS的, 就會(huì)調(diào)用這個(gè)代理方法
我們需要在該方法中告訴系統(tǒng), 是否信任服務(wù)器返回的證書
Challenge: 挑戰(zhàn) 質(zhì)問 (包含了受保護(hù)的區(qū)域)
protectionSpace : 受保護(hù)區(qū)域
NSURLAuthenticationMethodServerTrust : 證書的類型是 服務(wù)器信任
*/- (void)URLSession:(NSURLSession*)session didReceiveChallenge:(NSURLAuthenticationChallenge*)challenge completionHandler:(void(^)(NSURLSessionAuthChallengeDisposition,NSURLCredential*))completionHandler{//? ? NSLog(@"didReceiveChallenge %@", challenge.protectionSpace);NSLog(@"調(diào)用了最外層");// 1.判斷服務(wù)器返回的證書類型, 是否是服務(wù)器信任if([challenge.protectionSpace.authenticationMethodisEqualToString:NSURLAuthenticationMethodServerTrust]) {NSLog(@"調(diào)用了里面這一層是服務(wù)器信任的證書");/*
NSURLSessionAuthChallengeUseCredential = 0,? ? ? ? ? ? ? ? ? ? 使用證書
NSURLSessionAuthChallengePerformDefaultHandling = 1,? ? ? ? ? ? 忽略證書(默認(rèn)的處理方式)
NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2,? ? 忽略書證, 并取消這次請(qǐng)求
NSURLSessionAuthChallengeRejectProtectionSpace = 3,? ? ? ? ? ? 拒絕當(dāng)前這一次, 下一次再詢問
*///? ? ? ? NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];NSURLCredential*card = [[NSURLCredentialalloc]initWithTrust:challenge.protectionSpace.serverTrust];? ? ? ? completionHandler(NSURLSessionAuthChallengeUseCredential, card);? ? }}5.ATS1)iOS9中新增App Transport Security(簡稱ATS)特性, 讓原來請(qǐng)求時(shí)候用到的HTTP呈枉,全部都轉(zhuǎn)向TLS1.2協(xié)議進(jìn)行傳輸。2)這意味著所有的HTTP協(xié)議都強(qiáng)制使用了HTTPS協(xié)議進(jìn)行傳輸埃碱。3)如果我們?cè)趇OS9下直接進(jìn)行HTTP請(qǐng)求是會(huì)報(bào)錯(cuò)猖辫。系統(tǒng)會(huì)告訴我們不能直接使用HTTP進(jìn)行請(qǐng)求,需要在Info.plist中控制ATS的配置砚殿。"NSAppTransportSecurity"是ATS配置的根節(jié)點(diǎn)啃憎,配置了節(jié)點(diǎn)表示告訴系統(tǒng)要走自定義的ATS設(shè)置。"NSAllowsAritraryLoads"節(jié)點(diǎn)控制是否禁用ATS特性似炎,設(shè)置YES就是禁用ATS功能辛萍。4)有兩種解決方法,一種是修改配置信息繼續(xù)使用以前的設(shè)置羡藐。? ? 另一種解決方法是所有的請(qǐng)求都基于基于"TLS 1.2"版本協(xié)議贩毕。(該方法需要嚴(yán)格遵守官方的規(guī)定,如選用的加密算法传睹、證書等)/*
ATS默認(rèn)的條件
1)服務(wù)器TLS版本至少是1.2版本
2)連接加密只允許幾種先進(jìn)的加密
3)證書必須使用SHA256或者更好的哈希算法進(jìn)行簽名耳幢,要么是2048位或者更長的RSA密鑰,要么就是256位或更長的ECC密鑰。
*/AFSecurityPolicy睛藻,內(nèi)部有三個(gè)重要的屬性启上,如下:AFSSLPinningMode SSLPinningMode;//該屬性標(biāo)明了AFSecurityPolicy是以何種方式來驗(yàn)證BOOLallowInvalidCertificates;//是否允許不信任的證書通過驗(yàn)證,默認(rèn)為NOBOOLvalidatesDomainName;//是否驗(yàn)證主機(jī)名店印,默認(rèn)為YES"AFSSLPinningMode"枚舉類型有三個(gè)值冈在,分別是AFSSLPinningModeNone、AFSSLPinningModePublicKey按摘、AFSSLPinningModeCertificate包券。"AFSSLPinningModeNone"代表了AFSecurityPolicy不做更嚴(yán)格的驗(yàn)證,"只要是系統(tǒng)信任的證書"就可以通過驗(yàn)證炫贤,不過溅固,它受到allowInvalidCertificates和validatesDomainName的影響;"AFSSLPinningModePublicKey"是通過"比較證書當(dāng)中公鑰(PublicKey)部分"來進(jìn)行驗(yàn)證兰珍,通過SecTrustCopyPublicKey方法獲取本地證書和服務(wù)器證書侍郭,然后進(jìn)行比較,如果有一個(gè)相同掠河,則通過驗(yàn)證亮元,此方式主要適用于自建證書搭建的HTTPS服務(wù)器和需要較高安全要求的驗(yàn)證;"AFSSLPinningModeCertificate"則是直接將本地的證書設(shè)置為信任的根證書唠摹,然后來進(jìn)行判斷爆捞,并且比較本地證書的內(nèi)容和服務(wù)器證書內(nèi)容是否相同,來進(jìn)行二次判斷勾拉,此方式適用于較高安全要求的驗(yàn)證煮甥。如果HTTPS服務(wù)器滿足ATS默認(rèn)的條件,而且SSL證書是通過權(quán)威的CA機(jī)構(gòu)認(rèn)證過的望艺,那么什么都不用做苛秕。如果上面的條件中有任何一個(gè)不成立,那么都只能修改ATS配置找默。
附:HTTP 和HTTPS的區(qū)別
HTTP:當(dāng)客戶端發(fā)送請(qǐng)求,那么服務(wù)器會(huì)直接返回?cái)?shù)據(jù).
HTTP.png
HTTPS:當(dāng)客戶端第一次發(fā)送請(qǐng)求的時(shí)候艇劫,服務(wù)器會(huì)返回一個(gè)包含公鑰的受保護(hù)空間(也成為證書),當(dāng)我們發(fā)送請(qǐng)求的時(shí)候惩激,公鑰會(huì)將請(qǐng)求加密再發(fā)送給服務(wù)器店煞,服務(wù)器接到請(qǐng)求之后,用自帶的私鑰進(jìn)行解密风钻,如果正確再返回?cái)?shù)據(jù)顷蟀。這就是 HTTPS 的安全性所在。
HTTPS.png