SSL Android-AsyncHttpClient
我正在构建一个android应用程序,它连接到服务器并检索数据。首先,我要选择是使用AsynchTask(带HttoClient)还是AsynchHttpClient,然后选择AsynchHttpClient。现在,实际上一切正常,但今天,当我调试其他东西时,我注意到调试器在我发送/检索数据时抛出警告(我通过https执行所有操作)。调试器会说类似于SSL Android-AsyncHttpClient,android,security,ssl,certificate,asynchttpclient,Android,Security,Ssl,Certificate,Asynchttpclient,我正在构建一个android应用程序,它连接到服务器并检索数据。首先,我要选择是使用AsynchTask(带HttoClient)还是AsynchHttpClient,然后选择AsynchHttpClient。现在,实际上一切正常,但今天,当我调试其他东西时,我注意到调试器在我发送/检索数据时抛出警告(我通过https执行所有操作)。调试器会说类似于的话,当心!使用修复程序是不安全的,因为它不会验证SSL证书。我在做一些挖掘工作,在AsynchHttpClient类中发现了这条消息,它的实际来源
的话,当心!使用修复程序是不安全的,因为它不会验证SSL证书
。我在做一些挖掘工作,在AsynchHttpClient类中发现了这条消息,它的实际来源是:
private static SchemeRegistry getDefaultSchemeRegistry(boolean fixNoHttpResponseException, int httpPort, int httpsPort) {
if (fixNoHttpResponseException) {
Log.d(LOG_TAG, "Beware! Using the fix is insecure, as it doesn't verify SSL certificates.");
}
if (httpPort < 1) {
httpPort = 80;
Log.d(LOG_TAG, "Invalid HTTP port number specified, defaulting to 80");
}
if (httpsPort < 1) {
httpsPort = 443;
Log.d(LOG_TAG, "Invalid HTTPS port number specified, defaulting to 443");
}
私有静态SchemeRegistry getDefaultSchemeRegistry(布尔fixNoHttpResponseException、int httpPort、int httpsPort){
if(fixNoHttpResponseException){
Log.d(Log_标签,“当心!使用修复程序是不安全的,因为它不会验证SSL证书”);
}
如果(httpPort<1){
httpPort=80;
Log.d(Log_标记,“指定的HTTP端口号无效,默认为80”);
}
如果(httpsPort<1){
httpsPort=443;
Log.d(Log_标签,“指定的HTTPS端口号无效,默认为443”);
}
我不太确定是哪一个补丁。是的,我差点忘了,我读到这可能是因为我使用了自签名证书(用于测试),但在我发布一些不安全的东西之前,我想我在这里问一下,是否有其他人知道这条消息的确切含义
谢谢也许你的证书有问题? 我使用此方法在Android项目中添加证书
public static SSLContext getFactory() throws Exception {
KeyStore trusted = KeyStore.getInstance("BKS");
InputStream in = context.getResources().openRawResource(R.raw.myfile);
try {
// Initialisation de notre keystore. On entre le mot de passe (storepass)
trusted.load(in, "mypassword".toCharArray());
} finally {
in.close();
}
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(trusted);
SSLContext ssl_context = SSLContext.getInstance("SSL");
ssl_context.init(null, tmf.getTrustManagers(), null);
return ssl_context;
}
实际上,当我从SocketIO创建套接字时,我调用了这个方法。请参见我的代码:
SocketIO.setDefaultSSLSocketFactory(getFactory());this.socket=new SocketIO();socket.connect(url,this);SocketIO.setDefaultSSLSocketFactory(getFactory());