日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android搭建https,android 搭建https Server(示例代码)

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android搭建https,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格式的,在上面的情況下就跑不通的。

然后將其放到%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的所有信息官網上有詳細說明:

然后再使用最剛開始貼出來代碼即可,親測可行。

總結

以上是生活随笔為你收集整理的android搭建https,android 搭建https Server(示例代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。