Android正確使用HTTPS

2021-02-23 學安全

Android正確使用HTTPS

前言

最近代碼審計,發現很多開發都不會校驗HTTPS證書,通常所看到的錯誤代碼如下:

1、未正確實現校驗服務端證書

2、未正確實現校驗服務端證書中的域名是否相符

3、信任所有域名

一般情況下,在Android中,訪問HTTPS網站通常代碼如下(以URLConnection為例):

URL url = new URL("https://www.baidu.com");

HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();

urlConnection.setConnectTimeout(10*1000);

InputStream inputStream = urlConnection.getInputStream();

//讀取輸入流

reader = new BufferedReader(new InputStreamReader(inputStream));

String line;

while ((line = reader.readLine()) != null) {

result.append(line);

}

return result.toString();

以上代碼,訪問CA籤發證書的HTTPS網站是沒問題的,但是,通常程序猿寫代碼是在測試環境下進行測試,測試環境下的HTTPS證書一般都是使用openssl生成的自籤名證書,此時使用上面的代碼訪問,就會報如下錯誤:

當測試人員拿app去測試時,訪問的是自籤名的測試環境,測試人員發現訪問不了,就會報bug,這時開發就去排查,開發找到javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.錯誤,然後程序猿就去百度,

百度的結果如下,這時程序猿會從第一個開始看起。

我們點進去百度搜索的第一個看看,如下:

天吶,博主提供了代碼,然後開發一頓操作,

1

2

3

4

5

Ctrl+C

Ctrl+V

git add .

git commit -m "fix https"

git push

然後大家都這麼做,紛紛感謝博主,啊!!博主愛您!第二種很有用!

於是安全進行代碼審計的時候就難受了。

以上都是我的猜測,也不一定按我這個套路走,看學安全公眾號也就圖一樂,哈哈哈哈。

環境搭建

這裡我們用python3搭建簡單的HTTPS網站,

代碼如下:

# coding:utf-8

#

# @author: lyxhh

# @微信公眾號: 學安全

import web

from cheroot.server import HTTPServer

from cheroot.ssl.builtin import BuiltinSSLAdapter

HTTPServer.ssl_adapter = BuiltinSSLAdapter(

certificate='E:\\androidpro\\httpsdemo\\app\\src\\main\\assets\\server.crt',

private_key='E:\\androidpro\\httpsdemo\\app\\src\\main\\assets\\server_private.key')

urls = ("/.*", "lxh")

app = web.application(urls, globals())

class lxh:

    def GET(self):

        return 'hello, world!'

if __name__ == '__main__':

    app.run()

測試:

使用openssl生成server.crt與server_private.key,步驟如下:

1)生成自己的CA根證書

生成CA私鑰文件(ca_private.key):
openssl genrsa -out ca_private.key 2048

生成證書籤名請求CSR文件(ca.csr):
openssl req -new -key ca_private.key -out ca.csr

生成X.509格式的CA根證書ca_public.crt(公鑰證書):
openssl x509 -req -days 365 -in ca.csr -signkey ca_private.key -out ca_public.crt

2)生成服務端證書

先生成伺服器私鑰文件server_private.key:
openssl genrsa -out server_private.key 2048

生成證書籤名請求CSR文件(server.csr):
openssl req -new -key server_private.key -out server.csr

伺服器端用server.csr文件向CA機構申請籤名證書, 籤名過程需要CA的公鑰證書和私鑰參與,最終生成一個帶有CA籤名的伺服器端證書。
openssl x509 -req -CA ca_public.crt -CAkey ca_private.key -CAcreateserial -in server.csr -out server.crt

其中:

Common Name必須和網站域名一致,以便之後進行Host Name校驗。

修改手機hosts文件,

1

192.168.43.240 test.lxhsec.com

正確使用

1、正確校驗證書是否在有效期內,且證書鏈是否正確。

如果訪問的域名與證書內Common Name的域名一致,則正常訪問:

如果不一致,例如訪問test.lxhsec.com對應的ip192.168.43.240,報錯如下:

2、正確實現HostnameVerifier

再次訪問192.168.43.240,正常請求,如下:

3、主機名驗證策略改成嚴格模式

代碼打包到百度雲盤了,公眾號內回復獲取:HTTPS1

遇到的問題

修改/etc/hosts文件

解決:
https://blog.csdn.net/dzkdxyx/article/details/82877755

參考資料

https://developer.android.com/training/articles/security-ssl

相關焦點

  • Android開發 - 獲取系統輸入法高度的正確姿勢
    作者丨ExampleCodehttps://www.jianshu.com/p/6ab9c0507705
  • 使用 Android 模擬器容器來實現持續集成測試
    這些容器可以讓您輕鬆找到並運行正確版本的模擬器,而不必再因為依賴管理而頭疼。其同時也讓持續集成和交付系統增加自動化測試變得更為簡單,而且不用擔心維護大量實體設備所產生的花銷。去年的早些時候,我們發布了 Android 模擬器下載以及 Docker 鏡像生成的腳本來幫助開發者部署和調試遠程模擬器。這些腳本簡化了尋找正確版本的系統鏡像、管理系統依賴以及運行 Android 模擬器的流程。
  • 在Android中藉助TensorFlow使用機器學習
    在接觸真正的機器學習之前,我們先來看一個在Android App中使用機器學習的例子。原文地址:https://blog.mindorks.com/android-tensorflow-machine-learning-example-ff0e9b2654cc#.i8l12xa39我們知道谷歌開源了在Android中可以使用機器學習的Library-TensorFlow。
  • Android Studio3.5及使用AndroidX的一些坑
    去年的androidx,到今年studio3.5後都默認使用androidx了。其實對於我們開發者而言,我們都只是調用他的api,對我們的影響不大??!可是人性的習慣,還是比較不那麼容易改變的。現在我就來說說我遇到的一些坑吧。話說還是很嚴重。不知道androidx的請自行百度。看最後一樣,Use androidx.* artifacts。而且不能取消掉的。
  • Android 7.0 以上Fiddler/Charles手機抓https
    一、聲明大家都知道android7.0以上,有的android的機制不再信任用戶證書,導致https協議無法抓包。
  • Android Https相關完全解析 當OkHttp遇到Https
    就是自己通過keytool去生成一個證書,然後使用,並不是CA機構去頒發的。使用自籤名證書的網站,大家在使用瀏覽器訪問的時候,一般都是報風險警告,好在有個大名鼎鼎的網站就是這麼幹的,https://kyfw.12306.cn/otn/,點擊進入12306的購票頁面就能看到了。
  • Android 持續滑動布局 ConsecutiveScrollerLayout 的使用
    項目地址:https://github.com/donkingliang/ConsecutiveScrollerConsecutiveScroller的設計思路和源碼分析:https://www.jianshu.com/p/34d2c5cdb3fb
  • Android平臺HTTPS抓包全方案
    /   作者簡介   /本篇文章轉自MegatronKing的博客,分享了Android中https抓包相關的解決方案,希望對大家有所幫助!更多HttpCanary的資料,請見:GitHub地址:https://github.com/MegatronKing/HttpCanary/   抓包原理   /幾乎所有網絡數據的抓包都是採用中間人的方式(MITM),包括大家常用的Fiddler、Charles等知名抓包工具,HttpCanary同樣是使用中間人的方式進行抓包。
  • 【他山之石】使用PyTorch 1.6 for Android
    要運行這個resnet18的模型到Android上,我們有3種方式:來自jcenter倉庫的預編譯的pytorch aar,請參考下面的章節:使用預編譯的PyTorch for Android AAR;連結原生的lib庫(如果使用了AAR,那也是把AAR中的頭文件和庫文件解壓出來,然後使用C++的方式去連結),請參考https://github.com/pytorch
  • Android Studio 3.1.X 導入項目的正確姿勢
    使用Android Studio 3.1.2導入以前的項目遇到一些坑,藉此機會把相關處理方法分享出來。:gradle:2.3.3'           }}allprojects {    repositories {        jcenter()        maven {url "https://jitpack.io" }    }}task clean(type: Delete
  • Android滲透測試HTTPS證書校驗繞過
    日常Android滲透過程中,會經常遇見https證書校驗(http就不存在證書校驗了,直接抓包便可),不能抓取數據包。
  • Android SVG使用進階
    它的優點在於節約空間,使用方便。Android也在5.0中新增了對使用svg矢量圖支持,現在網上也有大把關於svg的文章但是使用時還是有遇到了許多坑,所以在這裡我就總結了下我在使用svg過程中遇到的各種坑,希望對大家有所幫助。
  • Now in Android:02 - 歡迎使用 Android Studio 4.0 !
    文檔地址如下:https://developer.android.com/jetpack/androidx/migrate/artifact-mappings 下面是截止 1 月 22 日,Android X 的更新記錄:Fragment 1.2.0 版本更新1.2.0 中推薦使用 FragmentContainerView 替代原有的
  • 詳解使用 fastboot 為 Android 刷入原廠鏡像
    對於三星的設備,最好使用 Odin[5] 來進行刷機工作,我們在下文的連結中提供了相關指南。第一步 在你的電腦上安裝 ADB 和 Fastboot首先,你需要在你的電腦上安裝 ADB 和 Fastboot,只有有了它們你才能使用 Fastboot 命令刷入鏡像。
  • Android NDK開發掃盲及最新CMake的編譯使用
    傳送門:https://developer.android.com/ndk/guides/index.html官方文檔分別從以下幾個方面介紹了 NDK。(其實官方文檔中大部分都是的,並沒有使用 CMake)https://developer.android.com/ndk/guides/libs.html幸運的是, Github 上的官方示例裡面有個項目 hello-libs 實現了如何創建出靜態庫/動態庫,並引用它。現在我們把代碼拉下來看下具體是如何實現的。
  • Android各種視頻播放器使用
    這裡我總結了常用的視屏播放Videoview、mediaplayer+surfaceview、vitamio、jcplayer的使用方法並寫了各自的播放示例。用到的視頻地址:http://rbv01.ku6.com/omtSn0z_PTREtneb3GRtGg.mp4http://rbv01.ku6.com/7lut5JlEO-v6a8K3X9xBNg.mp4https://key003.ku6.com/movie/1af61f05352547bc8468a40ba2d29a1d.mp4https
  • Android 7.0關於HTTPS證書的適配講解
    同時提供網絡安全性配置規範證書的使用。根據官網的介紹,地址如下:https://developer.android.google.cn/training/articles/security-config.html#manifest 我們可以通過設置 network_security_config.xml 對非CA證書進行適配。
  • Android Camera2 使用總結
    最近在做自定義相機相關的項目,網上查了資料都是有關android.hardware.Camera的資料,開始使用的才發現這個類已經廢棄了。Android 5.0(21)之後android.hardware.Camera就被廢棄了,取而代之的是全新的android.hardware.Camera2 。
  • Android 樣式系統 | 主題背景覆蓋
    (只適用於單個 View 的樣式則恰恰相反)https://developer.android.google.cn/reference/android/content/Contexthttps://developer.android.google.cn/reference/android/content/res/Resources.Theme.html在樹結構中的任何層級上設置主題背景
  • 如何在Android Nougat中正確配置Burp Suite?
    這裡有兩種方法可以幫我們繞過它:注意:我在Windows 10上使用Burp Suite Pro完成了這些操作,使用的是Android 7.1(API25)Genymotion VM,但這些步驟應適用於任何設置。