Retrofit使用https

最近CTO使用第三方app評測工具檢測到項目中沒有使用https。接口的請求地址都是https的只是都設置了忽略證書....

證書

在PC上https的證書是cer格式,但是Android的似乎不支持,反正我使用cer的證書報了"Trust anchor for certification path not found"這個錯誤。網(wǎng)上看到有人將cer證書轉(zhuǎn)換成bks證書問題就完美解決了。

BKS證書制作

keytool -importcert -v -trustcacerts -alias 位置1
-file 位置2
-keystore 位置3 -storetype BKS
-providerclass org.bouncycastle.jce.provider.BouncyCastleProvider
-providerpath 位置4 
-storepass 位置5

位置1 給你的新證書起的別名;
位置2 cer證書的本地路徑;
位置3 生成的bks證書存儲的路徑;
位置4 步驟1中下載的jar文件所在的本地路徑;
位置5 設置一個密碼,代碼中加載證書會使用;

代碼中使用bks文件

1.將bks文件復制到raw文件夾里(也可以放在assets文件夾里,只是獲取流的方法不一樣)
2.獲取SSLSocketFactory

class HttpsUtils {
    companion object {
        fun getSSLSocketFactory(context: Context): SSLSocketFactory {
            val certificate = context.resources.openRawResource(R.raw.xxx)
            val keyStore = KeyStore.getInstance("BKS")
            keyStore.load(certificate, "123456".toCharArray())
            certificate?.close()
            val sslContext = SSLContext.getInstance("TLS")
            val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
            trustManagerFactory.init(keyStore)
            sslContext.init(null, trustManagerFactory.trustManagers, null)
            return sslContext.socketFactory
        }
    }
}

3.在Retrofit中設置

class RetrofitBuildUtils {
    companion object {
        fun retrofitBuild(context: Context): Retrofit {
            val retrofit: Retrofit
            val builder = OkHttpClient().newBuilder()       
            builder.sslSocketFactory(HttpsUtils.getSSLSocketFactory(context))
            val client = builder.build()
            retrofit = Retrofit.Builder()
                    .baseUrl(Config.getBaseUrl())
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(client)
                    .build()
            return retrofit
        }
    }
}

至此ok

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容