Как обработать недопустимые сертификаты SSL с Apache HttpClient? [дубликат]

Я использовал этот сайт, чтобы помочь мне понять основы об Обновлении WiX:

http://wix.tramontana.co.hu/tutorial/upgrades-and-modularization

Впоследствии я создал демонстрационный Установщик, (установил тестовый файл), затем создал установщик Обновления (установил 2 демонстрационных тестовых файла). Это даст Вам основное понимание того, как механизм работает.

И поскольку Mike сказал в книге от Apress, "Полное руководство к Windows Installer", это выручит Вас для понимания, но это не записано с помощью WiX.

Другой сайт, который был довольно полезен, был этим:

http://www.wixwiki.com/index.php?title=Main_Page

120
задан Jakub Šturc 7 November 2019 в 09:05
поделиться

4 ответа

https://mms.nw.ru использует самозаверяющий сертификат, который, очевидно, не содержится в наборе доверенных менеджеров по умолчанию.

Вам потребуется одно из следующих:

  • Настройте SSLContext с помощью TrustManager, который принимает любой сертификат (см. ниже)

  • Настройте SSLContext с соответствующим хранилищем доверенных сертификатов, которое включает ваш сертификат

  • Добавьте сертификат для этого сайта в стандартную java доверенное хранилище.

Вот пример программы, которая создает (в основном бесполезный) контекст SSL, который принимает любой сертификат:

import java.net.URL;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class SSLTest {

    public static void main(String [] args) throws Exception {
        // configure the SSLContext with a TrustManager
        SSLContext ctx = SSLContext.getInstance("TLS");
        ctx.init(new KeyManager[0], new TrustManager[] {new DefaultTrustManager()}, new SecureRandom());
        SSLContext.setDefault(ctx);

        URL url = new URL("https://mms.nw.ru");
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                return true;
            }
        });
        System.out.println(conn.getResponseCode());
        conn.disconnect();
    }

    private static class DefaultTrustManager implements X509TrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }
}
154
ответ дан 24 November 2019 в 01:37
поделиться

Если у вас есть хранилище сертификатов Java (используя отличный класс InstallCert, созданный выше), вы можете заставить Java использовать его, передав "javax.net.ssl .trustStore "параметр при запуске java.

Пример:

java -Djavax.net.ssl.trustStore=/path/to/jssecacerts MyClassName
4
ответ дан 24 November 2019 в 01:37
поделиться

Из http://hc.apache.org/httpclient-3 .x / sslguide.html :

Protocol.registerProtocol("https", 
new Protocol("https", new MySSLSocketFactory(), 443));
HttpClient httpclient = new HttpClient();
GetMethod httpget = new GetMethod("https://www.whatever.com/");
try {
  httpclient.executeMethod(httpget);
      System.out.println(httpget.getStatusLine());
} finally {
      httpget.releaseConnection();
}

Где пример MySSLSocketFactory можно найти здесь . Он ссылается на TrustManager , который вы можете изменить, чтобы доверять всему (хотя вы должны это учитывать!)

10
ответ дан 24 November 2019 в 01:37
поделиться

https://mms.nw.ru , скорее всего, использует сертификат, выданный не центром сертификации. Следовательно, вам необходимо добавить сертификат в надежное хранилище ключей Java, как описано в , невозможно найти действительный путь сертификации для запрошенной цели :

При работе с работающим клиентом с сервером с поддержкой SSL, работающим в https протокол, вы можете получить ошибку 'не удалось найти действующий сертификат путь к запрошенной цели ', если сертификат сервера не выдается центр сертификации, но сам подписано или выпущено частной CMS.

Не паникуйте. Все, что вам нужно сделать, это добавьте сертификат сервера в свой надежное хранилище ключей Java, если ваш клиент написан на Java. Вы, возможно интересно, как будто у тебя нет доступа машина, на которой находится сервер установлен. Есть простая программа могу помочь тебе. Загрузите Java программу и запустите

% java InstallCert _web_site_hostname_

Эта программа открыла соединение с указанный хост и запустил SSL рукопожатие. Он напечатал исключение трассировка стека произошедшей ошибки и показывает сертификаты, используемые сервер. Теперь он предлагает вам добавить сертификат в надежное хранилище ключей.

Если вы передумали, введите 'q'. Если вы действительно хотите добавить сертификат, введите "1" или другое номера для добавления других сертификатов, даже сертификат CA, но обычно вы не хочу этого делать. Как только у вас есть сделал свой выбор, программа будет показать полный сертификат и затем добавил его в хранилище ключей Java с именем jssecacerts в текущем каталог.

Чтобы использовать его в своей программе, либо настроить JSSE, чтобы использовать его как доверие сохранить или скопировать в свой Каталог $ JAVA_HOME / jre / lib / security. Если вы хотите, чтобы все приложения Java признать сертификат надежным и не только JSSE, вы также можете перезапишите файл cacerts в этом каталог.

После всего этого JSSE сможет завершите рукопожатие с хозяином, что вы можете проверить, запустив программу снова.

Чтобы получить более подробную информацию, вы можете проверить Блог Лиланда Больше нет "невозможно найти" действительный путь сертификации к запрошенному target '

46
ответ дан 24 November 2019 в 01:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: