簡體   English   中英

在Android-J2SE上使用SSL與服務器客戶端套接字通信

[英]Using SSL with server client socket communication on android-j2se

我正在使用服務器-客戶端模型制作一個非常小型的應用程序,其中服務器是j2se應用程序,客戶端是android應用程序。

該服務器將托管有動態DNS,並且需要像更改域名一樣可移植。

現在使用SSL可能會出現問題,因為要求證書具有可識別的服務器地址(域名或IP),兩者都可能會更改。 我認為這是為了防止某人偽裝成服務器從另一個位置發送相同的公鑰。

那么我該如何應對呢?

以下是繼續進行的提示。 添加一個用於驗證服務器證書的連接的自定義信任管理器-添加一個自定義主機名驗證邏輯,該邏輯將主機名評估為可接受的列表-或僅將硬編碼設置為true。

        SSLContext ctx = SSLContext.getInstance("TLS");
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(getTrustedCert());//todo
        ctx.init(null, tmf.getTrustManagers(), null);

        HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());

        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {  
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                return isInAcceptableHostNameList(arg0);//todo
            }
        });

文檔 -

此類使用HostnameVerifier和SSLSocketFactory。 這兩個類都有默認的實現。 但是,可以按每個類(靜態)或每個實例替換這些實現。 創建實例時,將為所有新的HttpsURLConnections實例分配“默認”靜態值,但可以通過在連接之前調用適當的每個實例集方法來覆蓋它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM