Android做客户端,PC做服务器端,SSLSocket通信,双向认证

最近上Trustworthy Computing这课的,终于结课了。最后的Final Project熬了几天夜总算做出来了。

题目是Android Based Medical Record Security, 老师就给了个题目,实现方法任意。

然后就网上各种查资料,其实关于SSL双向验证的还挺多,大家可以搜一下,基本原理就不赘述了,讲个思路。


做网络编程的我们都应该学过Socket通信,以java为例,客户端发送,服务器等待接受,接到以后返回,然后客户端收到数据,一次通信完成。 

所以客户端服务器数据交换就是这样了。但是如何实现安全性?最好的办法是用https,但因为我没学过多少php,还是想用java实现服务器端。

所以思路就是: Android客户端+Java服务器+JDBC+MySQL    数据库加密:AES, 密码保护:Salt+SHA1


1. SSLSocket

实现方法去搜一下,有很多,其实https更好,socket其实不太稳,学得不精,怕解释错,个人感觉如果在自己家wifi或者用iphone个人热点,都可以把

android和PC连起来,但是在学校的公用无线网就连不起来,我觉得可能是防火墙和路由的问题,输对IP地址也没用。

总结下是:客户端BKS秘钥库(keystore), Java JKS 秘钥库。 一定要这么搞,不然肯定会报错说SSL 握手协议出错啊什么的。不懂SSL 的去看看原理。

1.1 如何生成BKS格式的秘钥库:

如果你对Keystore一无所知,那么请静下心来,仔细看看什么是keystore,如何生成keystore。 很多同学会很着急,想一下就做出来,但是你想,原理你都不知道,做出来怎么用你怎么会理解? 比如说下面这几行代码,看起来会很复杂,说的是什么都不知道,但是你把它多看看,查点相关资料,就会发现其实很简单,千万不要上来就拿来用,弄不出来就来问为啥没弄对。

windows打开cmd,mac打开terminal. 我用的mac,所以就讲mac的。在命令行打以下代码。第一行是说要生成一个别名叫做androidclient的keystore(不知道alias自己去查), 算法RSA,有效期10000天, 生成的文件是androidclientkeys,格式是BKS, -provide 这个很重要,你首先要装一个包到java的虚拟机里(搜索如何生成BKS秘钥库

第二行是通过秘钥库生成证书

然后一样,把服务器的秘钥库和证书生成,默认格式就是JKS, 不用加provider。

最后就是把各自的证书加到各自的trust key store(信任秘钥库),这样他们在通信的时候才能做authentication和加密数据

keytool -genkey -alias androidclient -keyalg RSA -validity 10000 -keystore androidclientkeys -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
keytool -export -alias androidclient -keystore androidclientkeys -storetype BKS  -file androidclient.cer -provider org.bouncycastle.jce.provider.BouncyCastleProvider

keytool -import -alias javaserver -keystore javaservertrust -storetype JKS -file androidclient.cer

总结: 客户端服务器各有2个秘钥库,1个证书

1.2 如何使用秘钥库

看这个链接 http://blog.csdn.net/hfeng101/article/details/10163627

这位同学也讲的比较清楚,代码也有,基础的通信代码就这么写. 要提供一堆基本信息。 有时间我再补充

2. 数据库

本地数据库, Mysql,去官网下一个,然后在本机安装,这样我们通过terminal 登入数据库 

mysql -u root -p

然后输代码,建个表,查询什么的就好了。

用JDBC连接数据库,代码先不放上来了,如何做看我一篇日志

然后用加密数据库,结果和原理见下图

用户信息用AES加密,DES容易被破解,3DES没AES慢,AES安全又挺好。

Android做客户端,PC做服务器端,SSLSocket通信,双向认证_第1张图片


这图是google看到的,感觉挺好看,拿过来用了

Android做客户端,PC做服务器端,SSLSocket通信,双向认证_第2张图片

3. android

安卓嘛,这个比较简单了,做几个好看的界面,把SSL的client程序往里一放就好。有时间再放我做的.


基本上就是这样,如果也有做类似项目的同学可以交流下,最重要的是,要有耐心,一开始什么都不知道的时候,别急,要搞明白原理,别拿着别人的代码往程序里一放,一运行,好了就不管了,不好又到处问。 起码你也得看看这些代码说了点啥,干了个啥,多思考,学到东西才是真的。




你可能感兴趣的:(加密,SSLSocket,网络编程,数据库,安全,项目开发,Android开发)