我想要做的事情非常簡單 - 我想從iOS和Android應用連接到服務器時獲得完整的證書鏈。無法從Android鏈中獲取根CA證書
在iOS中,我使用NSURLSession
和壓倒一切的URLSession:didReceiveChallenge:
方法,其中,我能夠獲得在這種情況下看起來像預期的證書鏈:
[leaf certificate] - [intermediate certificate] - [root certificate]
可愛。
現在我正嘗試在Android設備上使用HttpsURLConnection
做同樣的事情。連接到服務器後,我正在使用getServerCertificates()
方法獲得證書鏈(或至少我希望這是它的方法)。這將返回我Certificate[]
對象,其中我得到看起來像這樣的鏈條:
[leaf certificate] - [intermediate certificate]
因此,Android設備上沒有根證書。
你有什麼想法如何從Android鏈中獲取根證書?
預先感謝您。
感謝您的回答提取的代碼。你有,爲什麼我會收到在iOS的情況下,根證書的任何解釋,但在Android上不呢?我在這兩個請求發送到相同的端點案例 – uerceg
假設服務器沒有提供鏈中的根CA(您可以在ssllabs.com中查看它),iOS正在使用信任存儲的匹配證書構建完整的認證鏈,而Android正在驗證相同但仍是沒有添加根證書在我看來,Android(和Java)應該提供這些信息 – pedrofb
是的,感謝你的信息,是有道理的,我試圖覆蓋'X509TrustManager',但仍然沒有運氣。你也許知道是否有安德爾的一種方式oid從設備獲取根證書,用於驗證鏈中的中間設備?(幾乎可以獲得iOS所返回的根目錄,但可能從設備本身讀取它) – uerceg