簡體   English   中英

如何信任 Android 上的自簽名證書?

[英]How to trust self signed certificate on Android?

我已經為我的服務器生成了自簽名證書。 然后通過設置 -> 安全 -> 安裝將其添加到 Android。

當我嘗試從應用程序連接到我的服務器時出現錯誤:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

據我所知,在我將證書添加到受信任列表后,它應該可以正常工作。 我錯過了什么嗎? 思路是通過Android系統添加證書,不修改應用代碼。

順便說一句,我正在使用OkHttpClient進行網絡連接。 也許我應該為https連接啟用一些東西?

對 Android 而言,重要的是當您生成自簽名證書時,將其標記為認證機構,以便授權它認證證書——即使只是對自己進行簽名,從而證明它是自己。

這是在basicConstraints擴展中完成的,聲明CA:TRUE而不是默認的CA:FALSE 當您導入如此標記的證書時,Android 會將其視為用戶安裝的根證書,您應該能夠在Credential storage > Trusted credentials > USER下看到它。

然而,具有這一點的證書是一種強大的力量,過去,這種證書已被惡意工具用來監視所謂的加密用戶通信。 因此,這些天,當這種 CA 證書生效時,Google Play Protect 將希望與用戶進行交流。

考慮使用src/debug/xml/ network_security_config.xml

它應該類似於:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="@raw/debug_cas"/>
        </trust-anchors>
    </debug-overrides>
</network-security-config>

其中 debug_cas 是您用來為您的服務器生成證書的自定義證書頒發機構。 請注意,如果您使用本地服務器通過 IP 訪問它,則您的服務器證書中必須有一個帶有IP的 subjectAltName,否則它會給您一個javax.net.ssl.SSLPeerUnverifiedException

這個例子有兩個代碼路徑https://stackoverflow.com/a/70543735/1542667

首先加入網絡安全配置,然后加入okhttp客戶端。

您需要使用 keytool 將證書添加到您的 cacerts。

請參閱“無法找到到請求目標的有效認證路徑”

暫無
暫無

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

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