繁体   English   中英

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

[英]How do I make a secure HTTPS call from Android

连接到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固定: https : //www.owasp.org/index.php/Certificate_and_Public_Key_Pinning

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

我也怀疑他们是否对证书是否被吊销进行了适当的检查,但是在这种情况下,它们的安全程度不比浏览器差很多:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM