我正在使用StartSSL提供的免费SSL证书。我将PEM编码的证书添加到我的应用程序中。
该实现适用于我的三款Android手机(所有软糖),但三星Galaxy note 1(Android版本4.0.4)不起作用。
令人惊讶的是它没有给出SSLException,而是一个IllegalArgumentException。
更详细的例外
Caused by: java.lang.IllegalArgumentException: SSLSocketFactory is null
at javax.net.ssl.HttpsURLConnection.setSSLSocketFactory(HttpsURLConnection.java:282)
at com.lovey.util.NetworkFunction.communicateString(NetworkFunction.java:288)
at com.lovey.util.NetworkFunction.login(NetworkFunction.java:337)
at com.lovey.classes.LoginAsync.doInBackground(LoginAsync.java:36)
at com.lovey.classes.LoginAsync.doInBackground(LoginAsync.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
我认为一切正常。读取资产证书的输入流工作正常。
知道发生了什么事吗?
答案 0 :(得分:0)
这是caused(hyperlink with solution)在版本低于Jellybean的Android设备上使用TLSv1.2。
请改用此来源。也让您的服务器接受TLSv1.0连接。
if(Build.VERSION.SDK_INT<16)
sslContext = SSLContext.getInstance("TLS");
else
sslContext = SSLContext.getInstance("TLSv1.2");