`
branthf
  • 浏览: 693 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

android ssl

阅读更多
Android Tomcal SSL Https 单向篇

Android SSL https Tomcat
按网上的说明尝试了好久,转载请注明来源。

双向篇还未实现,先记录单向验证方式。
一 Android直接连接tomcat
这个实现比较简单,先建立一个工作目录为tomcat。打开命令行切换到该目录。如果是win7需要用管理员身份打开命令行。

1 生成服务器端私钥(or 公钥?)
keytool -genkey -alias tomcat -keyalg RSA -keystore server.keystore -validity 3600
解释:keytool是jdk下的命令行工具。
alias 随意指定,表示别名。keyalg表示加密算法为RSA,输出文件为server.keystore
这里面需要输入密码(我们输入123456),另外注意“您的名字与姓氏是什么?”,这一项要输入tomcat所在主机的IP或域名,客户端访问tomcat时会涉及到这个地址。

2 用server.keystore生成server.cer
keytool -export -alias tomcat -file server.cer -keystore server.keystore -storepass 123456

解释:这个是浏览器可以识别的证书,用于导入浏览器。
这个时候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" ,目前只搞定了单向验证。

这时启动tomcat,打开IE,输入https://ip:8443/ 会提示没有证书,但能点进去。
我们可以双击刚才生成的server.cer,把它导入“受信任的根证书颁发机构”,就能看到浏览器上的小锁了。

那我们的Android程序怎么来连接服务器呢,我们需要生成第三个文件server_trust.keystore:
3 keytool -import -alias tomcat -file server.cer -keystore server_trust.keystore -storepass 123456 -storetype BKS -providername "BC"
注意:这里的密码与前面保持一致。因为Android只支持BKS格式的,所以这里要指定类型。
你执行到这里可能会出错,因为jdk下的keytool默认没有BKS的类库。
我们需要下载bcprov-jdk15-135.jar及sunjce_provider.jar,放入jdk1.6.0_10\jre\lib\ext下面。同时要修改jdk1.6.0_10\jre\lib\security\java.security
找到security.provider.1=sun.security.provider.Sun这行,这里有好几行,在最后一行加上security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider,我本来有9号,所以新一行的序号为10。

我们把server_trust.keystore拷入Android程序的res/raw目录下。
使用httpClient进行连接,示例代码如下:
HttpClient hc = new DefaultHttpClient();
initKey();
String url = "https://10.1.32.33:8443/SSLTestServer/SSLServlet?action=login";
Toast.makeText(SSLTestAndroidActivity.this, getData(url), 1).show();

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, "gb2312"));
}
return sb.toString();
}

对应的servlet中只是简单的response.getWriter().write("some char");

至此Android连接tomcat进行单向ssl就大功告成了,只需要生成三个文件。
分享到:
评论

相关推荐

    android ssl证书验证

    在Android平台上,SSL(Secure Sockets Layer)证书验证是一个关键的安全环节,用于保护应用程序与服务器之间的通信不被窃听或篡改。SSL证书是身份验证的一种方式,它确保了用户与服务器之间的连接是安全的,数据...

    Why Eve and Mallory Love Android:An Analysis of Android SSL(In) Security

    文章标题为:“Why Eve and Mallory Love Android:An Analysis of Android SSL(In)Security”,从标题我们可以看出,本文将重点分析Android操作系统中SSL/TLS协议安全性的潜在问题,以及这些安全漏洞为何受到攻击者...

    IOS,Android SSL双向认证HTTPS方式请求及配置证书

    本文将详细介绍如何在`iOS`和`Android`应用中实施SSL双向认证以及配置证书。 一、SSL/TLS协议基础 SSL/TLS协议的主要目标是为网络通信提供加密处理,以防止第三方窃取或篡改信息。HTTPS是HTTP协议与SSL/TLS的结合,...

    Android SSL证书验证原理

    ### Android SSL证书验证原理 #### 一、概览 在Android平台上实现安全的数据传输通常依赖于SSL(Secure Sockets Layer)或其后续版本TLS(Transport Layer Security),它们为客户端和服务端之间的通信提供加密...

    ssl_android.zip_TLS_android_android ssl_application_ssl/tls

    在Android平台上,SSL/TLS被广泛应用于移动应用程序中,以确保用户数据的隐私和完整性。本篇文章将深入探讨Android应用程序如何利用SSL/TLS进行安全通信。 一、SSL/TLS协议基础 SSL/TLS协议的主要目的是为网络通信...

    Android SSL 安全访问HTTPS服务器案例

    在Android中,SSL安全访问主要涉及以下关键步骤: 1. **配置信任的证书**:默认情况下,Android系统信任由受信任的证书颁发机构(CA)签名的证书。但如果服务器使用的是自签名证书或者私有CA签发的证书,需要在代码...

    An Analysis of Android SSL In Security

    ### Android SSL安全性分析 #### 背景与研究意义 随着移动互联网的飞速发展,Android作为当前全球市场占有率最高的移动操作系统之一,在个人生活、商业应用等多领域扮演着极其重要的角色。与此同时,用户对于隐私...

    android MQTT 带SSL加密连接例子demo

    在这个“android MQTT 带SSL加密连接例子demo”中,我们将探讨如何在Android应用中使用BKS(Bouncy Castle Key Store)加密文件来实现安全的MQTT连接。 首先,我们需要理解MQTT协议。MQTT是一种基于发布/订阅模式的...

    java android ssl socket通讯

    java android 的ssl socket通讯,X509运行

    libcurl for Android支持ssl

    要将libcurl与ssl整合到Android项目中,你需要选择一个适合Android的SSL库。这里提到的是cyassl,这是一个轻量级且快速的SSL/TLS实现,特别适合资源有限的设备,如移动设备。cyassl的使用使得libcurl能够在Android...

    Android双向SSL例子

    本示例将详细介绍如何在Android应用中实现双向SSL验证,即服务器和客户端都需要提供身份证明。下面我们将逐步解析这个"Android双向SSL例子"。 1. **理解SSL/TLS**: SSL/TLS的主要目标是提供隐私和数据完整性,通过...

    SSLSocket通信Demo android版

    本教程主要针对初学者,详细讲解如何在Android应用中实现SSLSocket通信,并通过Eclipse IDE进行DEMO演示。 首先,理解SSLSocket的基本原理。SSLSocket是在Socket基础上增加了一层加密机制,它通过握手协议、密钥...

    android_webview_ssl p12

    本文将深入探讨Android Webview如何处理SSL认证,特别是使用P12证书的情况。 一、Android Webview与SSL Webview支持HTTPS连接,但默认情况下,它只信任系统已知的根证书颁发机构(CA)。对于自签名或由非标准CA...

    Android Openssl 库(native层)

    SSL是Secure Sockets Layer(安全套接层协议)的缩写。在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在...

    ssl for qt on android.zip

    Qt编写的Android程序,使用QNetworkAccessManager和QRequest访问https的网页时,在较高版本的安卓手机中会报错:Error creating SSL context。将附件中的.so文件加入工程附带到apk中即可解决。

    android访问自签CA的Https SSL双向认证(j2SE也能使用)

    在Android平台上进行HTTPS通信时,通常需要验证服务器的SSL证书,这是为了确保数据传输的安全性。但有时我们可能需要访问自签发的CA(证书颁发机构)证书的HTTPS服务,例如在开发和测试环境中。本篇文章将深入探讨...

    android 使用HttpsURLConnection方式的SSL双向认证

    此项目“android 使用HttpsURLConnection方式的SSL双向认证”着重讲解了如何在Android应用中通过HttpsURLConnection实现SSL的客户端和服务器端之间的双向身份验证,确保通信的隐私和完整性。 首先,我们需要理解SSL...

Global site tag (gtag.js) - Google Analytics