android 搭建https Server

在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);
    }
}

以上代码不能直接使用,看懂意思就好。上面需要一步步讲解的就是关于 createMySSFactory函数

步骤一:生成证书

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

然后再使用最刚开始贴出来代码即可,亲测可行。

时间: 2024-12-19 18:57:57

android 搭建https Server的相关文章

nginx搭建https单向证书

一)默认情况下ssl模块并未被安装,如果使用该模块则需要在编译nginx的时指定--with-http_ssl_module参数. wget http://nginx.org/download/nginx-1.3.16.tar.gz tar -xf nginx-1.3.16.tar.gz -C /usr/local/ cd /usr/local/nginx-1.3.16/ ./configure --prefix=/usr/local/nginx --user=nginx --group=ngi

linux 搭建https 服务器 (apache)

一.  安装准备 1.    安装Openssl 要使Apache支持SSL,需要首先安装Openssl支持.这里使用的是openssl-0.9.8k.tar.gz 下载Openssl:http://www.openssl.org/source/ tar -zxf openssl-0.9.8k.tar.gz    //解压安装包 cd openssl-0.9.8k                 //进入已经解压的安装包 ./config                          //配

搭建https+nginx服务器

搭建https+nginx的服务器,主要是安装ngnix和使用openssl生成自签证书,并在nginx中配置的过程 一.安装环境 1.安装opnssl(ssl支持) https://www.openssl.org/source/openssl-1.0.1s.tar.gz 2.安装pcre(支持rewrite重定向功能) http://120.52.73.44/nchc.dl.sourceforge.net/project/pcre/pcre/8.38/pcre-8.38.zip 3.安装zli

Linux 使用 Nexus3.x 为 Android 搭建私服

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/55116889 现在Android Studio使用Gradle作为依赖管理工具, 可以说是Android目前最好的依赖管理工具,我们经常通过在build.gradle通过简单的依赖配置就可以使用某个开源项目了,例如okhttp.retrofit,但是如果公司把自己的核心库往jcenter上传又是不太可能的,基于这个问题,今天给大家带来了本篇文章,在强大的Linux平台,使用 Ne

apache+ssl 在linux上搭建https超文本传输,关闭80端口

1.要搭建https,必须要具备的东西 1.超文本传输协议httpd(apache)和ssl模块(mod_ssl) 2.用于加密超文件传输的证书.(openssl制作自签名证书) 3.测试 2.安装httpd yum install httpd mod_ssl -y 3.安装openssl yum install openssl -y 这里介绍httpd默认的配置文件路径.www路径.默认的证书路径.默认的私钥路径. 配置文件路径     /etc/httpd/conf/httpd.conf w

实战:搭建CA认证中心,使用CA证书搭建HTTPS

CA认证中心服务端:xuegod63.cn                         IP:192.168.0.61客户端                  :xuegod64.cn                         IP:192.168.0.62CA:Certificate Authority的缩写,通常翻译成认证权威或者认证中心,主要用途是为用户发放数字证书.认证中心(CA)的功能有:证书发放.证书更新.证书撤销和证书验证.CA证书作用:身份认证--->数据的不可否认性

Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程

一.HTTPS 是什么? 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定.HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输.HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混. HTTPS 目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,HTTPS 网站已不再是

从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html 第二篇http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集群,因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁配置 下面图片来自<Wind

[转] Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程

一.HTTPS 是什么? 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定.HTTPS连接经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输.HTTPS不应与在RFC 2660中定义的安全超文本传输协议(S-HTTP)相混. HTTPS 目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,HTTPS 网站已不再是