Android HTTPS通信:服务器端与客户端实现步骤
下载需积分: 9 | DOC格式 | 191KB |
更新于2024-07-26
| 66 浏览量 | 举报
"AndroidHttps服务器端和客户端简单实例"
在Android应用开发中,有时需要通过HTTPS协议来实现安全的数据传输,确保用户信息的安全性。本文将详细介绍如何在Android平台上搭建HTTPS服务器端以及创建对应的客户端实例。
首先,我们需要确保开发环境已准备就绪。这里使用的工具有Eclipse 3.7集成开发环境、Tomcat 6.0.18 作为Web服务器,以及Android 2.1的开发环境。为了确保开发过程中使用的是正确的JDK版本,需要在Eclipse的“Window” -> “Preferences” -> “Installed JREs”中设置,并在Eclipse与Tomcat的整合中选择该JRE环境。
一、搭建服务器端
1. 在Eclipse中创建一个动态Web项目(Dynamic Web Project),命名为“HttpsServer”。这将是我们的服务器端程序。
2. 编写`index.jsp`文件,这是一个简单的HTML表单,用于向服务器发送请求。表单的提交地址是"/HttpsServer/TestService",方法类型为GET。表单内容包括一个输入框供用户输入名字。
```jsp
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>name+age JSP Page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<form action="/HttpsServer/TestService" method="get">
name: <input type="text" name="name" value=""><br/>
<input type="submit" value="Submit">
</form>
</body>
</html>
```
接下来,我们需要在服务器端实现处理这些请求的服务。这通常涉及创建Servlet,例如`TestService.java`,它会接收并处理来自客户端的HTTPS请求。
二、配置HTTPS
要使服务器支持HTTPS,我们需要生成一对密钥对(公钥和私钥)并创建一个信任证书。这通常涉及到以下步骤:
1. 使用`keytool`命令生成自签名证书,存储在Tomcat的`conf`目录下的`keystore`文件中。
2. 修改Tomcat的`server.xml`配置文件,配置`Connector`元素以启用HTTPS,并指定密钥库路径、密码等信息。
```xml
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="${catalina.base}/conf/keystore" keystorePass="password"
clientAuth="false" sslProtocol="TLS"/>
```
三、创建Android客户端
在Android客户端,我们需要使用`HttpsURLConnection`类来建立安全的连接。以下是一个简单的示例:
1. 首先,确保在AndroidManifest.xml中添加了网络访问权限:
```xml
<uses-permission android:name="android.permission.INTERNET" />
```
2. 创建一个方法来发送HTTPS请求,获取服务器响应:
```java
public String sendHttpsRequest(String url) throws IOException {
URL urlObj = new URL(url);
HttpsURLConnection connection = (HttpsURLConnection) urlObj.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
// 设置信任所有主机证书
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
}};
// 创建一个不验证的SSLContext
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new SecureRandom());
// 使用创建的SSLContext配置连接
connection.setSSLSocketFactory(sslContext.getSocketFactory());
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return response.toString();
} else {
return "请求失败,响应码:" + responseCode;
}
}
```
3. 在客户端活动中,调用上述方法发送请求并处理响应:
```java
Button submitBtn = findViewById(R.id.submitBtn);
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String serverUrl = "https://your-server-url.com/HttpsServer/TestService?name=" + nameEditText.getText().toString();
try {
String response = sendHttpsRequest(serverUrl);
Toast.makeText(MainActivity.this, response, Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "请求出错", Toast.LENGTH_SHORT).show();
}
}
});
```
这样,我们就完成了Android客户端和HTTPS服务器的简单通信实例。然而,实际应用中,为了安全性,不应完全信任所有证书,而是应该使用权威机构签发的证书或者自签名证书,并在客户端进行证书校验。此外,还应考虑异常处理、连接超时等问题,以提高应用程序的健壮性。
相关推荐
任我行
- 粉丝: 0
- 资源: 21
最新资源
- ttysgym
- Design_Patterns
- 蓝桥杯嵌入式练习题——“电子定时器”的程序设计与调试*代码.zip
- Deeper.dmg.zip
- PlotFilter / 滤波器系数文件:PlotFilter 绘制滤波器响应。 过滤器文件包括 ITU-T 过滤器和 QMF 过滤器。-matlab开发
- rs-popover:佳能弹出式视窗的Angular指令
- 电子功用-家庭能量动态分配路由器、方法及家庭能量发电计划方法
- pitches:这是一个网络平台,允许用户查看,提交和评论一分钟音高的各种类别。此站点允许用户查看各种音高并明智地使用它们,因为仅需一分钟即可打动他人
- 玩hangmangame
- UserPrefs2020.rar
- binary_trees:关于二叉树结构的项目
- Resume-Builder-Web-Application
- 第八届 蓝桥杯嵌入式设计与开发项目决赛——频率控制器的功能设计与实现·代码.zip
- GFH:使bepo-xxerty定制键盘在GitHub上工作
- google-drive-cleaner:用于删除Google云端硬盘中文件的工具
- k8s:Hello world k8s