Существуют несколько способов решить вашу проблему, но вот один я использую: Всех шагов в этой ссылке http://blog.antoine.li/2010/10/22/android-trusting-ssl-certificates/, но некоторые части могут быть спутаны, так что я объясню весь процесс:
1.- Храните свой файл mycrtfile.crt в пути к знанию, я скажу c: BKS/mycrtfile.crt.
2.-Чтобы создать свой BKS или магазин ключей, вам понадобится файл bcprov-jdk15on-146.jar, этот класс будет выполнять всю работу для нас, есть разные версии, но этот работает для меня http://www.bouncycastle.org/download/bcprov-jdk15on-146.jar также хранить этот файл в C: BKS/
3.-Теперь вы будете использовать Keytool (keytool поставляется с Java SDK. Вы должны найти его в каталоге, который содержит javac), чтобы сгенерировать наше хранилище ключей и убедиться, что он работает перейдите в свой cmd и введите «Keytool», вы увидите доступные команды, которые, значит, работают, или вы можете получить доступ к «C: \ Program Files (x86) \ Java \ jre7 \ bin> keytool».
4.-Теперь, когда все находится в месте, мы можем создать хранилище ключей с этой командной строки:
Keytool -importcert -v -trustcacerts -file "C: \ BKS/mycrtfile.crt" -alias сертификат - Хранилище ключей "C: \ BKS/keystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "C: \ BKS/пров-jdk15on-146.jar" -storetype BKS -storepass MySecret
Давайте посмотрим что в этой строке (я действительно был смущен в этой части): - «c: \ BKS/mycrtfile.crt»: это путь к вашему сертификату. - «c: \ BKS/keystore.bks» - это путь, по которому мы будем хранить хранилище ключей, и вы можете изменить имя out-put, которое я использую keystore, просто убедитесь, что файл расширения .bks - «c: \ BKS/prov-jdk15on-146.jar ": это путь к нашему файлу, который будет выполнять всю работу. -mysecret: это пароль для использования хранилища ключей, который вам понадобится для этого пароля, поэтому не забывайте об этом.
Редакцией:
4.1- использовать Также эту командную строку для проверки, если сертификат был импортирован правильно в хранилище ключей:
Keytool -list -keystore "Рез/сырье/Keystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "C: \ BKS/пров-jdk15on-146.jar" -storetype BKS -storepass MySecret
4,2 -н После этого вы должны увидеть выход, как это:
RootCA, 22.10.2010, trustedCertEntry, Thumbprint (MD5): 24: 77: D9: A8: 91: D1: 3B: FA: 88: 2D: C2: FF: F8: CD: 33: 93 IntermediateCA, 22.10. 2010, trustedCertEntry, Thumbprint (MD5): 98: 0F: C3: F8: 39: F7: D8: 05: 07: 02: 0D: E3: 14: 5B: 29: 43
Это означает, что он был импортирован правильно.
5.- После этого, если вы заходите в свою папку BKS, вы получите файл Keystore.bks, который означает, что мы в пути.
6.- Теперь перейдите к части ANDROID. В вашем проекте проверьте, есть ли у вас «необработанная» папка, которая должна быть в вашем проекте/res/raw, если не создайте эту папку под res.
7. скопируйте файл Keystore.bks в папку raw. Все на месте теперь позволяет перейти к коду.
8 .--- Теперь мы создадим класс, чтобы читать и доверять нашему: хранилища ключей
import java.io.InputStream;
import java.security.KeyStore;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.SingleClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import com.futureconcepts.anonymous.R;
import android.content.Context;
public class Client extends DefaultHttpClient {
final Context context;
public Client(Context context) {
this.context = context;
}
@Override
protected ClientConnectionManager createClientConnectionManager() {
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http",
PlainSocketFactory.getSocketFactory(), 80));
// Register for port 443 our SSLSocketFactory with our keystore
// to the ConnectionManager
registry.register(new Scheme("https", newSslSocketFactory(),443));
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,9000);
HttpConnectionParams.setSoTimeout(httpParams, 9000);
return new SingleClientConnManager(httpParams, registry);
}
private SSLSocketFactory newSslSocketFactory() {
try {
// Get an instance of the Bouncy Castle KeyStore format
KeyStore trusted = KeyStore.getInstance("BKS");//put BKS literal
// Get the raw resource, which contains the keystore with
// your trusted certificates (root and any intermediate certs)
InputStream in =context.getResources().openRawResource(R.raw.keystore);
try {
// Initialize the keystore with the provided trusted certificates
// Also provide the password of the keystore
trusted.load(in, "mysecret".toCharArray());
} finally {
in.close();
}
// Pass the keystore to the SSLSocketFactory. The factory is responsible
// for the verification of the server certificate.
SSLSocketFactory sf = new SSLSocketFactory(trusted);
// Hostname verification from certificate
sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
return sf;
} catch (Exception e) {
throw new AssertionError(e);
}
}
}
9.And мы сделали сейчас, чтобы сделать запрос просто сделать это: HttpClient клиент = новый клиент (это); /// настройка вашего Httpclient.
Теперь вы доверяете только своему сертификату. Надеюсь, это объяснение поможет вам или кому-либо с той же проблемой.
У меня была такая же проблема, чтобы проверить мой ответ, и если вы смущены на шагах, я могу вам помочь. Это будет принимать только ваш сертификат. – Moy
Спасибо @Moises, я закончил работу над этим проектом в течение дня, поэтому завтра я рассмотрю решение и дам вам знать, застрял ли я. – ironicaldiction