簡體   English   中英

如何防止數據包捕獲解密我的SSL連接

[英]How to prevent packet capture decrypt my SSL connection

我正在開發Android應用程序並使用SSL連接來連接到我的服務器。

要連接到我的Web服務,我使用Volley Request到我的服務器https'地址。

但是,當我試圖使用Packet Capture攔截我的連接時使用man in middle方法攔截我的連接,它看起來像一個非SSL連接。 我可以看到整個請求和響應。 但是,其他應用程序如LINE,Facebook無法通過Packet Capture解密。 我想保護我的網絡服務,甚至是像LINE和Facebook那樣的設備。 我怎樣才能實現這一目標? 我不希望有人知道發送到我的Web服務的任何參數。

我的后端服務器使用谷歌雲平台計算引擎。

編輯:我使用Letsencrypt.org SSL證書。

代碼:

我的自定義請求

public class CustomRestRequest extends Request<JSONObject> implements Serializable {

    private static final String SERVER_URL = "https://myapiurl.com/";

    private Map<String, String> mHeaders = new HashMap<>();
    private Response.Listener<JSONObject> listener;
    private Map<String, String> params;

    public UberGUARestRequest(String action, Map<String, String> params,
                              Response.Listener<JSONObject> responseListener, Response.ErrorListener errorListener) {
        super(Method.POST, SERVER_URL + action, errorListener);
        this.listener = responseListener;
        this.params = params;
    }

    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    }

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONObject(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }

    @Override
    protected void deliverResponse(JSONObject response) {
        listener.onResponse(response);
    }

    @Override
    public Map<String, String> getHeaders() {
        return mHeaders;
    }

    public void setBearerAuthorization(String token) {
        mHeaders.put("Authorization", "Bearer " + token);
    }

}

我的請求示例:

    Map<String, String> params = new HashMap<>();
    params.put("message", message);

    final CustomRestRequest request = new CustomRestRequest("user/support", params,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        if (response.getString("status").equals("00")) {
                            result.status = "00";
                            mListener.onSupportTaskPostExecute(result);
                        } else {
                            result.status = "99";
                            isRunning = false;
                            mListener.onSupportTaskPostExecute(result);
                        }
                    } catch (Exception ex) {
                        result.status = "99";
                        isRunning = false;
                        mListener.onSupportTaskPostExecute(result);
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    result.status = "88";
                    isRunning = false;
                    mListener.onSupportTaskPostExecute(result);
                    error.printStackTrace();
                }
            });
    request.setBearerAuthorization(AppHelper.getAuthCode(getContext()));
    RequestQueue queue = Volley.newRequestQueue(getContext());
    queue.add(request);

只要攻擊者擁有您的設備接受的證書,SSL就容易受到MitM攻擊。*

您的設備主要接受兩種類型的證書:由Verisign或Thawte等受信任組織頒發的證書,以及您自己安裝的證書。

我懷疑Packet Capture,如果你正在使用它,就是在設備上安裝自己的證書以使其受信任,以后能夠欺騙傳出連接上的任何證書。

好消息是,任何源自外部的mitm攻擊都不應該輕易做同樣的事情。 (在某些情況下仍然可能,例如說服您出於可疑原因安裝應用程序或證書)。

要完全阻止這種情況,您可以使用證書固定來確保您的連接不能使用其他證書重新加密。

您還應該嘗試從設備外部進行mitm攻擊,例如使用像Charles這樣的代理來有效地查看您的連接是否仍然安全。

*:SSL無法保證證書與域名之間的鏈接。 它只保證簽署連接的人應該被信任 (需要大量的鹽。任何人都可以購買證書,幾乎沒有驗證。)

暫無
暫無

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

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