SSL android
#37441075
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
Всем привет!
Возникла проблема при посылке клиентского сертификата на сервер SSL. Как я понимаю он просто не воспринимает сертификат посылаемого андроидом. В дебагере появляется ошибка в строке HttpResponse response = sClient.execute(httpGet); следующего типа авторjava.net.SocketTimeoutException: Read timed out
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135.
package net.myhttps;
import java.io.*;
import java.security.*;
import javax.net.ssl.*;
import org.apache.http.*;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.*;
import org.apache.http.conn.scheme.*;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.*;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import android.widget.*;
public class HttpsAppActivity extends Activity {
TextView text;
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
goo();
}
private void goo() {
try {
// Установка корневого сертификата доверия
// Загружаем сертификат в доверенное хранилище
System.setProperty("javax.net.ssl.trustStore", "myTrustStore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
System.setProperty("javax.net.ssl.keyStore", "cl_sert.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "newpasswd");
InputStream clientTruststoreIs = getResources().openRawResource(
R.raw.trust_server); // Корневой сертификат сервера
KeyStore trustStore = null ;
trustStore = KeyStore.getInstance("BKS");
trustStore.load(clientTruststoreIs, "killsews".toCharArray());
System.out.println("Loaded server certificates: "
+ trustStore.size());
// Инициализация сертификата в доверительном хранилище
TrustManagerFactory trustManagerFactory = null ;
trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStore);
// Установка сертификата клиента
// Загрузка сертификата клиета
InputStream keyStoreStream = getResources().openRawResource(R.raw.cl_sert);
KeyStore keyStore = null ;
keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(keyStoreStream, "newpasswd".toCharArray());
System.out.println("Loaded client certificates: " + keyStore.size());
// Инициализация
KeyManagerFactory keyManagerFactory = null ;
keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, "killsews".toCharArray());
// инициализировать SSLSocketFactory для использования сертификатов
SSLSocketFactory socketFactory = null ;
//socketFactory = new SSLSocketFactory(keyStore, "killsews");
socketFactory = new SSLSocketFactory(SSLSocketFactory.TLS, keyStore, "", trustStore, null , null );
// Передача базовых параметров
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "UTF-8");
HttpProtocolParams.setUseExpectContinue(params, true);
HttpProtocolParams.setUserAgent(params, "Android app/1.0.0");
// Создаем пул
ConnPerRoute connPerRoute = new ConnPerRouteBean( 12 );
ConnManagerParams.setMaxConnectionsPerRoute(params, connPerRoute);
ConnManagerParams.setMaxTotalConnections(params, 20 );
// Задаем время
HttpConnectionParams.setStaleCheckingEnabled(params, false);
HttpConnectionParams.setConnectionTimeout(params, 20 * 1000 );
HttpConnectionParams.setSoTimeout(params, 20 * 1000 );
HttpConnectionParams.setSocketBufferSize(params, 8192 );
// Некоторые параметры
HttpClientParams.setRedirecting(params, false);
// Регистрируем http/s схему!
SchemeRegistry schReg = new SchemeRegistry();
schReg.register( new Scheme("http", PlainSocketFactory.getSocketFactory(), 80 ));
schReg.register( new Scheme("https", socketFactory, 443 ));
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);
DefaultHttpClient sClient = new DefaultHttpClient(conMgr, params);
HttpGet httpGet = new HttpGet("https://10.2.37.7/svg_cashe/fragment.txt");
HttpResponse response = sClient.execute(httpGet);
HttpEntity httpEntity = response.getEntity();
InputStream is = httpEntity.getContent();
BufferedReader read = new BufferedReader( new InputStreamReader(is));
String data = "";
String query = null ;
while ((query = read.readLine()) != null ){
System.out.println(query);
}
} catch (Exception e) {
Log.e("Error: ", e.toString());
}
}
}
|
|