Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Android进行安全HTTPS呼叫_Java_Android_Apache_Ssl_Https - Fatal编程技术网

Java 如何从Android进行安全HTTPS呼叫

Java 如何从Android进行安全HTTPS呼叫,java,android,apache,ssl,https,Java,Android,Apache,Ssl,Https,当连接到HTTPS后端时,Android中可用的apache库中的常规HTTP调用是否会产生安全通信 因为端点是HTTPS,并且假设后端是安全的,所以这是从Android客户端发送密码的有效方式吗?请注意,在下面的代码中,密码插入到POST请求的正文中,没有加密 我的代码如下: // Create post String url = "https://example.endpoint.com/token"; HttpClient client = new DefaultHttpClient()

当连接到HTTPS后端时,Android中可用的apache库中的常规HTTP调用是否会产生安全通信

因为端点是HTTPS,并且假设后端是安全的,所以这是从Android客户端发送密码的有效方式吗?请注意,在下面的代码中,密码插入到POST请求的正文中,没有加密

我的代码如下:

// Create post 
String url = "https://example.endpoint.com/token";
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
HttpResponse response = null;
HttpEntity entity = null;

// Populate the post request            
JSONObject json = new JSONObject();
json.put("username", user);
json.put("password", pass);
StringEntity se = new StringEntity( json.toString() );
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(se);

// Execute the post request
response = client.execute(post);
使用的图书馆有:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

HTTPS使用SSL,因此是安全的,但不要在每次请求中发送密码(仅在必要时),也不要将密码存储在手机上


如果您想提高安全性,也可以添加SSL固定:

默认设置大多是安全的(即正确的证书验证)。但是,至少Android上可用的apache HTTP库的较旧版本不支持SNI(服务器名称指示),因此无法使用同一IP地址上有不同证书的服务器


我还怀疑,如果证书被吊销,他们是否会进行适当的检查,但在这种情况下,他们的情况并不比浏览器差得多:(

如果您控制应用程序及其应连接的所有服务器,则证书固定是一件好事。但是,如果应用程序应能够与您不控制的服务器通信,并且您永远不知道它们何时更换证书,则固定将不起作用。