1.8. FIPS 140-2 호환 인증 정보 저장소 생성


FIPS(Federal Information Processing Standard) 140-2 호환 인증 정보 저장소를 Elytron에서 구성할 수 있습니다. FIPS 140-2는 미국에서 개발한 컴퓨터 보안 표준입니다. 정부 업계 실무 그룹이 암호화 모듈의 품질을 검증합니다. FIPS 발행물( 140-2 포함)은 URL: http://csrc.nist.gov/publications/PubsFIPS.html 에서 확인할 수 있습니다.

두 개의 다른 공급자를 사용하여 Elytron에서 FIPS 140-2 호환 인증 정보 저장소를 구성할 수 있습니다.

중요

JBoss EAP 자체는 FIPS 인증을 받지 않습니다. JBoss EAP의 FIPS 지원 수준은 JBoss EAP를 FIPS 인증 암호화 구현과 함께 사용할 수 있다는 것입니다. 테스트된 구현은 BouncyCastle 및 SunPKCS#11입니다.

NSS는 플랫폼 간 보안 지원 클라이언트 및 서버 애플리케이션을 지원하는 라이브러리 집합입니다. SunPKCS#11 공급자를 JBoss EAP의 NSS 라이브러리와 함께 사용하여 FIPS 140-2 호환 암호화를 구현할 수 있습니다. NSS에 대한 자세한 내용은 Mozilla docs - NSS(Network Security Services) 를 참조하십시오. SunPKCS#11 공급자에 대한 자세한 내용은 PKCS#11 참조 가이드를 참조하십시오.

모든 JDK(Java Development Kit) 공급업체가 FIPS(Federal Information Processing Standard) 140-2 준수에 필요한 NSS 라이브러리에서 구현한 NSS(Network Security Services) 소프트웨어 토큰을 사용하여 SunPKCS#11 보안 공급자 구성을 지원하는 것은 아닙니다. JBoss EAP에서 SunPKCS#11 공급자 및 NSS 데이터베이스를 사용하여 FIPS를 구성하기 전에 JDK에서 지원하는지 확인합니다.

다음은 SunPKCS#11 보안 구성을 지원하는 JBoss EAP에 대해 지원되는 JDK 목록입니다.

  • OpenJDK 11
  • OpenJDK 17

Red Hat Enterprise Linux 8.4부터 FIPS(Federal Information Processing Standard) 시스템 전체 암호화 정책을 활성화하면 Java의 FIPS도 자동으로 활성화됩니다. 기본 NSS(Network Security Services) 데이터베이스를 사용하여 FIPS 140-2 호환 인증 정보 저장소를 생성할 수 있습니다.

이 절차에서 $JAVA_HOME 은 JDK 설치 경로를 나타냅니다. 이 절차의 명령을 root 사용자로 실행합니다.

사전 요구 사항

  • RHEL에서 FIPS가 활성화되어 있습니다.

    다음 명령을 사용하여 FIPS가 활성화되어 있는지 확인할 수 있습니다.

    # fips-mode-setup --check

    RHEL에서 FIPS 활성화에 대한 자세한 내용은 다음 리소스를 참조하십시오.

  • NSS 도구가 설치되어 있습니다.

    Red Hat Enterprise Linux에서는 다음과 같이 DNF 패키지 관리자를 사용하여 NSS 툴을 설치할 수 있습니다.

    # dnf install -y nss-tools
  • JDK(Java Development Kit)는 NSS 라이브러리를 사용하여 PKCS#11의 구성을 지원합니다.

    FIPS를 지원하는 JDK에 대한 자세한 내용은 FIPS를 지원하는 JDK 를 참조하십시오.

  • JBoss EAP가 실행 중입니다.

프로세스

  1. $JAVA_HOME/conf/security/nss.fips.cfg 파일에서 nssDbMode 값을 readWrite 로 업데이트합니다.

    nss.fips.cfg 콘텐츠 예

    name = NSS-FIPS
    nssLibraryDirectory = /usr/lib64
    nssSecmodDirectory = sql:/etc/pki/nssdb
    nssDbMode = readWrite
    nssModule = fips
    
    attributes(*,CKO_SECRET_KEY,CKK_GENERIC_SECRET)={ CKA_SIGN=true }

  2. 인증 정보 저장소를 암호화하는 AES 시크릿 키를 생성합니다.

    참고

    명령에 store password NONE 을 사용해야 합니다.

    구문

    # keytool -genseckey -keystore NONE -storetype PKCS11 -storepass NONE -alias <key_alias> -keyalg <symmetric_key_algorithm> -keysize <key_size>

    예제

    # keytool -genseckey -keystore NONE -storetype PKCS11 -storepass NONE -alias exampleKeyAlias -keyalg AES -keysize 256

  3. 시크릿 키를 읽을 수 있는지 확인합니다.

    # keytool -list -storetype pkcs11 -storepass NONE
    
    Keystore type: PKCS11
    Keystore provider: SunPKCS11-NSS-FIPS
    
    Your keystore contains 1 entry
    
    exampleKeyAlias, SecretKeyEntry,
  4. $JAVA_HOME/conf/security/nss.fips.cfg 파일에서 nssDbMode 값을 readOnly 로 업데이트합니다.

    nss.fips.cfg 콘텐츠 예

    name = NSS-FIPS
    nssLibraryDirectory = /usr/lib64
    nssSecmodDirectory = sql:/etc/pki/nssdb
    nssDbMode = readOnly
    nssModule = fips
    
    attributes(*,CKO_SECRET_KEY,CKK_GENERIC_SECRET)={ CKA_SIGN=true }

  5. 관리 CLI의 공급자 목록에 SunJCE 공급자를 추가합니다.

    1. SunJCE용 공급자 로더를 추가합니다.

      /subsystem=elytron/provider-loader=SunJCE:add(class-names=[com.sun.crypto.provider.SunJCE])
      {"outcome" => "success"}
    2. 집계 공급자에서 Elytron 및 SunJCE를 구성합니다.

      구문

      /subsystem=elytron/aggregate-providers=<aggregate_provider_name>:add(providers=[elytron,SunJCE])

      예제

      /subsystem=elytron/aggregate-providers=exampleAggregateProvider:add(providers=[elytron,SunJCE])
      {"outcome" => "success"}

      참고

      공급자는 명령에 정의된 순서대로 호출됩니다.

  6. SunJCE 공급자를 사용하여 Elytron에 인증 정보 저장소를 생성합니다.

    구문

    /subsystem=elytron/credential-store=<credential_store_name>:add(implementation-properties={keyStoreType => PKCS11, external => true, keyAlias => <key_alias>, externalPath => <path_where_credential_store_is_to_be_saved>}, modifiable=true, credential-reference={clear-text=<password>}, create=true, other-providers=<aggregate_provider_name>)

    예제

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:add(implementation-properties={keyStoreType => PKCS11, external => true, keyAlias => exampleKeyAlias, externalPath => /home/ashwin/example.store}, modifiable=true, credential-reference={clear-text=secret}, create=true, other-providers=exampleAggregateProvider)
    {"outcome" => "success"}

검증

  1. 인증 정보 저장소에 별칭을 추가합니다.

    구문

    /subsystem=elytron/credential-store=<credential_store_name>:add-alias(alias=<alias>, secret-value=<secret_value>)

    예제

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:add-alias(alias=exampleAlias, secret-value=secret)
    {"outcome" => "success"}

  2. 인증 정보 저장소의 별칭을 나열합니다.

    구문

    /subsystem=elytron/credential-store=<credential_store_name>:read-aliases()

    예제

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => ["examplealias"]
    }

생성된 인증 정보 저장소는 FIPS 140-2와 호환됩니다.

BouncyCastle은 Java 및 C#을 위한 경량 암호화 API를 제공합니다. 다음 BouncyCastle 공급자를 JBoss EAP와 함께 사용하여 FIPS 140-2 호환 인증 정보 저장소를 생성할 수 있습니다.

  • BouncyCastle FIPS 공급자의 JCE(Java Cryptography Extension) 및 JCA(Java Cryptography Architecture)의 공급자입니다.
  • BouncyCastle FIPS 공급자 for the Java Secure Socket Extension (JSSE)

BouncyCastle에 대한 자세한 내용은 Bouncy Castle 의 Legion of the Buncy Castle 을 참조하십시오.

Red Hat Enterprise Linux 8.4부터 FIPS(Federal Information Processing Standard) 시스템 전체 암호화 정책을 활성화하면 OpenJDK에서 다양한 보안 공급자를 자동으로 활성화합니다. 보안 공급자 중 하나는 FIPS 모드에서 구성된 SunPKCS11 공급자입니다. 대신 BouncyCastle 공급자를 사용하여 아래 단계에 따라 FIPS(Federal Information Processing Standard) 140-2 호환 인증 정보를 생성할 수 있습니다.

사전 요구 사항

프로세스

  1. 다음 링크에서 BouncyCASTs를 다운로드합니다.

  2. 다음 콘텐츠를 사용하여 java.security 라는 구성 파일을 생성합니다.

    fips.provider.1=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
    fips.provider.2=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider fips:BCFIPS
    fips.provider.3=SUN
    fips.provider.4=SunEC
    fips.provider.5=com.sun.net.ssl.internal.ssl.Provider
    참고

    기본 java.security 파일에서 FIPS 공급자를 수정하지 마십시오. 이 절차에 설명된 대로 자체 java.security 속성 파일을 사용하는 것이 좋습니다.

  3. 인증 정보 저장소를 암호화하는 AES 시크릿 키를 생성합니다.

    구문

    $ keytool -J-Djava.security.properties=<java_security_file> -genseckey -keystore "<keystore_name>" -storetype BCFKS -storepass <store_password> -alias <key_alias> -keyalg <symmetric_key_algorithm> -keysize <key_size> -keypass <key_password>  -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath <path_to_bc-fips_jar>  -dname "<certificate_contents>" -validity <validity_in_days>

    예제

    $ keytool -J-Djava.security.properties=<path_to_java_security_file>/java.security -genseckey -keystore "examplekeystore.bcfks" -storetype BCFKS -storepass password -alias exampleKeyAlias -keyalg AES -keysize 256 -keypass password -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath <path_to_bc-fips_jar>/bc-fips-1.0.2.jar -dname "CN=localhost" -validity 365

  4. 시크릿 키를 읽을 수 있는지 확인합니다.

    구문

    $ keytool -J-Djava.security.properties=<java_security_file> -list -keystore <keystore_name> -storetype BCFKS -storepass <store_password> -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath <path_to_bc-fips_jar>

    예제

    $ keytool -J-Djava.security.properties=<path_to_java_security_file>/java.security -list -keystore examplekeystore.bcfks -storetype BCFKS -storepass password -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath <path_to_bc-fips_jar>/bc-fips-1.0.2.jar

    출력 예

    Keystore type: BCFKS
    Keystore provider: BCFIPS
    
    Your keystore contains 1 entry
    
    exampleKeyAlias, Mar 1, 2023, SecretKeyEntry,

  5. 서버를 시작합니다.
  6. 관리 CLI를 사용하여 BouncyCastle 공급자를 사용하도록 JBoss EAP 구성.

    1. SunJCE 공급자를 공급자 목록에 추가합니다.

      /subsystem=elytron/provider-loader=SunJCE:add(class-names=[com.sun.crypto.provider.SunJCE])
    2. BouncyCastle 공급자를 JBoss EAP에서 모듈로 추가합니다.

      구문

      module add --name=org.bouncycastle.fips --resources=<path_to_bc-fips_jar>:<path_to_bctls-fips_jar>

      예제

      module add --name=org.bouncycastle.fips --resources=<path_to_bc-fips_jar>/bc-fips-1.0.2.jar:<path_to_bctls-fips_jar>/bctls-fips-1.0.2.jar

    3. BouncyCastle 공급자의 공급자 로더를 추가합니다.

      구문

      /subsystem=elytron/provider-loader=<provider_loader_name>:add(module=org.bouncycastle.fips)

      예제

      /subsystem=elytron/provider-loader=exampleProviderLoader:add(module=org.bouncycastle.fips)

    4. 집계 공급자에서 BouncyCastle, SunJCE 및 결합된 공급자를 구성합니다.

      구문

      /subsystem=elytron/aggregate-providers=<aggregate_provider_name>:add(providers=[<provider_loader_name>,SunJCE,combined-providers])

      예제

      /subsystem=elytron/aggregate-providers=exampleAggregateProvider:add(providers=[exampleProviderLoader,SunJCE,combined-providers])

      참고

      공급자는 명령에 정의된 순서대로 호출됩니다.

    5. 서버를 다시 로드합니다.

      reload
  7. BouncyCastle 공급자를 사용하여 Elytron에서 인증 정보 저장소를 생성합니다.

    구문

    /subsystem=elytron/credential-store=<credential_store_name>:add(credential-reference={clear-text=<key_and_keystore_password>},implementation-properties={keyAlias=<key_alias>,external=true,externalPath=<path_to_BCFKS_credential_store>,keyStoreType=BCFKS},create=true,path=<path_to_keystore>,modifiable=true, other-providers=<aggregate_provider_name>)

    예제

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:add(credential-reference={clear-text=password},implementation-properties={keyAlias=exampleKeyAlias,external=true, externalPath=credentialStore.bcfks, keyStoreType=BCFKS}, create=true, path=__<path_to_keystore>__/examplekeystore.bcfks, modifiable=true, other-providers=exampleAggregateProvider)

검증

  1. 인증 정보 저장소에 별칭을 추가합니다.

    구문

    /subsystem=elytron/credential-store=<credential_store_name>:add-alias(alias=<alias>, secret-value=<secret_value>)

    예제

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:add-alias(alias=exampleAlias, secret-value=secret)

  2. 인증 정보 저장소의 별칭을 나열합니다.

    구문

    /subsystem=elytron/credential-store=<credential_store_name>:read-aliases()

    예제

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => ["examplealias"]
    }

생성된 인증 정보 저장소는 FIPS 140-2와 호환됩니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동