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 호환 인증 정보 저장소를 구성할 수 있습니다.
SunPKCS#11 공급자 및 NSS(Network Security Services) 데이터베이스.
자세한 내용은 SunPKCS#11 공급자 및 NSS 데이터베이스를 사용하여 FIPS 140-2 호환 인증 정보 저장소 생성 을 참조하십시오.
BouncyCastle 공급자입니다.
자세한 내용은 BouncyCastle 공급자를 사용하여 FIPS 140-2 호환 인증 정보 저장소 생성 을 참조하십시오.
JBoss EAP 자체는 FIPS 인증을 받지 않습니다. JBoss EAP의 FIPS 지원 수준은 JBoss EAP를 FIPS 인증 암호화 구현과 함께 사용할 수 있다는 것입니다. 테스트된 구현은 BouncyCastle 및 SunPKCS#11입니다.
1.8.1. SunPKCS#11 공급자 및 NSS 데이터베이스를 사용하여 FIPS 140-2 호환 인증 정보 저장소 생성 링크 복사링크가 클립보드에 복사되었습니다!
NSS는 플랫폼 간 보안 지원 클라이언트 및 서버 애플리케이션을 지원하는 라이브러리 집합입니다. SunPKCS#11 공급자를 JBoss EAP의 NSS 라이브러리와 함께 사용하여 FIPS 140-2 호환 암호화를 구현할 수 있습니다. NSS에 대한 자세한 내용은 Mozilla docs - NSS(Network Security Services) 를 참조하십시오. SunPKCS#11 공급자에 대한 자세한 내용은 PKCS#11 참조 가이드를 참조하십시오.
1.8.1.1. SunPKCS#11 공급자 및 NSS 데이터베이스를 사용할 때 FIPS를 지원하는 JDK 링크 복사링크가 클립보드에 복사되었습니다!
모든 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
1.8.1.2. FIPS가 활성화된 RHEL에서 SUNPKCS#11 공급자 및 NSS 데이터베이스를 사용하여 FIPS 140-2 호환 인증 정보 저장소 생성 링크 복사링크가 클립보드에 복사되었습니다!
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 --checkRHEL에서 FIPS 활성화에 대한 자세한 내용은 다음 리소스를 참조하십시오.
- Red Hat Enterprise Linux 설명서에서 FIPS 모드에서 시스템 설치.
- Red Hat Enterprise Linux 설명서에서 시스템을 FIPS 모드로 전환합니다.
NSS 도구가 설치되어 있습니다.
Red Hat Enterprise Linux에서는 다음과 같이 DNF 패키지 관리자를 사용하여 NSS 툴을 설치할 수 있습니다.
# dnf install -y nss-toolsJDK(Java Development Kit)는 NSS 라이브러리를 사용하여 PKCS#11의 구성을 지원합니다.
FIPS를 지원하는 JDK에 대한 자세한 내용은 FIPS를 지원하는 JDK 를 참조하십시오.
- JBoss EAP가 실행 중입니다.
프로세스
$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 }인증 정보 저장소를 암호화하는 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시크릿 키를 읽을 수 있는지 확인합니다.
# keytool -list -storetype pkcs11 -storepass NONE Keystore type: PKCS11 Keystore provider: SunPKCS11-NSS-FIPS Your keystore contains 1 entry exampleKeyAlias, SecretKeyEntry,$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 }관리 CLI의 공급자 목록에 SunJCE 공급자를 추가합니다.
SunJCE용 공급자 로더를 추가합니다.
/subsystem=elytron/provider-loader=SunJCE:add(class-names=[com.sun.crypto.provider.SunJCE]) {"outcome" => "success"}집계 공급자에서 Elytron 및 SunJCE를 구성합니다.
구문
/subsystem=elytron/aggregate-providers=<aggregate_provider_name>:add(providers=[elytron,SunJCE])예제
/subsystem=elytron/aggregate-providers=exampleAggregateProvider:add(providers=[elytron,SunJCE]) {"outcome" => "success"}참고공급자는 명령에 정의된 순서대로 호출됩니다.
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"}
검증
인증 정보 저장소에 별칭을 추가합니다.
구문
/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"}인증 정보 저장소의 별칭을 나열합니다.
구문
/subsystem=elytron/credential-store=<credential_store_name>:read-aliases()예제
/subsystem=elytron/credential-store=exampleFipsCredentialStore:read-aliases() { "outcome" => "success", "result" => ["examplealias"] }
생성된 인증 정보 저장소는 FIPS 140-2와 호환됩니다.
1.8.2. BouncyCastle 공급자를 사용하여 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 을 참조하십시오.
1.8.2.1. BouncyCastle 공급자를 사용하여 FIPS 140-2 호환 인증 정보 저장소 생성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux 8.4부터 FIPS(Federal Information Processing Standard) 시스템 전체 암호화 정책을 활성화하면 OpenJDK에서 다양한 보안 공급자를 자동으로 활성화합니다. 보안 공급자 중 하나는 FIPS 모드에서 구성된 SunPKCS11 공급자입니다. 대신 BouncyCastle 공급자를 사용하여 아래 단계에 따라 FIPS(Federal Information Processing Standard) 140-2 호환 인증 정보를 생성할 수 있습니다.
사전 요구 사항
RHEL에서 FIPS가 활성화되어 있습니다.
다음 명령을 사용하여 FIPS가 활성화되어 있는지 확인할 수 있습니다.
# fips-mode-setup --checkRHEL에서 FIPS 활성화에 대한 자세한 내용은 다음 리소스를 참조하십시오.
- Red Hat Enterprise Linux 설명서에서 FIPS 모드에서 시스템 설치.
- Red Hat Enterprise Linux 설명서에서 시스템을 FIPS 모드로 전환합니다.
JDK(Java Development Kit)는 BouncyCastle 공급자를 사용하여 FIPS 설정을 지원합니다.
자세한 내용은 Bouncy Castle - FIPS 리소스 페이지 Legion에 대한 Java 관련 질문을 참조하십시오.
프로세스
다음 링크에서 BouncyCASTs를 다운로드합니다.
- Cryostat-fips-N Cryostat: Bouncy Castle Provider (FIPS Distribution) Maven.
bctls-fips-N GROUP: Bouncy Castle TLS/JSSE API (FIPS Distribution).
여기서 N 은 BouncyCastle FIPS 공급자 버전을 나타냅니다.
Bouncy Castle의 Legion of the Bouncy Castle에서 환경을 준수하는 BouncyCastle FIPS 공급자의 최신 인증 버전에 대한 정보를 찾을 수 있습니다.
다음 콘텐츠를 사용하여
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속성 파일을 사용하는 것이 좋습니다.인증 정보 저장소를 암호화하는 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시크릿 키를 읽을 수 있는지 확인합니다.
구문
$ 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,- 서버를 시작합니다.
관리 CLI를 사용하여 BouncyCastle 공급자를 사용하도록 JBoss EAP 구성.
SunJCE 공급자를 공급자 목록에 추가합니다.
/subsystem=elytron/provider-loader=SunJCE:add(class-names=[com.sun.crypto.provider.SunJCE])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.jarBouncyCastle 공급자의 공급자 로더를 추가합니다.
구문
/subsystem=elytron/provider-loader=<provider_loader_name>:add(module=org.bouncycastle.fips)예제
/subsystem=elytron/provider-loader=exampleProviderLoader:add(module=org.bouncycastle.fips)집계 공급자에서 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])참고공급자는 명령에 정의된 순서대로 호출됩니다.
서버를 다시 로드합니다.
reload
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)
검증
인증 정보 저장소에 별칭을 추가합니다.
구문
/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)인증 정보 저장소의 별칭을 나열합니다.
구문
/subsystem=elytron/credential-store=<credential_store_name>:read-aliases()예제
/subsystem=elytron/credential-store=exampleFipsCredentialStore:read-aliases() { "outcome" => "success", "result" => ["examplealias"] }
생성된 인증 정보 저장소는 FIPS 140-2와 호환됩니다.