Как запустить полностью совместимое с FIPS приложение Spring Boot

Я должен соответствовать следующим критериям:

  • Tomcat работает в режиме FIPS
  • JDK использует провайдера FIPS ssl

ожидается, что приложение «запустится в режиме FIPS». Верно ли это предположение?

Я думаю, что Tomcat настроен с помощью прослушивателя жизненного цикла APR, при этом для APR требуется определенный собственный компоненты, которые необходимо установить. После того, как эти компоненты станут доступны, можно включить APR с помощью этого (учитывая это). Верный?

Примечание для себя: Не все считают APR хорошей идеей. .

Теперь поставщик SSL FIPS кажется быть связанным с SunJSSE, и кажется, что здесь файлы JAR, предоставляющие для этого функциональные возможности. Это верно? Достаточно ли этих JAR-файлов для Tomcat, несмотря на то, что они не являются родными?

Это много вопросов, я знаю. Но в основном это как запустить полностью совместимое с FIPS приложение Spring Boot?


person crusy    schedule 24.07.2019    source источник


Ответы (1)


Часть 1: «Tomcat работает в режиме FIPS» в Ubuntu

Предисловие № 1. Некоторые общие (но неполные) инструкции можно найти здесь.

Предисловие № 2. Для следующего требуется OpenSSL с сертифицированными модулями FIPS 140-2. В Ubuntu они доступны только для «Пользователей Ubuntu Advantage Advanced» в Ubuntu 16.04! См. здесь и здесь.

  • $ sudo apt install libapr1 libapr1-dev (из здесь, может быть sudo apt install libapr1-dev libssl-dev, см. здесь)
  • Загрузите tomcat-native-1.2.23-src с здесь , извлечь, перейти к tomcat-native-1.2.23-src/native/
  • $ ./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/path/to/java-home/ --with-ssl=yes
  • $ make
  • Добавьте -Djava.library.path=/path/to/tomcat-native-1.2.23-src/native/.libs к аргументам jvm
  • добавьте следующее в свой проект
import org.apache.catalina.core.AprLifecycleListener;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.Ssl;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AprConfig {

  @Bean
  public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
      @Override
      public Ssl getSsl() {
        // avoid "IllegalStateException: To use SSL, the connector's protocol handler must be an AbstractHttp11JsseProtocol subclass":
        return null;
      }
    };

    // enable APR:
    factory.setProtocol("org.apache.coyote.http11.Http11AprProtocol");

    AprLifecycleListener aprLifecycleListener = new AprLifecycleListener();

    // will throw "FIPS was not available to tcnative at build time. You will need to re-build tcnative against an OpenSSL with FIPS." with default OpenSSL:
    aprLifecycleListener.setFIPSMode("on");

    factory.addContextLifecycleListeners(aprLifecycleListener);
    return factory;
  }
}

Часть 2: «JDK использует FIPS ssl Provider»

Java использует JCE "для использования усиленных версий стандартных алгоритмы". Это потребовало установки соответствующих файлов политики для JDK до 8u161, 7u171 и 6u16; «в этих версиях и более поздних версиях файлы политик включены, но не включены по умолчанию», в то время как «JDK 9 и более поздние версии поставляются с неограниченными файлами политик и используют их по умолчанию».

JCE — это интерфейс, который реализуется каким-то «поставщиком» (например, JDBC — это интерфейс, который должен быть реализован). Хотя существует даже реализация Oracle, поставщиков, совместимых с FIPS, немного (см. этот список). И я нашел только один, заявивший о совместимости с Java 11, это "Bouncy Castle Crypto API". в версии 1.0.2 — в настоящее время «доступен для раннего доступа», см. Java FIPS Roadmap. Поэтому здесь также следует учитывать версию Java (см.).

Вывод

Для запуска полностью совместимого с FIPS приложения Spring Boot требуется

  • некоторая конфигурация (см. выше)
  • ОС с библиотеками, совместимыми с FIPS, поддерживающими вашу версию Java
person crusy    schedule 30.07.2019