• <ul id="cgeq2"></ul>
  • 歡迎您光臨深圳塔燈網(wǎng)絡(luò)科技有限公司!
    電話圖標(biāo) 余先生:13699882642

    網(wǎng)站百科

    為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴

    Android 證書鎖

    發(fā)表日期:2016-12 文章編輯:小燈 瀏覽次數(shù):3097


    在講解本篇文章之前可以先簡(jiǎn)單了解一下關(guān)于Https、TLS/SSL和CA證書的基礎(chǔ)知識(shí)

    為什么需要數(shù)字證書鎖

    在Android設(shè)備中,一般由系統(tǒng)校驗(yàn)服務(wù)端數(shù)字證書的合法性,用可信CA簽發(fā)的數(shù)字證書的網(wǎng)站才可以正常訪問,私有簽發(fā)的數(shù)字證書的網(wǎng)站無法訪問(需要手動(dòng)安裝證書并信任)。這種作法不能抵御在用戶設(shè)備上安裝證書(將中間人服務(wù)器的證書放到設(shè)備的信任列表中,如charles的對(duì)https抓包的做法)進(jìn)行中間人攻擊。如果客戶端沒有做任何主動(dòng)性的防御,很可能被不法分子利用偽造CA證書進(jìn)行中間人攻擊。受信任的CA(證書頒發(fā)機(jī)構(gòu))有好幾百個(gè),任何一家受信任的CA都可以簽發(fā)任意網(wǎng)站的證書,這些證書在客戶端看來都是合法的。如果客戶端使用證書鎖,它會(huì)強(qiáng)制校驗(yàn)服務(wù)端的證書,一旦發(fā)現(xiàn)不匹配就會(huì)禁止通信。

    android證書鎖的用法

    ** 1、Certificate Pinning**
    其實(shí)Certificate Pinning是OkHttp 實(shí)現(xiàn)的一個(gè)類似于HPKP的技術(shù),目的是為了使客戶端可以有主動(dòng)的信任CA的權(quán)利,它的工作原理就是使用預(yù)先設(shè)置的證書指紋和服務(wù)器傳過來的證書鏈中的證書指紋進(jìn)行匹配,只要有任何一對(duì)指紋匹配成功,則認(rèn)為是一次合法的連接,否則禁止本次鏈接

    ** 2、預(yù)埋證書**
    把數(shù)字證書以文件或者字符串的形式寫在本地,在SSL握手的時(shí)候用本地預(yù)埋的證書和服務(wù)器傳過來的證書進(jìn)行匹配,如果匹配不成功則禁止本次通信

    Certificate Pinning和預(yù)埋證書做法的比較

    先貼上代碼 以OkHttp為例
    ** 預(yù)埋證書的寫法**
    首先定義一個(gè)類實(shí)現(xiàn)類實(shí)現(xiàn)X509TrustManager接口,實(shí)現(xiàn)對(duì)客戶端證書鏈的校驗(yàn)方法和服務(wù)端證書鏈的校驗(yàn)方法,不寫的話表示不做任何校驗(yàn),默認(rèn)信任所有證書鏈中的證書

    證書信任管理器

    讀取客戶端預(yù)埋的證書


    預(yù)埋的證書

    配置Client

    new OkHttpClient.Builder() .sslSocketFactory(getSSLFactory(),new MyX509TrustManager).build(); 

    Certificate Pinning的寫法

    妥妥的幾行代碼搞定

    new OkHttpClient.Builder() .certificatePinner(new CertificatePinner.Builder() .add("b.public.com", "sha256/**********") .add("b.public.com", "sha256/**********") .add("b.public.com", "sha256/**********") .build()) .build(); 

    兩種做法相比較之下,Certificate Pinning更為簡(jiǎn)潔,并且也把指紋和hostname 綁定起來,這樣做的好處就是對(duì)指定的hostname所在服務(wù)器發(fā)送過來的證書指紋進(jìn)行校驗(yàn),在一定程度上既控制了證書信任同時(shí)也考慮到了靈活性。而預(yù)埋證書的做法要實(shí)現(xiàn)相同的功能,僅僅實(shí)現(xiàn)上述代碼還不夠,還需要在Client配置的時(shí)候加上hostnameVerifier校驗(yàn)。

    ** 完整代碼的實(shí)現(xiàn)**

     String hostname = "publicobject.com"; String pinner = "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; CertificatePinner certificatePinner = new CertificatePinner.Builder() .add(hostname,pinner) .build();OkHttpClient client = OkHttpClient.Builder() .certificatePinner(certificatePinner) .build(); Request request = new Request.Builder() .url("https://" + hostname) .build(); client.newCall(request).execute(); 

    pinner就是證書指紋,sha256表示的是哈希值得一種算法,pinner也可以是 sha1/*********** ,具體pinner要根據(jù)購(gòu)買證書所支持的配置,SSL Labs這個(gè)服務(wù)通過hostname可以查看的證書指紋。
    在SSL握手的時(shí)候,會(huì)檢查配置中的指紋和服務(wù)端傳過來的證書證的指紋是否相匹配,只要有一個(gè)指紋匹配,則進(jìn)行下一步,否則直接拋出異常,禁止本次連接。相關(guān)源代碼實(shí)現(xiàn)如下:

    public void check(String hostname, List<Certificate> peerCertificates) throws SSLPeerUnverifiedException { List<Pin> pins = findMatchingPins(hostname); if (pins.isEmpty()) return;if (certificateChainCleaner != null) { peerCertificates = certificateChainCleaner.clean(peerCertificates, hostname); }for (int c = 0, certsSize = peerCertificates.size(); c < certsSize; c++) { X509Certificate x509Certificate = (X509Certificate) peerCertificates.get(c);// Lazily compute the hashes for each certificate. ByteString sha1 = null; ByteString sha256 = null;for (int p = 0, pinsSize = pins.size(); p < pinsSize; p++) { Pin pin = pins.get(p); if (pin.hashAlgorithm.equals("sha256/")) { if (sha256 == null) sha256 = sha256(x509Certificate); if (pin.hash.equals(sha256)) return; // Success! } else if (pin.hashAlgorithm.equals("sha1/")) { if (sha1 == null) sha1 = sha1(x509Certificate); if (pin.hash.equals(sha1)) return; // Success! } else { throw new AssertionError(); } } } 

    OkHttpClient驗(yàn)證證書指紋,在CertificatePinner類中有該方法的作用是確認(rèn)證書中至少有一個(gè)和綁定的指紋是否匹配;如果匹配則Okhttp認(rèn)為TLS握手成功,如果不匹配則失敗,并且拋出SSLPerrUnverifiedException異常。(如果沒有證書綁定,則OKHttp認(rèn)為TLS握手成功)。具體調(diào)用過程和實(shí)現(xiàn)細(xì)節(jié)可以查看OkHttp的RealConnection這個(gè)類。

    關(guān)于中間人攻擊

    目前在網(wǎng)絡(luò)通信中,中間人的存在是無法杜絕的,因?yàn)橹虚g人利用的不是漏洞,而是利用網(wǎng)絡(luò)協(xié)議本身的特性。只要是它又能里轉(zhuǎn)發(fā)數(shù)據(jù)包,并且實(shí)現(xiàn)相應(yīng)的網(wǎng)絡(luò)協(xié)議,就可以接入到終端和服務(wù)器之間實(shí)現(xiàn)中間人攻擊。
    在HTTPS網(wǎng)絡(luò)中想做中間人攻擊,必須要在握手之前接入到網(wǎng)絡(luò)中,一旦HTTPS握手過程結(jié)束,之后傳輸?shù)臄?shù)據(jù)完全都是加密的,解密非常的困難。想要破解加密的數(shù)據(jù)最簡(jiǎn)單的方法就是知道瀏覽器和網(wǎng)站協(xié)商的那個(gè)密碼是什么,但是密碼還是在握手過程中被RSA,DSA這種非對(duì)稱加密算法加密的,不知道私鑰還沒有辦法解密,同時(shí)瀏覽器和網(wǎng)站之間到底使用什么加密算法來進(jìn)行加密還是在握手之間協(xié)商的,而這些方法都是保存在發(fā)給瀏覽器的證書中,于是最簡(jiǎn)單的方法就是偽造一個(gè)證書,同時(shí)要實(shí)現(xiàn)TLS協(xié)議,在握手開始前進(jìn)行中間人攻擊。另外,HTTPS握手過程對(duì)密碼協(xié)商的驗(yàn)證是很嚴(yán)格的,中間驗(yàn)證數(shù)據(jù)的環(huán)節(jié)一旦有異常,瀏覽器和網(wǎng)站都會(huì)中斷連接,因此偽造SSL證書進(jìn)行中間人攻擊目前是對(duì)HTTPS網(wǎng)絡(luò)最好攻擊方式,但是偽造的證書無法經(jīng)過瀏覽器的受信檢查會(huì)給出提示。


    中間人攻擊圖

    更多關(guān)于各種中間人攻擊的相關(guān)知識(shí),我推薦這篇文章,里面有各種攻擊手段和原理講解(http://www.cnblogs.com/LittleHann/p/3741907.html)

    相關(guān)文章

    HTTPS基礎(chǔ)知識(shí)
    TLS/SSL工作原理
    TLS/SSL握手過程
    CA證書介紹


    本頁內(nèi)容由塔燈網(wǎng)絡(luò)科技有限公司通過網(wǎng)絡(luò)收集編輯所得,所有資料僅供用戶學(xué)習(xí)參考,本站不擁有所有權(quán),如您認(rèn)為本網(wǎng)頁中由涉嫌抄襲的內(nèi)容,請(qǐng)及時(shí)與我們聯(lián)系,并提供相關(guān)證據(jù),工作人員會(huì)在5工作日內(nèi)聯(lián)系您,一經(jīng)查實(shí),本站立刻刪除侵權(quán)內(nèi)容。本文鏈接:http://www.juherenli.com/20407.html
    相關(guān)開發(fā)語言
     八年  行業(yè)經(jīng)驗(yàn)

    多一份參考,總有益處

    聯(lián)系深圳網(wǎng)站公司塔燈網(wǎng)絡(luò),免費(fèi)獲得網(wǎng)站建設(shè)方案及報(bào)價(jià)

    咨詢相關(guān)問題或預(yù)約面談,可以通過以下方式與我們聯(lián)系

    業(yè)務(wù)熱線:余經(jīng)理:13699882642

    Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

    • QQ咨詢
    • 在線咨詢
    • 官方微信
    • 聯(lián)系電話
      座機(jī)0755-29185426
      手機(jī)13699882642
    • 預(yù)約上門
    • 返回頂部
    国产福利微拍精品一区二区| 国产成人精品久久久久| 亚洲婷婷第一狠人综合精品| 精品无码人妻一区二区三区不卡| 久久国产精品久久精| 精品久久久久久蜜臂a∨| 免费国产精品视频| 久久99国产精品久久久| 国产精品制服丝袜一区| 久久精品视频16| 国产精品一区二区在线观看| 国产精品视频白浆免费视频| 国产精品久久无码一区二区三区网| 99re热视频这里只精品| 日韩国产精品视频| 中文字幕精品无码一区二区| 亚洲国产精品日韩av不卡在线 | 亚洲AV无码一区二区三区久久精品 | 国产精品麻豆高清在线观看 | 99精品一区二区三区| 国产精品100页| 久久精品国产亚洲AV未满十八| 国内精品久久久久影院一蜜桃| 香蕉久久国产精品免| 亚洲国产精品一区二区久久hs | 国产午夜亚洲精品不卡电影| 久久亚洲精品国产精品婷婷| 麻豆文化传媒精品一区二区| 久久久精品人妻无码专区不卡| 亚洲人成色777777精品| 精品国产第一国产综合精品| 5555国产在线观看精品| 99re6在线视频精品免费下载| 国产精品H片在线播放| 国产精品青草久久久久婷婷| 久久99精品国产自在现线小黄鸭| 日韩AV无码精品人妻系列| 亚洲一级Av无码毛片久久精品| 国产精品久久久久影视不卡| 精品国产乱码久久久久久1区2区| 精品国产99久久久久久麻豆|