SSL-аутентификация клиента в Android
Мне нужно написать приложение для Android, которое будет общаться с сервисом.Net. Я должен сделать проверку подлинности сервера / клиента. Я нашел несколько полезных тем ( этот блог и этот блог), но они оба показывают, как сделать проверку подлинности сервера. Как я могу сделать аутентификацию клиента? Я нашел полезное обсуждение, но там автор использует Sockets, но мне нужно сделать это через HttpClient.
1 ответ
Следующее позволяет мне использовать мои собственные сертификаты rootca и client+server. т.е. безопасность, никому не платя денег:-)
создайте свою rootca, а также клиентские и серверные ключи и сертификаты, используя openssl (множество обучающих программ для этого в Интернете)
создайте rootcacert.bks, используя keytool с bouncycastle в качестве поставщика и -importcert
создать clientcertandkey.p12, используя openssl pkcs12 -export ...
HttpClient httpClient = null;
try {
HttpParams httpParameters = new BasicHttpParams();
KeyStore rootca = KeyStore.getInstance("BKS");
rootca.load(getResources().openRawResource(R.raw.rootcacert),"bkskeystorepass".toCharArray());
KeyStore mycert = KeyStore.getInstance("pkcs12");
mycert.load(getResources().openRawResource(R.raw.clientcertandkey),"pkcs12storepass".toCharArray());
SSLSocketFactory sockfact = new SSLSocketFactory(mycert,null,rootca);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https",sockfact , 443));
httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParameters, registry), httpParameters);
} catch (Exception e) {
e.printStackTrace();
}