背景
現(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)失敗.有兩種查看證書的方式:
- 利用keytool命令查看證書內(nèi)容
keytool -v -list -keystore https_keystore.jks -alias server -keypass 123456 -storepass 123456
-
在瀏覽器查看證書內(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)注:「程序園中猿」


