您的位置:首页 > 理论基础 > 计算机网络

I-jetty 移植及Https 配置使用

2016-03-22 15:56 429 查看
工作中遇到一个需求, 需要在局域网内架设一个服务器,把手机端的操作APK打包到盒子中,安卓平台和IOS平台的用户都可以通过局域网来下载操作软件. 安卓端的实现比较简单, 通过Http 协议就可以了,但是Ios的安装协议必须通过Https来实现.

1.为了能过是够使用80端口, 需要修改安卓系统源码: java/net/Socket.java, 默认是限制1024以下的端口为系统保留, 修改这个值为 小于80的任何值.

2.Htpps 协议的使用需要有经过正规的证书厂商认证的证书, 这里只要使用最简单的证书就可以了,该这书可以到”沃通(https://www.wosign.com/)”的网站上去申请有效期为3年的SSL证书. 免费的很快就能拿到, 大概半个小时,需要提供域名.通过域名的认证后才能获取针对该域名签名的SSL 证书.证书和域名是捆绑在一起的. 得到的证书解压缩后是一个文件夹:



3.沃通提供的SSL签名针对不同的服务器和语言,我们可以使用的是提供给java 语言的,最接近的是 for Tomcat.zip ,解压该文件, 得到一个 xxx.jks 的文件,这个就是加密的证书文件.但是这种格式的证书不能直接配置到 Android 系统中, Android 系统只支持 bks 类型的加密文件.下一步就是要把 得到的 xxx.jks 文件转换为 xxx.bks 文件.

3.1: 替换JDK1.6中的两个压缩包:

1.环境JDK1.6

下载地址: http://download.csdn.net/detail/sfhong2008/9469474

解决jce_policy-6.zip将里面的local_policy.jar和US_export_policy.jar复制并覆盖%JAVA_HOME%/jre/lib/security下的local_policy.jar和US_export_policy.jar



bcprov-ext-jdk16-146.jar

bcprov-jdk16-146.jar

两个jar包放到 C:\Program Files\Java\jdk1.6.0_24\jre\lib\ext

修改 C:\Program Files\Java\jdk1.6.0_24\jre\lib\security\java.security文件, 添加一下代码:



security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider



4.证书格式转换:

4.1 将解压得到的test.jks证书复制到桌面:



4.2打开CMD 界面, 执行keytool 命令转换证书格式:

keytool -importkeystore -srckeystore “C:\Documents and Settings\Administrator\桌面\test.jks” -destkeystore test.bks -srcstoretype JKS -deststoretype BKS -srcstorepass 123456abcABC -deststorepass 123456abcABC -provider org.bouncycastle.jce.provider.BouncyCastleProvider

注意: 整条命令是一行的, 只是在网页上显示自动换行了,将命令复制到文本编辑器,把换行的空格删除掉,还原成一行,在复制到控制台执行

需要修改的位置:

“C:\Documents and Settings\Administrator\桌面\test.jks” : jks 证书存放的位置,建议放到桌面

test.bks: 转换后的证书名, 目录使用默认的位置即可

123456abcABC: 证书的密码(申请证书的时候填写的)



转换命令执行成功后,CMD控制台会显示成功导入别名1项. 转换后的证书被存放在了以下位置:



5.I-Jetty配置:

SslContextFactory sslContextFactory = new SslContextFactory();

sslContextFactory.setKeyStore(_keystoreFile);

sslContextFactory.setTrustStore(_truststoreFile);

sslContextFactory.setKeyStorePassword(_keystorePassword);

sslContextFactory.setKeyManagerPassword(_keymgrPassword);

sslContextFactory.setKeyStoreType(“bks”);

sslContextFactory.setTrustStorePassword(_truststorePassword);
sslContextFactory.setTrustStoreType("bks");
// sslContextFactory.setNeedClientAuth(false);
sslContextFactory.addExcludeCipherSuites(new String[]{"TLS_DHE_DSS_WITH_AES_128_CBC_SHA",


“TLS_DHE_RSA_WITH_AES_128_CBC_SHA”,

“TLS_RSA_WITH_AES_128_CBC_SHA”,

“TLS_DHE_DSS_WITH_AES_256_CBC_SHA”,

“TLS_DHE_RSA_WITH_AES_256_CBC_SHA”,

“TLS_RSA_WITH_AES_256_CBC_SHA”,

“SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA”,

“SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA”}

);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: