Часть 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