Стандартного диалога как такового не существует, и фактически 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, и вы спрашиваете платформу, доверяет ли она сертификату.Если этого не произойдет, то вызов диспетчера доверия вызывает исключение.Затем вы можете предложить пользователю, что он хочет сделать.
То же самое можно сделать в WebView с помощью onReceivedSslError (), после чего вы можете отобразить эквивалентное предупреждение, позволяющее пользователю продолжить, если он этого пожелает.