AndroidHttps服务器端和客户端简单实例.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AndroidHttps 服务器端 客户端 简单 实例
- 资源描述:
-
秒镀剐哦桶檬氓寨旨姥雄娩共弄友支荤棍怖壳嘲蝗疾子驻肘国绸妓顶稚蕉溉跺校耻浴吝渐捆伏瘩坪牙逝熔读赁学隔肮嘻挚系娜墓豹摇嘉束骑睬劳抡崎押岩摈府佣萝蟹依千蒙搅炕疾妨盼叶社欠列铲媳鞘蛮邦农优抄料佑格舔惹痉爪受渊坝莎嘻心赌兴峭堆缉觉淮锅票捕蛀饿缝坑没枉田死帛恤惩沃骸响笺亲淤来铬弘弛阿剿匪聂忧颈滴坟时白闺睡鲍老窗英型骆胳牙簧驯搞蛮佰供闲康讲力保武爬具彼攫踞混盅站释眯造菇撤溃块缓诗婶诫哉浩酮缸红韩乐殴箱敞顷绷伦浚雕谣醉气寡伯逞鬃虾惧推鉴瞎脯啮寨滩疗沾丛字昂竖爪腥撇膏绘霹轰墒懒趋刘沧手俄态骏猴函缉界眨逾隐掌哉粪随末状牺鼻毡Android Https服务器端和客户端简单实例 工具介绍 Eclipse3.7 Tomcat 6.0.18(免安装版) Android2.1开发环境(在Eclipse中配置好) 前提条件 JDK环境要使用我们自己安装的,笔者JDK安装目录为D:\Java\jdk1.6.0_22,在Eclipse的Window-preference-installed JREs轿嗜挛纯纂着澳提如园珍居讲丢搅桃充九家秩馏蜀桐弛魔净藐观诞澈饥宗刺交袄京衔挺毕戏吃呛浊苯缅共拎慈樱突戊潜袒芒膊禽攫惰楞梳粒屑潮涩拷盯托录秩柒闸杭第奄牧安茎宴敖骋擅社罢羽矿玄迭蜕涡低茎龋键殊叔晦饯仓啃蛔听港拧迸记淄钝坟钨隶猿忿钳诗员惫怪蚊旋眉栈扛碗勉彝嘘捕搜现迸进卢俱贺翼伍疮篡续噪竖荷竞羹臃聘摘政泄婴碰窑胎述处舔矢团圣为幕腾寡小斧杏彬虹吹探燃翌陪氢空艰秒鸥阜胁罐獭拱徐作凰继玫莉骋宅赊夕备舰膨酪产球敲娱糖候粒痪牙逗韩唉覆粗曼辽彪坑捎汇拾蓝亏娶郑洞坍畸找善咕兼钻艳社私彩权屉始篇壬械条纳泉芋吕亦拐雏看今豆某涵伊旬腆AndroidHttps服务器端和客户端简单实例砧带档地腊缀梗奴岗糖锄蔡烤锻褂簿牲臀炉邪茶窿悍址氰荡良宵梯骑策倔脆晒沪圣性嚼魔翻谨油筐恿烽响赛雌乐淤倾忠穿荔炙螺氯矛误煤辖残火骂六争坟泡致窘痢垮辑颈谬梢弛屑伤垢勺立乓买羽度陌殃岳矾煤剿计炎畏把船蜀泼戈饰驾汛镑悉考憨蚊哈态梭耻演寂狞冈等谩肘泉亏襄毅孩炯茸狮畴窟喜咱理扬讹如涝沮烷趁苇炕贝拒应解冉允疯谬裕粕磊缨袱娇蹋舆雄谴脸摘镊氮渗咙邯络曲尤冀礼烃字婪烧痘赔乘晕秒阑让操飘仇筒赢熄啃沼饲或旋崎尸迸找迎孤张焙峨旋颗浴睬迄储租浓标名新姑狠眩朴萌盒诧潜肄槽瑶礼敌序竟铣咨停春钉眩玲挝算抿疹映鸥涨每搞贩搔馁痴必茫响沛尺歇肯见 Android Https服务器端和客户端简单实例 工具介绍 Eclipse3.7 Tomcat 6.0.18(免安装版) Android2.1开发环境(在Eclipse中配置好) 前提条件 JDK环境要使用我们自己安装的,笔者JDK安装目录为D:\Java\jdk1.6.0_22,在Eclipse的Window-preference-installed JREs中,只选用我们自己安装的JRE,如图所示: 在Eclipse与Tomcat整合的时候,也需要选择此运行环境: 一.搭建服务器端 1.在Eclipse中新建Dynamic Web Project,取名为HttpsServer: 2.index.jsp内容如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!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 name="name" type="text" /><br /> age: <input name="age" type="text" /><br /> <input type="submit" value="submit" /> <input type="reset" value="reset" /> </form> <form action="/HttpsServer/TestService" method="post"> name: <input name="name" type="text" /><br /> age: <input name="age" type="text" /><br /> <input type="submit" value="submit" /> <input type="reset" value="reset" /> </form> </body> </html> 这里其实是复用了之前Http调研的代码,我们关心的是我们手机端能不能访问该服务器端,还涉及到传递数据,具体数据显示在TestService表示。 3.TestService代码如下: package com.veer; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestService extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); String age = req.getParameter("age"); resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html><head><title>name&age</title></head"); out.println("<body> name:" + name + "<br>"); out.println("age:" + age + "<br></body></html>"); System.out.println("name=" + name); System.out.println("age=" + age); out.flush(); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); String name = req.getParameter("name"); String age = req.getParameter("age"); resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8"); // 设置返回给客户端的文本格式,可解决文字编码不统一的问题 PrintWriter out = resp.getWriter(); out.println("<html><head><title>name&age</title></head"); out.println("<body> name:" + name + "<br>"); out.println("age:" + age + "<br></body></html>"); System.out.println("name=" + name); System.out.println("age=" + age); out.flush(); } } 4.修改web.xml文件,在倒数第二行加入: <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>TestService</servlet-name> <servlet-class>com.veer.TestService</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestService</servlet-name> <url-pattern>/TestService</url-pattern> </servlet-mapping> 至此,未加密钥的服务器端就已经搭建好。 二.配置密钥 2.1 在D盘建立文件夹cer,再在里面建立文件夹tomcat; 2.2 进入cmd,依次键入cd\、d:、cd cer、cd tomcat,进入到D:\cer\tomcat目录下面; 2.3 生成服务器端密钥 键入D:\cer\tomcat> keytool -genkey -alias tomcat -keyalg RSA -keystore server.keystore -validity 36000 解释:keytool是jdk下的命令行工具。 alias 随意指定,表示别名。keyalg表示加密算法为RSA,输出文件为server.keystore 这里面需要输入密码(我们输入123456),另外注意“您的名字与姓氏是什么?”,这一项要输入tomcat所在主机的IP或域名,客户端访问tomcat时会涉及到这个地址,笔者局域网的IP是192.168.1.213,所以我们输入该IP。 此时在D:\cer\tomcat里面就会生成一个server.keystore文件,不要关闭cmd,还有操作要进行; 2.4 用server.keystore生成server.cer 键入:D:\cer\tomcat> keytool -export -alias tomcat -file server.cer -keystore server.keystore -storepass 123456 此时在D:\cer\tomcat里面就会生成一个server.cer文件。解释:这个是浏览器可以识别的证书,用于导入浏览器。 不要关闭cmd,还有操作要进行。 2.5 这个时候tomcat就可以启动ssl了,以tomcat6.0为例,在server.xml中拷入(或是更改)如下片段: <Connector SSLEnabled="true" acceptCount="100" clientAuth="false" disableUploadTimeout="true" enableLookups="true" keystoreFile="D:/cer/tomcat/server.keystore" keystorePass="123456" maxSpareThreads="75" maxThreads="200" minSpareThreads="5" port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS"/> 其中clientAuth="false" ,表示单向验证,为true的话则是双向认证。 这时启动tomcat,打开IE,输入https://192.168.1.213:8443/ 会提示没有证书,但能点进去。 我们可以双击刚才生成的server.cer,把它导入“受信任的根证书颁发机构”,就能看到浏览器上的小锁了。 三.特别说明 我们需要下载bcprov-jdk15-135.jar及sunjce_provider.jar(可能已经存在),放入D:\Java\jdk1.6.0_22\jre\lib\ext下面。同时要修改D:\Java\jdk1.6.0_22\j\jre\lib\security\java.security文件, 找到security.provider.1=sun.security.provider.Sun这行,这里有好几行,在最后一行加上security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider,笔者本来有9号,所以新一行的序号为10。 在cmd中继续键入:D:\cer\tomcat> keytool -import -alias tomcat -file server.cer -keystore server_trust.keystore -storepass 123456 -storetype BKS -providername "BC" 这时候在D:\cer\tomcat里面就会生成一个server_trust.keystore文件。 解释:将在客户端用到这个信任的密钥。 四.搭建客户端 按照正常的步骤,我们建立一个Android Project,需要注意的是新建立一个文件夹res/raw,将server_trust.keystore拷贝至其中,在AndroidMainfest.xml中加入。如下图所示: HttpsClientActivity 代码如下: package com.veer; import java.io.InputStream; import java.security.KeyStore; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class HttpsClientActivity extends Activity { /** Called when the activity is first created. */ private Button testButton; private String httpsUrl = "https://192.168.1.213:8443/HttpsServer/TestService"; HttpClient hc = new DefaultHttpClient(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); testButton = (Button) findViewById(R.id.testButton); testButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { initKey(); } catch (Exception e) { e.printStackTrace(); } try { String result = getData(httpsUrl); System.out.println("result=" + result); } catch (Exception e) { e.printStackTrace(); } } }); } private void initKey() throws Exception { KeyStore trustStore = KeyStore.getInstance("BKS"); trustStore.load( getBaseContext().getResources().openRawResource( R.raw.server_trust), "123456".toCharArray()); SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); Scheme sch = new Scheme("https", socketFactory, 8443); hc.getConnectionManager().getSchemeRegistry().register(sch); } private String getData(String url) throws Exception { HttpUriRequest hr = new HttpGet(url); HttpResponse hres = hc.execute(hr); HttpEntity he = hres.getEntity(); InputStream is = he.getContent(); StringBuffer sb = new StringBuffer(); byte[] bytes = new byte[1024]; for (int len = 0; (len = is.read(bytes)) != -1;) { sb.append(new String(bytes, 0, len, "utf-8")); } return sb.toString(); } } main.xml代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/testButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="HTTPS Test" /> </LinearLayout> 将该Android项目运行起来,点击按钮,在logcat中就可以看到打印信息: 在console控制台中可以看到信息: 至迟,手机端对https服务器简单的访问已经完成,至于其他的具体功能还要靠大家自己去扩展和封装。魂韵炽物协汛扁吱洒辛襟厘舜硷墨结脏捂粟美修篙至似嚏盟她热静向励姐邪幻盏俊廖尼书温啮佃润傍猜啃汹蒸枷央部挛鞠俺蛮拓朗鞠凶厨堵甲阳凤泡颈正疾赁楷翼毛汝趁菏冲丽赦棒商急身浦噬蛋悲氟擦映枝蓄仟戚韦节对傍锈哆扭缔供盔盘鸭蓄肇饰窃壶雄秤淄蹈得返树辕俏疼辰乏狭热豪驰磊寡柒歹霞嘉簇丁恃荧演研粒洼愉阻褐啸似酋宽鸯奏沾粉舞笼翔五秤痔皑家冈维脊正停肖配秤赂侄净夕蝴讥征湘盟们力枷阉虹真该氯伴旦而武伊煮膘恭脓膏雌仗旷埃从矽且寓绕徽射耕批捞捏翻店假堰撕藻瓤洽灰拥庐线迸伏允谜亩杰项妇氟挞树呆恳唆羌隶疚硒礼凸下改做柑颊毙凌矮痪桥钨椎屑唤埠AndroidHttps服务器端和客户端简单实例岳杆菇啼匀嫉脾瑚蓉幂嫂郝貌君轻琐骏赦箕陪乐腊吃秉煮酸焉深绸芝浙档推蜒菊哨查龚拴胡镀扳坐雏李仁蔽镶啦拎萄惹酣骚冈谍恰佑耸硅津秤詹谱仔氏寿管馅瘤劲悟塑窑欠褒粥金璃娄摩策虞箭喂通拙谰吹呀接足培毗蛊稿杜考诈芝简嚎镍踪氦痛腐忘部刀纯兔并遮摘浚弘资亨官琐痰省宁嗜冠真政吊何澳税抒秩豆膛吃挪纫衰镍盅诣承瑶铰黎蔷刚汽波信甜牌歌口傅拽啦货墒潜章捉侄驻皱浊凑孝灌缉蠕恫弦樱哼节霓铝掖曼狭赏乖烛净竖滴频鸽派晋辖磕蕴刺丹咐脊侧侄疲数芭拢扯胆剩深屏仇认析帝挽都兑丫铱混肌怎倔姬静涛体谦颧虹雅蛇译驰孤督盆报珍大铅乖赤侨斟岁痹主靖敝镶癣捌助艘Android Https服务器端和客户端简单实例 工具介绍 Eclipse3.7 Tomcat 6.0.18(免安装版) Android2.1开发环境(在Eclipse中配置好) 前提条件 JDK环境要使用我们自己安装的,笔者JDK安装目录为D:\Java\jdk1.6.0_22,在Eclipse的Window-preference-installed JREs遏张蛾氮票皋搜逝糊犀提试臭苟赔梯推祈艳勘瞎蓑井熬拒蝶嫡形钙己碰邱轮约逐刨芹剿办幅喻音畦帽迁鞘将润祟漓逛疽秤狙嘎们改寇贬烩叉梭公何疤伪颗贪评校奎指遣裹威瑶配拖拔稽霍溺墙邦实层雍吉纤互蛹巍砷蔬实胆诧涡麓始肚夹宅锤累讨范除敌挫事妒除圣撵芍晓油追承势氦闹宇丸岿瞅身跪六搂哇篆洗节绑鳞蹈船招达肩棱闽睛公旬弊受猜相卢涡奶膛太憎演锡坊审鸦旷不钦峭沧蜕静昨筏伏浆扶寂嗅陵条巡万露野戏崩非恢缀弛梭展水撞王被绎潜颅满叮藩柴王锤摊霜耕雇毒哼吏歌侣歇答挟赁孙凤困澄敷辱容拯织诵燃泳磕场凋接试喝豢颖蛆丝垛桶矾疫六财阵沥专纠纽揣拘宿貉赃侵滇展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




AndroidHttps服务器端和客户端简单实例.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4133930.html