gpt4 book ai didi

java - SSL 没有对等证书 Android

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:03 25 4
gpt4 key购买 nike

我的某些设备有问题,错误提示是 SSL 问题。当我检查我的网站时,那里没有问题。这是我从数据库中获取 A 数据的代码

public class HttpServicesClass {
public int responseCode;
public String message;
public String response;
public ArrayList<NameValuePair> ArrayListParams;
public ArrayList <NameValuePair> headers;
public String UrlHolder;
public String getResponse()
{
return response;
}
public String getErrorMessage()
{
return message;
}
public int getResponseCode()
{
return responseCode;
}
public HttpServicesClass(String url)
{
HttpServicesClass.this.UrlHolder = url;

ArrayListParams = new ArrayList<NameValuePair>();

headers = new ArrayList<NameValuePair>();
}
public void AddParam(String name, String value)
{
ArrayListParams.add(new BasicNameValuePair(name, value));
}
public void AddHeader(String name, String value)
{
headers.add(new BasicNameValuePair(name, value));
}
public void ExecuteGetRequest() throws Exception
{
String MixParams = "";

if(!ArrayListParams.isEmpty())
{
MixParams += "?";

for(NameValuePair p : ArrayListParams)
{
String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),"UTF-8");

if(MixParams.length() > 1)
{
MixParams += "&" + paramString;
}
else
{
MixParams += paramString;
}
}
}
HttpGet httpGet = new HttpGet(UrlHolder + MixParams);
for(NameValuePair h : headers)
{
httpGet.addHeader(h.getName(), h.getValue());
}
executeRequest(httpGet, UrlHolder);
}
public void ExecutePostRequest() throws Exception
{
HttpPost httpPost = new HttpPost(UrlHolder);
for(NameValuePair h : headers)
{
httpPost.addHeader(h.getName(), h.getValue());
}
if(!ArrayListParams.isEmpty())
{
httpPost.setEntity(new UrlEncodedFormEntity(ArrayListParams, HTTP.UTF_8));
}
executeRequest(httpPost, UrlHolder);
}
private void executeRequest(HttpUriRequest request, String url)
{
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);
HttpConnectionParams.setSoTimeout(httpParameters, 10000);
HttpClient httpClient = new DefaultHttpClient(httpParameters);
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", socketFactory, 443));
SingleClientConnManager mgr = new SingleClientConnManager(httpParameters, registry);
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
new DefaultHttpClient(mgr, httpParameters);
HttpResponse httpResponse;
try
{
httpResponse = httpClient.execute(request);
responseCode = httpResponse.getStatusLine().getStatusCode();
message = httpResponse.getStatusLine().getReasonPhrase();

HttpEntity entity = httpResponse.getEntity();
if (entity != null)
{
InputStream inputStream = entity.getContent();

response = convertStreamToString(inputStream);

inputStream.close();
}
}
catch (ClientProtocolException e)
{
httpClient.getConnectionManager().shutdown();
e.printStackTrace();
}
catch (IOException e)
{
httpClient.getConnectionManager().shutdown();
e.printStackTrace();
}
}

private String convertStreamToString(InputStream is)
{
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));

StringBuilder stringBuilder = new StringBuilder();

String line = null;
try
{
while ((line = bufferedReader.readLine()) != null)
{
stringBuilder.append(line + "\n");
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
is.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
return stringBuilder.toString();
}

}

显示数据库数据时报错

W/System.err: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate

许多引用资料我都试过了,但对于这个问题仍然给我 null Safely fixing: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate

error javax.net.ssl.SSLPeerUnverifiedException: No peer certificate and SSLNullSession.java:104

谁能帮我解决这个问题


编辑

完整的错误日志

02-10 07:52:36.565 2621-3000/com.network.poeja.checkops W/System.err: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 02-10 07:52:36.665 2621-3000/com.network.poeja.checkops W/System.err: at com.android.org.conscrypt.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:146) 02-10 07:52:36.665 2621-3000/com.network.poeja.checkops W/System.err: at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93) 02-10 07:52:36.675 2621-3000/com.network.poeja.checkops W/System.err: at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:388) 02-10 07:52:36.675 2621-3000/com.network.poeja.checkops W/System.err: at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165) 02-10 07:52:36.675 2621-3000/com.network.poeja.checkops W/System.err: at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 02-10 07:52:36.675 2621-3000/com.network.poeja.checkops W/System.err: at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 02-10 07:52:36.675 2621-3000/com.network.poeja.checkops W/System.err: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 02-10 07:52:36.675 2621-3000/com.network.poeja.checkops W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 02-10 07:52:36.675 2621-3000/com.network.poeja.checkops W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 02-10 07:52:36.675 2621-3000/com.network.poeja.checkops W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 02-10 07:52:36.675 2621-3000/com.network.poeja.checkops W/System.err: at com.network.poeja.checkops.HttpServicesClass.executeRequest(HttpServicesClass.java:152) 02-10 07:52:36.685 2621-3000/com.network.poeja.checkops W/System.err: at com.network.poeja.checkops.HttpServicesClass.ExecutePostRequest(HttpServicesClass.java:128) 02-10 07:52:36.685 2621-3000/com.network.poeja.checkops W/System.err: at com.network.poeja.checkops.SecondFragment$GetHttpResponse.doInBackground(SecondFragment.java:101) 02-10 07:52:36.685 2621-3000/com.network.poeja.checkops W/System.err: at com.network.poeja.checkops.SecondFragment$GetHttpResponse.doInBackground(SecondFragment.java:78) 02-10 07:52:36.685 2621-3000/com.network.poeja.checkops W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288) 02-10 07:52:36.685 2621-3000/com.network.poeja.checkops W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237) 02-10 07:52:36.685 2621-3000/com.network.poeja.checkops W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 02-10 07:52:36.685 2621-3000/com.network.poeja.checkops W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 02-10 07:52:36.685 2621-3000/com.network.poeja.checkops W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 02-10 07:52:36.685 2621-3000/com.network.poeja.checkops W/System.err: at java.lang.Thread.run(Thread.java:841) 02-10 07:52:36.745 2621-3000/com.network.poeja.checkops W/System.err: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at android.os.Handler.(Handler.java:200) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at android.os.Handler.(Handler.java:114) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at android.widget.Toast$TN.(Toast.java:327) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at android.widget.Toast.(Toast.java:92) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at android.widget.Toast.makeText(Toast.java:241) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at com.network.poeja.checkops.SecondFragment$GetHttpResponse.doInBackground(SecondFragment.java:132) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at com.network.poeja.checkops.SecondFragment$GetHttpResponse.doInBackground(SecondFragment.java:78) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:288) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 02-10 07:52:36.785 2621-3000/com.network.poeja.checkops W/System.err: at java.lang.Thread.run(Thread.java:841)

最佳答案

找到像这样使用私有(private)类制作 SSLSocket 的答案了吗?

public class MySSLSocketFactory extends SSLSocketFactory {
private SSLContext sslContext = SSLContext.getInstance("TLS");

private MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(truststore);

TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

public X509Certificate[] getAcceptedIssuers() {
return null;
}
};

sslContext.init(null, new TrustManager[] { tm }, null);
}

@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
}

@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}
}

关于java - SSL 没有对等证书 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48704212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com