Использование HTTPS с REST в Java

Если разработчики, с которыми Вы работаете, не знакомы с шаблоном MVC, я не был бы. Как минимум я говорил бы с ними сначала прежде, чем внести такое большое изменение.

32
задан Avinash 23 December 2016 в 19:09
поделиться

2 ответа

Когда вы говорите «есть ли более простой способ ... доверять этому сертификату», это именно то, что вы делаете, добавляя сертификат в хранилище доверенных сертификатов Java. И это очень, очень легко сделать, и вам ничего не нужно делать в вашем клиентском приложении, чтобы это хранилище доверенных сертификатов было распознано или использовано.

Найдите на своей клиентской машине, где находится ваш файл cacerts (это ваше доверие Java по умолчанию store и по умолчанию находится в /lib/security/certs/cacerts.

. Затем введите следующее:

keytool -import -alias <Name for the cert> -file <the .cer file> -keystore <path to cacerts>

Это импортирует сертификат в ваше хранилище доверенных сертификатов, и после этого, ваше клиентское приложение сможет без проблем подключиться к вашему HTTPS-серверу Grizzly.

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

keytool -import -alias <Name for the cert> -file <the .cer file> -keystore <path to new trust store>

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

java -Djavax.net.ssl.trustStore=<path to new trust store> -Djavax.net.ssl.trustStorePassword=<trust store password>

Легко, чутко. ​​

46
ответ дан 27 November 2019 в 20:32
поделиться

Вот болезненный путь:

    SSLContext ctx = null;
    try {
        KeyStore trustStore;
        trustStore = KeyStore.getInstance("JKS");
        trustStore.load(new FileInputStream("C:\\truststore_client"),
                "asdfgh".toCharArray());
        TrustManagerFactory tmf = TrustManagerFactory
                .getInstance("SunX509");
        tmf.init(trustStore);
        ctx = SSLContext.getInstance("SSL");
        ctx.init(null, tmf.getTrustManagers(), null);
    } catch (NoSuchAlgorithmException e1) {
        e1.printStackTrace();
    } catch (KeyStoreException e) {
        e.printStackTrace();
    } catch (CertificateException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (KeyManagementException e) {
        e.printStackTrace();
    }
    ClientConfig config = new DefaultClientConfig();
    config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
            new HTTPSProperties(null, ctx));

    WebResource service = Client.create(config).resource(
            "https://localhost:9999/");
    service.addFilter(new HTTPBasicAuthFilter(username, password));

    // Attempt to view the user's page.
    try {
        service.path("user/" + username).get(String.class);
    } catch (Exception e) {
        e.printStackTrace();
    }

Надо любить эти шесть разных пойманных исключений :). Конечно, есть некоторый рефакторинг, чтобы немного упростить код. Но мне нравятся параметры -D delfuego на виртуальной машине. Мне жаль, что не было статического свойства javax.net.ssl.trustStore, которое я мог бы просто установить. Всего две строчки кода и готово. Кто-нибудь знает, где это будет?

Это может быть слишком много, чтобы спрашивать, но в идеале keytool не будет использоваться. Вместо этого доверенный магазин будет создаваться кодом динамически, а сертификат добавляется во время выполнения.

Должен быть лучший ответ.

11
ответ дан 27 November 2019 в 20:32
поделиться
Другие вопросы по тегам:

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