簡體   English   中英

帶有 Android 和自簽名服務器證書的 HTTPS GET (SSL)

[英]HTTPS GET (SSL) with Android and self-signed server certificate

我查看了有關如何通過 Android 上的HTTPS從使用自簽名證書的服務器檢索某些內容的各種帖子。 但是,它們似乎都不起作用 - 它們都無法刪除

javax.net.ssl.SSLException:不受信任的服務器證書消息。

修改服務器以獲得可信證書不是一個選項,也不是使服務器證書與服務器的 IP 地址匹配的選項。

請注意,服務器將沒有 DNS 名稱,它只有一個 IP 地址。 GET 請求如下所示:

 https://username:password@anyIPAddress/blabla/index.php?param=1&param2=3

我完全意識到這個解決方案容易受到中間人攻擊等。

因此,解決方案必須忽略對證書缺乏信任,並忽略主機名不匹配。

有沒有人知道使用 Java for Android 執行此操作的代碼?

stackoverflow.com上有很多嘗試來解釋這個問題,還有很多代碼片段,但它們似乎不起作用,據我所知,沒有人提供解決這個問題的代碼塊。 知道是否有人真的解決了這個問題,或者 Android 是否只是阻止了不受信任的證書,這將會很有趣。

我制作了一個使用自簽名或信任所有證書的應用程序。 來源在這里並且可以免費使用:P

只需使用 HttpManager 並使用全部信任創建 SSL 工廠。 示例代碼在這里找到。

正如您正確指出的那樣,有兩個問題:a) 證書不受信任,b) 證書上的名稱與主機名不匹配。

警告:對於得到此答案的任何其他人,這是一個骯臟、可怕的黑客行為,您不得將其用於任何重要的事情。 沒有身份驗證的 SSL/TLS 比根本沒有加密更糟糕 - 讀取和修改您的“加密”數據對於攻擊者來說是微不足道的,您甚至不會知道它正在發生

還和我在一起嗎? 我好怕...

a) 通過創建一個自定義的 SSLContext 來解決,它的 TrustManager 接受任何東西:

SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, new TrustManager[] {
  new X509TrustManager() {
    public void checkClientTrusted(X509Certificate[] chain, String authType) {}
    public void checkServerTrusted(X509Certificate[] chain, String authType) {}
    public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; }
  }
}, null);
HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());

和 b) 通過創建一個 HostnameVerifier 允許連接繼續,即使證書與主機名不匹配:

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
  public boolean verify(String hostname, SSLSession session) {
    return true;
  }
});

兩者都必須發生在代碼的開頭,然后才開始處理 HttpsURLConnections 等等。 這適用於 Android 和常規 JRE。 享受。

如果您使用的是 HttpsURLConnection,則嘗試在connect()之前對其調用setHostnameVerifier ,並將其傳遞給HostnameVerifier ,無論其真實性如何,它都會接受。

如果您有權訪問設備,則可以將證書添加到密鑰庫。 在此處查看更多信息

另一方面,您可以使用這種方法,但我認為它有點丑陋。


資源:

在同一主題上:

如果您問我,請以安全的方式進行。

找到了一個很好的教程http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/並且它真的不難實現。

Maciek 推薦的教程也很好。

我測試了它,它在我的應用程序中運行沒有問題。

我在 4 個月前制作了一個使用自簽名證書的應用程序,這里是我希望它有幫助的代碼: https : //bitbucket.org/momo0002/tlsdemo.git

暫無
暫無

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

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