7.4. 발신 HTTP 요청
Red Hat Single Sign-On 서버는 안전한 애플리케이션 및 서비스에 대한 브라우저 이외의 HTTP 요청을 수행해야 하는 경우가 많습니다. 인증 서버는 HTTP 클라이언트 연결 풀을 유지 관리하여 이러한 발신 연결을 관리합니다. standalone.xml,standalone-ha.xml 또는 domain.xml 에서 구성해야 하는 몇 가지 사항이 있습니다. 이 파일의 위치는 작동 모드에 따라 다릅니다.
HTTP 클라이언트 구성 예
<spi name="connectionsHttpClient">
<provider name="default" enabled="true">
<properties>
<property name="connection-pool-size" value="256"/>
</properties>
</provider>
</spi>
가능한 구성 옵션은 다음과 같습니다.
- establish-connection-timeout-millis
- 소켓 연결을 설정하는 제한 시간입니다.
- socket-timeout-millis
- 발신 요청이 이 시간 동안 데이터를 수신하지 않으면 연결 시간이 초과됩니다.
- connection-pool-size
- 풀에 있을 수 있는 연결 수(기본적으로 128개)입니다.
- max-pooled-per-route
- 호스트당 풀링할 수 있는 연결 수(기본적으로 64개)입니다.
- connection-ttl-millis
- 밀리초 단위의 최대 연결 시간입니다. 기본적으로 설정되지 않습니다.
- max-connection-idle-time-millis
-
연결 풀에서 유휴 상태로 유지될 수 있는 최대 시간(기본적으로 900초)입니다. Apache HTTP 클라이언트의 배경 정리 스레드를 시작합니다. 이 검사 및 백그라운드 스레드를 비활성화하려면 -
1로 설정합니다. - disable-cookies
-
기본적으로
true입니다. true로 설정하면 쿠키 캐싱이 비활성화됩니다. - client-keystore
- Java 키 저장소 파일의 파일 경로입니다. 이 키 저장소에는 양방향 SSL을 위한 클라이언트 인증서가 포함되어 있습니다.
- client-keystore-password
-
클라이언트 키 저장소의 암호입니다.
client-keystore가 설정된 경우 이는 REQUIRED 입니다. - client-key-password
-
클라이언트 키의 암호입니다.
client-keystore가 설정된 경우 이는 REQUIRED 입니다. - proxy-mappings
- 발신 HTTP 요청에 대한 프록시 구성입니다. 자세한 내용은 프록시 매핑 섹션을 참조하십시오.
7.4.1. Outgoing HTTP 요청에 대한 프록시 매핑 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Single Sign-On에서 보낸 발신 HTTP 요청은 쉼표로 구분된 프록시 매핑 목록을 기반으로 프록시 서버를 선택적으로 사용할 수 있습니다. proxy-mapping은 regex 기반 호스트 이름 패턴의 조합과 hostnamePattern;proxyUri 의 형태로 proxy-uri를 나타냅니다. 예를 들면 다음과 같습니다.
.*\.(google|googleapis)\.com;http://www-proxy.acme.com:8080
발신 HTTP 요청에 대한 프록시를 확인하려면 대상 호스트 이름이 구성된 호스트 이름 패턴과 일치합니다. 첫 번째 일치 패턴은 사용할 proxy-uri를 결정합니다. 지정된 호스트 이름에 대해 구성된 패턴이 일치하지 않으면 프록시가 사용되지 않습니다.
proxy-uri의 특수 값 NO_PROXY 를 사용하여 연결된 호스트 이름과 일치하는 호스트에 프록시를 사용하지 않아야 함을 나타낼 수 있습니다. 프록시 매핑 끝에 catch-all 패턴을 지정하여 나가는 모든 요청에 대한 기본 프록시를 정의할 수 있습니다.
다음 예제에서는 프록시 매핑 구성을 보여줍니다.
# All requests to Google APIs should use http://www-proxy.acme.com:8080 as proxy
.*\.(google|googleapis)\.com;http://www-proxy.acme.com:8080
# All requests to internal systems should use no proxy
.*\.acme\.com;NO_PROXY
# All other requests should use http://fallback:8080 as proxy
.*;http://fallback:8080
이는 다음 jboss-cli 명령을 통해 구성할 수 있습니다. 아래 표시된 대로 regex-pattern을 올바르게 이스케이프해야 합니다.
echo SETUP: Configure proxy routes for HttpClient SPI
# In case there is no connectionsHttpClient definition yet
/subsystem=keycloak-server/spi=connectionsHttpClient/provider=default:add(enabled=true)
# Configure the proxy-mappings
/subsystem=keycloak-server/spi=connectionsHttpClient/provider=default:write-attribute(name=properties.proxy-mappings,value=[".*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080",".*\\.acme\\.com;NO_PROXY",".*;http://fallback:8080"])
jboss-cli 명령을 실행하면 다음 하위 시스템 구성이 생성됩니다. " 문자를 ".로 인코딩해야 합니다.
<spi name="connectionsHttpClient">
<provider name="default" enabled="true">
<properties>
<property
name="proxy-mappings"
value="[".*\\.(google|googleapis)\\.com;http://www-proxy.acme.com:8080",".*\\.acme\\.com;NO_PROXY",".*;http://fallback:8080"]"/>
</properties>
</provider>
</spi>
7.4.2. 발신 HTTPS 요청 신뢰 저장소 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Single Sign-On이 원격 HTTPS 엔드포인트에서 호출할 때 신뢰할 수 있는 서버에 연결하기 위해 원격 서버의 인증서를 검증해야 합니다. 이는 메시지 가로채기(man-in-the-middle) 공격을 방지하기 위해 필요합니다. 이러한 원격 서버의 인증서 또는 이러한 인증서에 서명한 CA의 인증서를 신뢰 저장소에 배치해야 합니다. 이 신뢰 저장소는 Red Hat Single Sign-On 서버에서 관리합니다.
신뢰 저장소는 ID 브로커, LDAP ID 공급자, 이메일을 보낼 때 및 클라이언트 애플리케이션과의 백채널 통신에 안전하게 연결할 때 사용됩니다.
기본적으로 신뢰 저장소 공급자가 구성되지 않았으며 모든 https 연결이 Java의 JSSE 참조 가이드에 설명된 대로 표준 java truststore 구성으로 대체됩니다. 신뢰가 설정되지 않은 경우 이러한 발신 HTTPS 요청이 실패합니다.
keytool 을 사용하여 새 truststore 파일을 생성하거나 신뢰할 수 있는 호스트 인증서를 기존에 추가할 수 있습니다.
$ keytool -import -alias HOSTDOMAIN -keystore truststore.jks -file host-certificate.cer
truststore는 배포의 standalone.xml,standalone-ha.xml 또는 domain.xml 파일 내에 구성됩니다. 이 파일의 위치는 작동 모드에 따라 다릅니다. 다음 템플릿을 사용하여 신뢰 저장소 구성을 추가할 수 있습니다.
<spi name="truststore">
<provider name="file" enabled="true">
<properties>
<property name="file" value="path to your .jks file containing public certificates"/>
<property name="password" value="password"/>
<property name="hostname-verification-policy" value="WILDCARD"/>
<property name="disabled" value="false"/>
</properties>
</provider>
</spi>
이 설정에 사용할 수 있는 구성 옵션은 다음과 같습니다.
- file
-
Java 키 저장소 파일의 경로입니다. HTTPS 요청은 통신 중인 서버의 호스트를 확인하는 방법이 필요합니다. 이것이 신뢰자가 하는 것입니다. 키 저장소에는 신뢰할 수 있는 호스트 인증서 또는 인증 기관이 하나 이상 포함되어 있습니다. 이 truststore 파일에는 보안 호스트의 공용 인증서만 포함되어야 합니다.
disabled가 true가 아닌 경우 이는 REQUIRED 입니다. - 암호
-
truststore의 암호입니다.
disabled가 true가 아닌 경우 이는 REQUIRED 입니다. - hostname-verification-policy
-
기본적으로
WILDCARD입니다. HTTPS 요청의 경우 서버 인증서의 호스트 이름을 확인합니다.ANY은 호스트 이름이 확인되지 않았음을 의미합니다.WILDCARD는 하위 도메인 이름(예: *.foo.com)의 와일드카드를 허용합니다.CN은 호스트 이름과 정확히 일치해야 합니다. - 비활성화됨
-
true(기본값)인 경우 truststore 구성이 무시되고 인증서 검사가 설명된 대로 JSSE 구성으로 대체됩니다. false로 설정하는 경우 truststore에 대한
파일및암호를구성해야 합니다.