自簽名證書報(bào)錯(cuò):javax.net.ssl.SSLPeerUnverifiedException: Hostname xxx not verified

背景

現(xiàn)在服務(wù)器都要求使用https了,正式商用時(shí),肯定要申請(qǐng)標(biāo)準(zhǔn)的商用ssl證書,但是測(cè)試時(shí),為了方便,需要采用自簽名證書.下面是在使用自簽名證書時(shí)遇到的問題.

問題描述

安卓客戶端通過okhttp訪問服務(wù)器報(bào)錯(cuò):

2019-05-24 09:35:37.988 24298-24343/com.cxyzy.note E/WM-WorkerWrapper: Work [ id=d948a142-a121-4b3d-aeeb-2d424f9e1f58, tags={ com.cxyzy.note.DataSyncWorker } ] failed because it threw an exception/error
    java.util.concurrent.ExecutionException: javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.186.80 not verified:
        certificate: sha256/XYM7pQnVRFEOtEDnlDn4sJD3jKX592BPsDyBp/I/cGI=
        DN: CN=192.168.186.80,OU=internet,O=cxyzy,C=CN
        subjectAltNames: [127.0.0.1, 127.0.0.1, localhost]
        at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:516)
        at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:475)
        at androidx.work.impl.WorkerWrapper$2.run(WorkerWrapper.java:290)

分析

證書最關(guān)鍵的是“常用名稱”即CN(CommonName)和“IP地址”,必須和服務(wù)器的ip地址一致,否則就會(huì)校驗(yàn)失敗.有兩種查看證書的方式:

  1. 利用keytool命令查看證書內(nèi)容
    keytool -v -list -keystore https_keystore.jks -alias server -keypass 123456 -storepass 123456
  2. 在瀏覽器查看證書內(nèi)容
    我在服務(wù)器端開放了一個(gè)get接口,通過瀏覽器來查看服務(wù)器證書.


解決方案

制作證書時(shí),“常用名稱”即CN(CommonName)和“IP地址”,保持和服務(wù)器的ip地址一致.
一般可以用openssl等命令來制作證書,我這邊用的是kotlin代碼來搞的.

安卓開發(fā)技術(shù)分享: http://www.itdecent.cn/p/442339952f26
點(diǎn)擊關(guān)注專輯,查看最新技術(shù)分享
更多技術(shù)總結(jié)好文,請(qǐng)關(guān)注:「程序園中猿」

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

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

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