打造更安全的Android應用程式! 學習導入Samsung Knox SDK的簡單方法

Samsung Knox SDK 是一個安全解決方案
提供多種安全性控制和管理選項,讓企業輕鬆地保護其敏感數據和應用程序。 可以讓開發者在應用程式中實現以下功能:

安全容器:可用於分隔和保護企業數據和應用程式,以防止非授權的訪問。
VPN:可用於建立安全的VPN連接,以保護網絡流量和數據。
加密:可用於將數據加密,以保護其在傳輸過程中的安全性。
策略管理:可用於管理設備設置和策略,例如密碼規則、設備鎖定、數據清除等。
身份驗證:可用於實現強大的身份驗證功能,包括生物識別驗證和智能卡驗證。
安全更新:可用於安全地更新應用程式和操作系統,以提高整體安全性。

這篇文章主要會解說
Samsung knox sdk 導入時的一些基本觀念
以及遇到的坑跟你們分享

前導
  • 目前支持與對應的samsung 手機與版本:參考
    • 不支援knox的時候,官方提供的建議與方法:參考
    • 各knox服務參考
  • 下載、安裝Knox SDK
    • 根據官網Install the SDK 將相關SDK導入專案
    • 導入時會遇到要用哪一版可參考mapping表
    • 需取得license key
      • 若開發的是 Knox 2.7前的版本,生成的license key 可以「選擇」向後兼容的key
      • license key 分為 Development Key、與 Commercial Key 可根據測試發布 配置
      • 關聯apk:只有關聯的apk才能使用生成的license key (在後台有個optional的選項,可以打勾關聯或不選)
      • 實測後,Development Key 同一帳號下只能有一把 -> license key規則與限制
    • 開發時激活license key 不同Knox版本有不同方式 : 參考這
    • Knox開發相關範例官方有提供:參考

    • Knox license
      • license可用權限列表
      • license三種比較好讀版
      • 後台實測後看到SDK license key 更細分為:
        • KPE Development : 測試環境用, key 存活時間0.5年
        • KPE Standard: 允許存取 Standard permissions, 10,000,000 seats, key 存活時間2年
        • KPE Premium: 允許存取 Standard, Premium, and Custom permissions, 10,000,000 seats ,key 存活時間2年
        • KPE DualDAR: 允許存取 Standard, Premium, Custom and DualDAR permissions, 與代理商洽談按年數或永久訂閱
      • 開發權限聲明:
        • Knox 3.0 提供宣告部分權限,可在AndroidManifest.xml宣告Knox權限,如果未宣告,則預設全部Knox權限開啟,如果宣告,則只允許使用宣告的權限,參考
    • 目前與原生AirDroid Biz用的 DevicePolicyManager初步對比 (僅先比對相似API,可討論想用哪些,再測試實際行為)
      • 所有權限可看這
      • 實際比對常用DevicePolicyManager與 Knox提供的功能參考
    • 連結參考
Knox架構開發者文件
  • Samsung Knox提供 web-base 與 device-base兩種方式來做使用,其目前的架構:

Activite license note
  • android 6.0.1 samsung s6 ,測試Knox 3.8
    • 下載samsung開發者後台的Knox 3.8版 ,使用方法knox3.7.1 higher,解析URI時,報exception
    • 改用knox2.7 lower報出java.lang.RuntimeException: Stub!
      -> 解決方法:加入supportlib.jar並加入gradle dependencies
      用IDE的Add as library功能的需注意以下: 這裡需將原本knox sdk與supportlib 兩個jar檔案改成以下,runtime才不會再報錯

    • 上述成功後激活license key時,需啟動admin權限,不然會回傳internal error

    • 這裡有個坑 啟動license時需使用Boardcast接收返回結果
      • 但目前官方文件顯示 knox 啟用license 的廣播action 是使用 但是舊版 Knox API level 19 (Knox 2.6) 上實測Knox不會發上面Action,而是如下
      • 這邊看到官方說 2.x升級3.x時nameSpace有改 (Knox api 30這版開始改了)

      • 所以他這邊提供一個方法:參考
        • 就是加入supportlib.jar 並把上方連結內的相關receiver加入Manifest.xml
  • android 12 samsung A52s ,測試Knox 3.8

    • 使用knox3.7.1 higherknox2.7 lower 方法皆可以啟用license key
  • 其他行為
    • 開發者後台目前能下載的有 Knox SDK 3.3 ~ 3.8 ,
      上述test case都使用Knox3.8 能過編譯,
      但可能部分行為僅支持其對應的版本,
      後來有在Android 12上測試 Knox 3.3,
      這時用knox3.7.1 higheractive就會崩潰,
      在Android 6.0.1 Knox 3.8 使用knox3.7.1 higheractive同樣會崩潰
開發遇到的事及研究
  • Vpn 開發
    • 根據開發文件 有提供兩種Vpn方案
      1. 跟之前研究的原生Android Vpn Service類似 Knox在此基礎上擴展相關功能:參考

      2. 另一個則是GenericVpnPolicy API
        createVpnProfile,其提到提供對應的JSON格式來設定其vpn profile
        不同json format對應不同模式
        可參考:vpn JSON格式 -> 目前Knox文件與之前需求類似的有 :
        ipsec Hybrid RSA 、PSK、xauth RSA、IKE2 PSK、IKE2 RSA…等等
        另外文件中寫到Knox api level 35 Deprecated -> 對應至Android 12

  • LockScreen Password
    • 生物解鎖,設置指紋解鎖或臉部解鎖:點此
分享實際開發啟動license與knox permission的思路

其實如何啟動Knox只需要看官方文件上的方式去想就可
這邊我提供我規劃的思維給大家,如下:

  • 目前將它包成dagger2 module
  • 結構如圖 :
    knox_module.png
    • ExampleKnoxActivity 用來demo 裡面會放一些其他類實作的呼叫範例
    • 之後只需要inject KnoxManager跟initKnoxModule就能使用

    knox_inject_01.png

    knox_inject_02.png

    • KnoxLicense內存放一些常數與key值可再自行變更,未來如要不上傳key也可再調整
    • 實際使用只需了解KnoxManager
    • 主要新增了註冊/解綁knox廣播、起/停用license等功能 後續主要會從KnoxManager新增相關func
    • 其中 KnoxLicenseReceiver 因為官方Knox3.7含以下的只有提供Boardcast的方式來接收激活成功與否
      這邊利用Kotlin特性包好
      實際使用knoxManager內的方法註冊並返回結果
      knox_inject_03.png

理論上用Koin當DI也可,而且個人也比較喜歡Koin,之後有空再寫一篇koin寫的DI

  • 加入knox permission
    • 加入權限宣告至manifest knox_permission.png
    • Knox API 30是新舊包名的分水嶺,
      這次實測Knox API 19 無法使用新的permission request 如:
      com.samsung.android.knox.permission.KNOX_APP_MGMT
      使用com.example.supportlibclient.SUPPORT_PERMISSION才成功

    • runtime permission knox_run_time_permission_01.png
  • 其他相關
    部分API操控需解析對應URI 這邊拉出共用的
    knox_constant.png

You might also enjoy