android 搭建https Server
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android 搭建https Server,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3484字,纯文字阅读大概需要5分钟。
内容图文
![android 搭建https Server](/upload/InfoBanner/zyjiaocheng/1333/aa417ce1ad2b44b782c5dae843762e73.jpg)
在android上采用http协议的服务器,需求有点奇葩,非要用https更是醉了。这里只要求单向https认证,不要双向认证。
本文采用的开源框架Nanohttpd( https://github.com/NanoHttpd/nanohttpd ),在release页面下载jar包本地进行导入.
Nano的使用比较简单,集成NanoHTTPD这个类,对serve函数进行重载即可。
这里强调使用是https,这个可能比较的麻烦。下面详细进行说明
public class CenterService extends Service{ private static final String TAG = CenterService.class.getSimpleName(); private static final int SERVER_PORT = 4567; SoudboxServer soudboxServer; @Override public void onCreate() { super.onCreate(); soudboxServer = new SoudboxServer(SERVER_PORT,this); Log.i(TAG,"create server"); new Thread(new Runnable() { @Override public void run() { try { Log.i(TAG,"server thread start "); createMySSLFactory(); soudboxServer.start(); try { long start = System.currentTimeMillis(); Thread.sleep(100L); while (!soudboxServer.wasStarted()) { Thread.sleep(100L); if (System.currentTimeMillis() - start > 2000) { Assert.fail("could not start server"); } } } catch (InterruptedException e) { } Log.i(TAG,"server start"); } catch (IOException e) { e.printStackTrace(); } catch (CertificateException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnrecoverableKeyException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } } }).start(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); if(null != soudboxServer){ soudboxServer.stop(); } } private static final String KEYSTORE_PWD = "ssltest"; private void createMySSLFactory() throws NoSuchAlgorithmException, KeyStoreException, IOException, UnrecoverableKeyException, KeyManagementException, CertificateException { InputStream inputStream = null; //选择安全协议的版本 SSLContext ctx = SSLContext.getInstance("TLS"); KeyManagerFactory keyManagers = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); inputStream = getResources().openRawResource(R.raw.test); //选择keystore的储存类型,andorid只支持BKS KeyStore ks = KeyStore.getInstance("BKS"); ks.load(inputStream, KEYSTORE_PWD.toCharArray()); keyManagers.init(ks, KEYSTORE_PWD.toCharArray()); ctx.init(keyManagers.getKeyManagers(), null, null); SSLServerSocketFactory serverSocketFactory = ctx.getServerSocketFactory(); soudboxServer.makeSecure(serverSocketFactory,null); } }
步骤一:生成证书
android 上面只支持BKS格式的证书,如果采用默认的Keytool工具生成的JKS格式的,在上面的情况下就跑不通的。
首先到点击下个下载 http://www.bouncycastle.org/download/bcprov-ext-jdk15on-155.jar
然后将其放到%JAVA_HOME%\jre\lib\ext这个目录下
找到%JAVA_HOME%\jre\lib\security\java.security这个文件,进行编辑,加入以下内容:
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
通过cmd命令行输入:keytool -genkey -keystore test.keystore -keyalg RSA -keypass ssltest -storepass ssltest -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
-keystore 后面接的是生成文件的名字
-keypass 是设置的一个密码(官方说法是更改密钥库的存储口令)
--storepass 是设置的一个密码(官方说法是更改条目的的密钥口令)
经过上面的命令后,可以生成一个test.keystore的文件,可以通过下面的命令进行查看:
keytool -list -v -keystore test.keystore -storepass ssltest -storetype BKS
效果图如下:
步骤二:将生成的test.keystore放在资源的raw目录下
关于SSL的所有信息官网上有详细说明:
http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#Debug
然后再使用最刚开始贴出来代码即可,亲测可行。
原文:http://blog.csdn.net/xjz729827161/article/details/53466957
内容总结
以上是互联网集市为您收集整理的android 搭建https Server全部内容,希望文章能够帮你解决android 搭建https Server所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。