9.5. SSL 구성 마이그레이션
Elytron을 사용하여 다음 정보를 사용하도록 애플리케이션에서 SSL 구성을 마이그레이션합니다.
간단한 SSL 구성을 Elytron으로 마이그레이션
보안 영역을 사용하여 JBoss EAP 서버에 대한 HTTP 연결을 보호한 경우 이 섹션에 제공된 정보를 사용하여 SSL 구성을 Elytron으로 마이그레이션합니다.
사전 요구 사항
보안 영역을 사용하여 JBoss EAP 서버에 대한 보안 HTTP 연결을 준비합니다.
다음 예제에서는 security-realm 에 다음 키 저장소가 구성되어 있다고 가정합니다.
예: Security Cryostat 키 저장소를 사용한 SSL 구성
<security-realm name="ApplicationRealm">
<server-identities>
<ssl>
<keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore_password" alias="server" key-password="key_password" />
</ssl>
</server-identities>
</security-realm>
Elytron을 사용하여 동일한 구성을 수행하려면 다음 단계를 완료합니다.
프로세스
키 저장소의 위치와 암호화된 암호를 지정하는elytron하위 시스템에 키 저장소를 생성합니다. 이 명령은 keytool 명령을 사용하여 키 저장소가 생성되었으며 해당 유형은JKS라고 가정합니다./subsystem=elytron/key-store=LocalhostKeyStore:add(path=server.keystore,relative-to=jboss.server.config.dir,credential-reference={clear-text="keystore_password"},type=JKS)이전 단계에서 정의된 키
저장소, 별칭 및 키 암호를 지정하는를 생성합니다.elytron하위 시스템에key-manager/subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})이전 단계에서 정의한
key-manager를 참조하는elytron하위 시스템에서server-ssl-context를 생성합니다./subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager)기존
security-realm에서 새로 생성된 Elytronssl-context로https-listener를 전환합니다.batch /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=LocalhostSslContext) run-batch서버를 다시 로드합니다.
reload
그러면 서버 구성 파일에 다음과 같은 elytron 하위 시스템 구성이 생성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" ...>
...
<tls>
<key-stores>
<key-store name="LocalhostKeyStore">
<credential-reference clear-text="keystore_password"/>
<implementation type="JKS"/>
<file path="server.keystore" relative-to="jboss.server.config.dir"/>
</key-store>
</key-stores>
<key-managers>
<key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server">
<credential-reference clear-text="key_password"/>
</key-manager>
</key-managers>
<server-ssl-contexts>
<server-ssl-context name="LocalhostSslContext" key-manager="LocalhostKeyManager"/>
</server-ssl-contexts>
</tls>
</subsystem>
그러면 서버 구성 파일에 다음과 같은 undertow 하위 시스템 구성이 생성됩니다.
<https-listener name="https" socket-binding="https" ssl-context="LocalhostSslContext" enable-http2="true"/>
자세한 내용은 Elytron Cryostat 및 How to Secure the Management Interfaces in the JBoss EAP 7.4 How to Configure Server Security 를 참조하십시오.
9.5.1. CLIENT-CERT SSL 인증을 Elytron으로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
CLIENT-CERT SSL 인증을 활성화하려면 인증 요소에 truststore 요소를 추가합니다.
<security-realm name="ManagementRealm">
<server-identities>
<ssl>
<keystore path="server.keystore" relative-to="jboss.server.config.dir" keystore-password="KEYSTORE_PASSWORD" alias="server" key-password="key_password" />
</ssl>
</server-identities>
<authentication>
<truststore path="server.truststore" relative-to="jboss.server.config.dir" keystore-password="TRUSTSTORE_PASSWORD" />
<local default-user="$local"/>
<properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
</authentication>
</security-realm>
CLIENT-CERT 인증이 발생하지 않으면 클라이언트가 로컬 메커니즘 또는 사용자 이름/암호 인증 메커니즘을 사용하도록 대체할 수 있습니다. CLIENT-CERT 기반 인증을 필수로 만들려면 로컬 및 속성 요소를 제거합니다.
레거시 신뢰 저장소 는 다음 두 가지 방법으로 사용할 수 있습니다.
9.5.1.1. 기존 truststore 만 CA 포함 링크 복사링크가 클립보드에 복사되었습니다!
다음 단계에 따라 유효한 인증서 및 개인 키가 없는 사용자가 Elytron을 사용하여 서버에 액세스하지 못하도록 서버를 구성합니다.
프로세스
키 저장소의 위치와 암호화된 암호를 지정하는elytron하위 시스템에 키 저장소를 생성합니다. 이 명령은 keytool 명령을 사용하여 키 저장소가 생성되었으며 해당 유형은JKS라고 가정합니다./subsystem=elytron/key-store=LocalhostKeyStore:add(path=server.keystore,relative-to=jboss.server.config.dir,credential-reference={clear-text="keystore_password"},type=JKS)신뢰
저장소의 위치와 암호화된 암호를 지정하는저장소를 생성합니다. 이 명령은 keytool 명령을 사용하여 키 저장소가 생성되었으며 해당 유형은elytron하위 시스템에 키JKS라고 가정합니다./subsystem=elytron/key-store=TrustStore:add(path=server.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text="truststore_password"},type=JKS)이전에 정의된
LocalhostKeyStore키 저장소, 별칭 및 키 암호를 지정하는elytron하위 시스템에key-manager를 생성합니다./subsystem=elytron/key-manager=LocalhostKeyManager:add(key-store=LocalhostKeyStore,alias-filter=server,credential-reference={clear-text="key_password"})이전에 생성한 신뢰 저장소의
키 저장소를 지정하는를 생성합니다.elytron하위 시스템에trust-manager/subsystem=elytron/trust-manager=TrustManager:add(key-store=TrustStore)이전에 정의한
key-manager를 참조하는elytron하위 시스템에서server-ssl-context를 생성하고,trust-manager속성을 설정하고, 클라이언트 인증을 활성화합니다./subsystem=elytron/server-ssl-context=LocalhostSslContext:add(key-manager=LocalhostKeyManager,trust-manager=TrustManager,need-client-auth=true)https-listener를 새로 생성된 Elytronssl-context로 업데이트합니다./subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=LocalhostSslContext)서버를 다시 로드합니다.
reload
그러면 서버 구성 파일에 다음과 같은 elytron 하위 시스템 구성이 생성됩니다.
<subsystem xmlns="urn:wildfly:elytron:4.0"...>
...
<tls>
<key-stores>
<key-store name="LocalhostKeyStore">
<credential-reference clear-text="keystore_password"/>
<implementation type="JKS"/>
<file path="server.keystore" relative-to="jboss.server.config.dir"/>
</key-store>
<key-store name="TrustStore">
<credential-reference clear-text="truststore_password"/>
<implementation type="JKS"/>
<file path="server.truststore" relative-to="jboss.server.config.dir"/>
</key-store>
</key-stores>
<key-managers>
<key-manager name="LocalhostKeyManager" key-store="LocalhostKeyStore" alias-filter="server">
<credential-reference clear-text="key_password"/>
</key-manager>
</key-managers>
<trust-managers>
<trust-manager name="TrustManager" key-store="TrustStore"/>
</trust-managers>
<server-ssl-contexts>
<server-ssl-context name="LocalhostSslContext" need-client-auth="true" key-manager="LocalhostKeyManager" trust-manager="TrustManager"/>
</server-ssl-contexts>
</tls>
</subsystem>
그러면 서버 구성 파일에 다음과 같은 undertow 하위 시스템 구성이 생성됩니다.
<subsystem xmlns="urn:jboss:domain:undertow:14.0">
...
<https-listener name="https" socket-binding="https" ssl-context="LocalhostSslContext" enable-http2="true"/>
...
</subsystem>
9.5.1.2. Security Cryostat 및 Domains 링크 복사링크가 클립보드에 복사되었습니다!
보안 영역은 다음 두 가지 상황에서 사용됩니다.
- 인증서 인증에 실패하면 암호 폴백 케이스에서 보안 영역이 사용됩니다.
- 암호 및 인증서에 대한 권한 부여가 완료되면 영역은 개별 사용자의 역할을 제공합니다.
사전 정의된 Elytron ManagementDomain 보안 도메인 및 ManagementRealm 보안 영역을 사용할 수 있도록 사용자는 표준 속성 파일에 저장됩니다.
<security-domains>
<security-domain name="ManagementDomain" default-realm="ManagementRealm" permission-mapper="default-permission-mapper">
<realm name="ManagementRealm" role-decoder="groups-to-roles"/>
<realm name="local"/>
</security-domain>
</security-domains>
<security-realms>
<properties-realm name="ManagementRealm">
<users-properties path="mgmt-users.properties" relative-to="jboss.server.config.dir" digest-realm-name="ManagementRealm"/>
<groups-properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
</properties-realm>
</security-realms>
따라서 모든 클라이언트 인증서의 경우 사용자가 보안 영역에 있어야 합니다.
9.5.1.3. 주체 Decoder 링크 복사링크가 클립보드에 복사되었습니다!
인증서 인증이 사용되고 보안 영역에서 사용자 이름을 수락하여 ID를 확인하는 경우 클라이언트 인증서에서 사용자 이름을 가져오는 데 정의된 방법이 있어야 합니다.
이 경우 CN 속성은 인증서 제목에서 사용됩니다.
/subsystem=elytron/x500-attribute-principal-decoder=x500-decoder:add(attribute-name=CN)
9.5.1.4. HTTP 인증 internal 링크 복사링크가 클립보드에 복사되었습니다!
HTTP 연결의 경우 이전에 정의된 리소스를 사용하여 HTTP 인증 팩토리를 정의합니다. CLIENT_CERT 및 vmwareG EST 인증을 지원하도록 구성되어 있습니다.
속성 영역은 암호만 확인하고 클라이언트 인증서를 확인할 수 없으므로 먼저 구성 메커니즘 팩토리를 추가해야 합니다. 이렇게 하면 보안 영역에 대한 인증서 확인이 비활성화됩니다.
/subsystem=elytron/configurable-http-server-mechanism-factory=configured-cert:add(http-server-mechanism-factory=global, properties={org.wildfly.security.http.skip-certificate-verification=true})
HTTP 인증은 다음과 같이 생성할 수 있습니다.
./subsystem=elytron/http-authentication-factory=client-cert-digest:add(http-server-mechanism-factory=configured-cert,security-domain=ManagementDomain,mechanism-configurations=[{mechanism-name=CLIENT_CERT,pre-realm-principal-transformer=x500-decoder},{mechanism-name=DIGEST, mechanism-realm-configurations=[{realm-name=ManagementRealm}]}])
위의 명령은 다음과 같습니다.
<subsystem xmlns="urn:wildfly:elytron:4.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
...
<http>
...
<http-authentication-factory name="client-cert-digest" http-server-mechanism-factory="configured-cert" security-domain="ManagementDomain">
<mechanism-configuration>
<mechanism mechanism-name="CLIENT_CERT" pre-realm-principal-transformer="x500-decoder"/>
<mechanism mechanism-name="DIGEST">
<mechanism-realm realm-name="ManagementRealm"/>
</mechanism>
</mechanism-configuration>
</http-authentication-factory>
...
<configurable-http-server-mechanism-factory name="configured-cert" http-server-mechanism-factory="configured-cert">
<properties>
<property name="org.wildfly.security.http.skip-certificate-verification" value="true"/>
</properties>
</configurable-http-server-mechanism-factory>
...
</http>
...
</subsystem>