Подключиться к сайту https с заданным сертификатом p12

Сторона сервера предоставила мне файл сертификата .p12 , который я щелкнул и установил на моем компьютере, а затем я могу получить доступ к ] HTTPS сайт через браузер. Теперь они хотят, чтобы я сканировал их сайт с выданным сертификатом. Я застрял на самом первом этапе, пытаясь получить inputStream из httpsURLConnection . На сайте нет логина. Он только проверяет, есть ли у вас сертификат.

До сих пор я использовал Firefox для экспорта сертификата в файл формата .crt . Затем я использовал команду keytool, чтобы импортировать его (файл .crt , а не .p12 ) в хранилище ключей java. Затем в коде:

KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
File ksFile = new File(keystorePath);
in = new FileInputStream(ksFile);
ks.load(in, "changeit".toCharArray());
X509Certificate cert = (X509Certificate) ks.getCertificate(certificateAlias);

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

HttpsURLConnection con = (HttpsURLConnection) (new URL(urlString)).openConnection();
con.connect();
con.getInputStream();
con.disconnect();

getInputStream () выдаст мне запрет на доступ из-за ошибки 403. Я искал другие связанные темы и на самом деле запутался еще больше, чем до того, как их прочитал. Буду очень признателен за ответы.

Дополнительная информация:

  • Я только что создал экземпляр сертификата и не позволил программе узнать какие-либо ключи (частные, общедоступные и т. Д.). Я считаю, что должен предоставить эти ключи серверу, дав ему знать, что я действительно владею сертификатом. Я совершенно не знаю, как это сделать, как с точки зрения логики, так и с точки зрения синтаксиса.
  • Я пробовал команду keytool для импорта файла сертификата .p12 в хранилище ключей, но каким-то образом опция -pkcs12 не распознается программой keytool. Любая идея о том, как напрямую использовать этот сертификат .p12, тоже была бы замечательной.
  • trustAllCert - это одноэлементный массив TrustMangers, который ничего не проверяет (доверяйте всем). Я не знаю, стоит ли мне продолжать использовать это. Фактически, теперь у меня действительно есть единственный сертификат, которому можно доверять. Как правильно написать trustManger в этом случае?
  • Я не могу контролировать серверную часть. Все, что мне дали, - это URL-адрес для доступа к их сайту, который работает по протоколу HTTPS, и сертификат .p12. На сайте нет логина. Если сертификат установлен, я могу войти.
31
задан Sandip Armal Patil 22 October 2012 в 09:25
поделиться