NGINX Plus FIPS 규정 준수
FIPS mode에서 작동하는 FIPS 140-2 validated build of OpenSSL과 함께 사용하면 NGINX Plus FIPS 는 SSL/TLS 암호화 네트워크 트래픽의 decryption 및 encryption과 관련하여 FIPS 140-2(Level 1)의 요구 사항을 준수합니다.
목차
1. 소개
2. 용어 정의
3. NGINX Plus FIPS 올바른 작동 확인
3-1. Step 1: FIPS mode를 사용하도록 운영체제 구성
3-2. Step 2: 운영체제 및 OpenSSL이 FIPS mode에 있는지 확인
3-3. Step 3: 운영체제에 NGINX Plus 설치
3-4: Step 4: FIPS 140-2 준수 확인
4. FIPS mode에서는 어떤 암호가 비활성화될까요?
5. 결론
1. 소개
FIPS 140-2는 cryptographic module의 무결성 및 보안과 관련된 미국 연방 표준입니다. FIPS 140-2 Level 1은 특히 소프트웨어 cryptographic module과 관련이 있으며, 사용할 수 있는 암호화 알고리즘과 무결성을 확인하기 위해 수행해야 하는 자체 테스트에 대해 규정합니다.
몇몇 운영체제 공급업체는 해당 운영체제와 함께 제공되는 OpenSSL Cryptographic module에 대해 FIPS 140-2 Level 1 검증을 획득했습니다.
- Canonical Ltd.: Ubuntu 18.04 OpenSSL Cryptographic Module
- Oracle Corporation: Oracle OpenSSL FIPS Provider
- Red Hat, Inc.: Red Hat Enterprise Linux 7 NSS Cryptographic Module
- SUSE, LLC: SUSE Linux Enterprise Server Kernel Crypto API Cryptographic Module
NGINX Plus FIPS 는 SSL/TLS 및 HTTP/2 트래픽의 암호 해독 및 암호화와 관련된 모든 작업에 OpenSSL Cryptographic module을 독점적으로 사용합니다.
FIPS-validated OpenSSL Cryptographic module이 있고 FIPS mode가 활성화된 운영체제에서 NGINX Plus가 실행되면 NGINX Plus FIPS 는 SSL/TLS 및 HTTP/2 트래픽의 decryption 및 encryption과 관련하여 FIPS 140-2를 준수합니다.
2. 용어 정의
다음과 같은 용어를 사용합니다:
- Cryptographic module – 다른 애플리케이션에서 사용할 수 있는 FIPS-validated 알고리즘 라이브러리로 구성된 OpenSSL 소프트웨어입니다.
- Cryptographic boundary – FIPS-validated 알고리즘을 사용하는 작동 기능입니다. NGINX Plus의 경우 cryptographic boundary에는 http_ssl, http_v2, stream_ssl 및 mail_ssl 모듈에 의해 구현되는 모든 기능이 포함됩니다. 이러한 모듈은 HTTP, HTTP/2, TCP 및 mail 프로토콜을 사용하는 인바운드 및 아웃바운드 연결에 대해 SSL 및 TLS 작업을 구현합니다.
- NGINX Plus – NGINX, Inc. 에서 개발하고 NGINX 서버에서 바이너리 형식으로 제공되는 NGINX Plus 소프트웨어 애플리케이션입니다.
- FIPS mode – 운영체제가 FIPS mode에서 실행되도록 구성된 경우 OpenSSL Cryptographic module은 FIPS 140-2 Level 2를 준수하는 것으로 검증된 mode에서 작동합니다. 대부분의 운영체제는 기본적으로 FIPS mode에서 실행되지 않습니다. 이므로 FIPS mode를 활성화하려면 명시적인 구성이 필요합니다.
- FIPS validated – OpenSSL cryptographic module(OpenSSL FIPS Object Module)의 구성 요소는 공인 인증 연구소에서 공식적으로 검증되었습니다. 모듈이 소스 또는 빌드 프로세스를 수정하지 않고 소스에서 빌드된 경우 유효성 검사가 유지됩니다. 운영체제 공급업체의 OpenSSL 배포판에 있는 FIPS mode 구현에는 이 validated 모듈이 포함되어 있습니다.
- FIPS compliant – NGINX Plus는 FIPS mode에서 실행되는 운영체제에서 FIPS-validated OpenSSL cryptographic module과 함께 사용될 때 Cryptographic boundary 내에서 FIPS 140-2 Level 1을 준수합니다.
3. NGINX Plus FIPS 올바른 작동 확인
다음 프로세스에서는 NGINX Plus FIPS-compliant 방식으로 배포한 다음 FIPS 작업이 올바르게 수행되는지 확인하는 방법을 설명합니다.
이 프로세스에서는 RHEL(Red Hat Enterprise Linux) Version 7.4를 예로 사용하며 FIPS mode에서 구성할 수 있는 다른 Linux 운영체제에 맞게 조정할 수 있습니다.
3-1. Step 1: FIPS mode를 사용하도록 운영체제 구성
다음 데모를 위해 RHEL 7.4 서버를 설치하고 구성했습니다. Red Hat FIPS 문서에서는 부팅 옵션을 설정하고 시스템을 재시작하여 FIPS mode와 non-FIPS mode 간에 운영체제를 전환하는 방법을 설명합니다.
다른 FIPS-compliant Linux 운영체제에서 FIPS mode를 활성화하는 방법에 대한 지침은 운영체제 문서(예: Oracle Linux, Ubuntu)를 참조하십시오.
3-2. Step 2: 운영체제 및 OpenSSL이 FIPS mode에 있는지 확인
다음 테스트를 통해 운영체제가 FIPS mode인지, 운영체제 공급업체에서 제공하는 OpenSSL 버전이 FIPS-compliant인지 확인할 수 있습니다.
운영체제 flag를 확인: 운영체제가 FIPS mode인 경우 crypto.fips_enabled는 1입니다. 그렇지 않으면 0입니다.
$ sudo sysctl -a | grep fips
crypto.fips_enabled = 1
OpenSSL이 SHA1 해시를 수행할 수 있는지 확인: 이 테스트는 OpenSSL이 올바르게 작동하는지 확인합니다. SHA1 해시 알고리즘은 모든 mode에서 허용되므로 이 명령이 실패하면 OpenSSL 구현이 제대로 작동하지 않음을 나타냅니다.
$ openssl sha1 /dev/null
SHA1(/dev/null)= da39a3ee5e6b4b0d3255bfef95601890afd80709
OpenSSL이 MD5 해시를 수행할 수 있는지 확인: 이 테스트는 OpenSSL이 FIPS mode에서 실행되고 있는지 확인합니다. MD5는 FIPS mode에서 허용되는 해시 알고리즘이 아니므로 이를 사용하려는 시도는 실패합니다.
$ openssl md5 /dev/null
Error setting digest md5
140647163811744:error:060800A3:digital envelope routines:EVP_DigestInit _ex:disabled for fips:digest.c:251:
OpenSSL이 FIPS mode에서 실행되지 않는 경우 MD5 해시는 정상적으로 작동합니다.
$ openssl md5 /dev/null
MD5(/dev/null)= d41d8cd98f00b204e9800998ecf8427e
3-3. Step 3: 운영체제에 NGINX Plus 설치
NGINX 문서에 따라 NGINX Plus repository에서 직접 또는 nginx-plus package (rpm 또는 deb package)를 다른 시스템에 다운로드하고 호스트 운영체제에 수동으로 설치하여 호스트 운영체제에 NGINX Plus를 설치합니다.
NGINX Plus가 올바르게 설치되었는지 확인하십시오. 다음 명령을 실행하여 NGINX Plus가 설치되어 있고, 예상 OpenSSL cryptographic module을 사용하고 있는지 확인하십시오.
$ nginx -V
nginx version: nginx/1.15.2 (nginx-plus-r16)
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
OpenSSL 라이브러리의 버전 번호에 -fips 접미사가 포함되어 있는지 확인하세요. 이는 라이브러리가 FIPS 검증되었음을 나타내지만 FIPS mode에서 실행 중인지 확인하지는 않습니다.
간단한 SSL/TLS-protected website를 제공하도록 NGINX Plus FIPS 구성: NGINX Plus에 다음 간단한 구성을 추가합니다:
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/test.crt;
ssl_certificate_key /etc/nginx/ssl/test.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
필요한 경우 테스트 목적으로 자체 서명된 인증서를 생성할 수 있습니다:
$ mkdir -p /etc/nginx/ssl
$ openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl/test.key -x509 -days 365 -out /etc/nginx/ssl/test.crt
원격 호스트에서 HTTPS를 사용하여 웹사이트에 액세스할 수 있는지 확인합니다. openssl s_client 명령을 사용하여 NGINX IP 주소에 연결하고 HTTP message GET /을 입력합니다.
$ (echo "GET /" ; sleep 1) | openssl s_client -connect <NGINX-Plus-address>:443
이 테스트에는 openssl s_client를 사용하세요. 연결에서 어떤 SSL/TLS 암호가 협상되었는지 명확하게 확인하기 때문입니다. 일부 디버깅 정보(선택한 암호 포함) 후에 기본 “Welcome to nginx!” 본문이 표시됩니다.
3-4: Step 4: FIPS 140-2 준수 확인
FIPS 140-2는 Camellia block 암호를 포함한 일부 암호화 알고리즘의 사용을 허용하지 않습니다. 다른(FIPS mode가 아닌) 서버에서 알려진 암호를 사용하여 SSL/TLS 요청을 실행하여 FIPS 140-2 준수 여부를 테스트할 수 있습니다.
RC4-MD5
$ (echo "GET /" ; sleep 1) | openssl s_client -connect <NGINX-Plus-address>:443 -cipher RC4-MD5
이 암호는 안전하지 않으며 기본적으로 NGINX Plus에 의해 비활성화됩니다. SSL handshake는 항상 실패합니다.
CAMELLIA-SHA
$ (echo "GET /" ; sleep 1) | openssl s_client -connect <NGINX-Plus-address>:443 -cipher CAMELLIA256-SHA
이 암호는 안전한 것으로 간주되지만 FIPS 표준에서는 허용되지 않습니다. 대상 시스템이 FIPS 140-2를 준수하면 SSL handshake가 실패하고 그렇지 않으면 성공합니다.
FIPS mode에서 실행 중인 호스트에서 클라이언트 요청을 실행하려고 하면 OpenSSL 클라이언트가 이 암호를 사용할 수 없기 때문에 실패합니다.
AES2560-SHA
$ (echo "GET /" ; sleep 1) | openssl s_client -connect <NGINX-Plus-address>:443 -cipher AES256-SHA
이 암호는 안전한 것으로 간주되며 NGINX Plus FIPS 140-2에서 허용됩니다. SSL handshake가 성공합니다.
4. FIPS mode에서는 어떤 암호가 비활성화될까요?
FIPS 140-2 표준은 일반적인 SSL/TLS 암호의 하위 집합만 허용합니다.
다음 테스트에서는 Qualys SSL 서버 테스트를 사용하여 NGINX Plus에서 제공하는 암호를 조사합니다. ssl_ciphers HIGH:!aNULL:!MD5 지시문을 사용하는 기본 구성에서 NGINX Plus는 SSL/TLS 클라이언트에 다음 암호를 제공합니다.

호스트 운영체제에서 FIPS mode가 활성화되면 Camellia block 암호(TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 및 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA)를 사용하는 두 개의 암호가 제거됩니다.

ssl_ciphers AAL 지시문으로 NGINX Plus를 구성하면 NGINX Plus는 OpenSSL cryptographic module에서 사용할 수 있는 모든 관련 암호를 클라이언트에 제공합니다. FIPS mode는 다음 암호를 비활성화합니다.
TLS_ECDH_anon_WITH_RC4_128_SHATLS_ECDHE_RSA_WITH_RC4_128_SHATLS_RSA_WITH_CAMELLIA_128_CBC_SHATLS_RSA_WITH_CAMELLIA_256_CBC_SHATLS_RSA_WITH_IDEA_CBC_SHATLS_RSA_WITH_RC4_128_MD5TLS_RSA_WITH_RC4_128_SHATLS_RSA_WITH_SEED_CBC_SHA
5. 결론
NGINX Plus FIPS 140-2 Level 1 준수가 필요한 배포에서 SSL/TLS로 암호화된 네트워크 트래픽을 decrypt 또는 encrypt하는 데 사용할 수 있습니다.
위에 설명된 프로세스는 NGINX Plus FIPS 140-2 Level 1 표준을 준수하여 작동하는지 확인하는 데 사용할 수 있습니다.
NGINX Plus를 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 논의하십시오.
댓글을 달려면 로그인해야 합니다.