當進行到一個破碎的服務器,你可以遇到麻煩由於Android的默認行爲是拋出異常SSLException在首位HTTPS連接。Android安全警告對話框
所以,我想知道是否有一個標準的安全提示對話框,要求用戶對一個WebView具有的無效證書採取行動(使用'繼續','查看證書'和'取消'選項)?
例如黑莓自動示出了這樣的對話框,並等待提高錯誤之前代表用戶的動作。我可以在Android中做同樣的事嗎?
當進行到一個破碎的服務器,你可以遇到麻煩由於Android的默認行爲是拋出異常SSLException在首位HTTPS連接。Android安全警告對話框
所以,我想知道是否有一個標準的安全提示對話框,要求用戶對一個WebView具有的無效證書採取行動(使用'繼續','查看證書'和'取消'選項)?
例如黑莓自動示出了這樣的對話框,並等待提高錯誤之前代表用戶的動作。我可以在Android中做同樣的事嗎?
我想有沒有這樣的事情 - 瀏覽器使用自定義對話框,不要將其暴露在第三方應用程序。至少我找不到任何提及的理想行爲。順便說一句,iOS的行爲完全像Android。
沒有標準對話框,這樣,事實上的HttpClient的默認行爲將是僅接受證書是Android的受信任的證書存儲區的一部分。
您可以通過建立自己的信任管理器,你再與你的HttpClient的實例相關聯的做到這一點。這看起來是這樣的:
public class PromptUserTrustManager implements X509TrustManager
{
private AcceptUserSelectedCertsTrustManager(ValidateCertificateCallback callback) throws NoSuchAlgorithmException, KeyStoreException
{
KeyStore keyStore = null;
TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
factory.init(keyStore);
TrustManager [] trustmanagers = factory.getTrustManagers();
m_standardTrustManager = (X509TrustManager) trustmanagers[0];
}
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException
{
}
// This is where you check the server cert and make the determination
@Override
public void checkServerTrusted(X509Certificate[] certChain, String authType)throws CertificateException
{
try
{
m_standardTrustManager.checkServerTrusted(certChain,authType);
}
catch(CertificateException e)
{
// Cert isn't trusted - popup the error here. You'll need to
// make sure you switch to the UI thread since here you're on a network thread
if(!userAcceptsCert(certChain))
{
throw e;
}
}
}
}
所以基本上你所做的是在checkServerTrusted回調中,你問平臺是否信任證書。如果不是,那麼對信任管理器的調用會拋出異常。然後你可以提示用戶他們想要做什麼。
同樣的事情可以使用web視圖onReceivedSslError()此時您可以顯示一個等效的警告允許用戶如果他們希望繼續進行。