APP憑證綁定
什麼是憑證綁定(Certificate Pinning)
?簡單的來說,憑證綁定是防止攻擊者使用假憑證進行中間人攻擊的一種安全機制。換言之,若未確實做到憑證綁定,則有心人士便可利用假憑證嗅探傳輸中的加密內容,以MITM(Man-in-the-middle)手法攔截敏感資訊。
參考資料:
OkHttp憑證榜定
之前有介紹過HttpsUrlConnection憑證榜定的方式,有興趣的話可以到參考:HttpsURLConnection實作憑證綁定的方法
這裡將介紹如何實作OkHttp憑證榜定,詳細的程式碼可以參考SSLPinningOkHttp 先建立CertificatePinner的實例,再新增憑證參數即可。
CertificatePinner certPinner = new CertificatePinner.Builder()
.add("github.com",
"sha256/pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=")
.add("github.com",
"sha256/RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=")
.build();
接著將CertificatePinner
的實例加入OkHttpClient
內,之後如果可以正常連線代表已經有憑證榜定了。
private String connect(String url) throws IOException {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.certificatePinner(mCertPinner)
.build();
Request request = new Request.Builder()
.url(url)
.build();
Response response = okHttpClient.newCall(request).execute();
if(response.isSuccessful())
return "ok";
return null;
}
是不是比HttpsUrlConnection簡單多了。