Apache Karaf 보안 가이드
Apache Karaf 컨테이너 보안
초록
보다 포괄적 수용을 위한 오픈 소스 용어 교체 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지에서 참조하십시오.
1장. 보안 아키텍처 링크 복사링크가 클립보드에 복사되었습니다!
초록
OSGi 컨테이너에서는 다양한 보안 기능을 지원하는 애플리케이션을 배포할 수 있습니다. 현재 JAAS(Java Authentication and Authorization Service)만 공통 컨테이너 단위 인프라를 기반으로 합니다. 기타 보안 기능은 컨테이너에 배포된 개별 제품 및 구성 요소에 의해 별도로 제공됩니다.
1.1. OSGi 컨테이너 보안 링크 복사링크가 클립보드에 복사되었습니다!
1.1.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
그림 1.1. “OSGi 컨테이너 보안 아키텍처” 컨테이너에 사용되고 컨테이너에 배포된 모든 번들에 액세스할 수 있는 보안 인프라에 대한 개요를 보여줍니다. 현재 이 공통 보안 인프라는 모든 애플리케이션 번들에서 JAAS 영역(또는 로그인 모듈)을 사용할 수 있도록 하는 메커니즘으로 구성되어 있습니다.
그림 1.1. OSGi 컨테이너 보안 아키텍처
1.1.2. JAAS 영역 링크 복사링크가 클립보드에 복사되었습니다!
JAAS 영역 또는 로그인 모듈은 JAAS( Java Authentication and Authorization Service ) 사양에 정의된 Java 애플리케이션에 인증 및 권한 부여 데이터를 제공하는 플러그인 모듈입니다.
Red Hat Fuse는 컨테이너의 모든 번들에 로그인 모듈에 액세스할 수 있도록 하는 JAAS 로그인 모듈(일프링 또는 블루프린트 파일)을 정의하는 특수 메커니즘을 지원합니다. 이를 통해 OSGi 컨테이너에서 실행되는 여러 애플리케이션이 보안 데이터를 단일 JAAS 영역에 쉽게 통합할 수 있습니다.
1.1.3. Karaf 영역 링크 복사링크가 클립보드에 복사되었습니다!
OSGi 컨테이너에는 karaf
영역인 JAAS 영역이 사전 정의되어 있습니다. Red Hat Fuse는 karaf
영역을 사용하여 OSGi 런타임의 원격 관리, Fuse Management Console 및 Cryostat 관리에 대한 인증을 제공합니다. karaf
영역은 인증 데이터가 InstallDir/etc/users.properties
파일에 저장되는 간단한 파일 기반 리포지토리를 사용합니다.
자체 애플리케이션에서 karaf
영역을 사용할 수 있습니다. 간단하게 karaf
를 사용하려는 JAAS 영역의 이름으로 구성합니다. 그런 다음 애플리케이션은 users.properties
파일의 데이터를 사용하여 인증을 수행합니다.
1.1.4. 콘솔 포트 링크 복사링크가 클립보드에 복사되었습니다!
Karaf 클라이언트와 함께 콘솔 포트에 연결하거나 Karaf ssh:ssh
명령을 사용하여 OSGi 컨테이너를 원격으로 관리할 수 있습니다. 콘솔 포트는 karaf
영역에 연결하는 JAAS 로그인 기능으로 보호됩니다. 콘솔 포트에 연결을 시도하는 사용자는 karaf
영역의 계정 중 하나와 일치해야 하는 사용자 이름과 암호를 입력하라는 메시지가 표시됩니다.
1.1.5. Cryostat 포트 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat 포트에 연결하여 OSGi 컨테이너를 관리할 수 있습니다(예: Java의 JConsole 사용). Cryostat 포트는 karaf
영역에 연결하는 JAAS 로그인 기능으로도 보호됩니다.
1.1.6. 애플리케이션 번들 및 JAAS 보안 링크 복사링크가 클립보드에 복사되었습니다!
OSGi 컨테이너에 배포하는 모든 애플리케이션 번들은 컨테이너의 JAAS 영역에 액세스할 수 있습니다. 애플리케이션 번들은 기존 JAAS 영역 중 하나를 이름으로 참조합니다(JAAS 로그인 모듈의 인스턴스에 해당).
그러나 기본적으로 JAAS 영역은 OSGi 컨테이너의 자체 로그인 구성 메커니즘을 사용하여 정의되어야 합니다. 기본적으로 Java는 간단한 파일 기반 로그인 구성 구현을 제공하지만 OSGi 컨테이너의 컨텍스트에서는 이 구현을 사용할 수 없습니다.
1.2. Apache Camel Security 링크 복사링크가 클립보드에 복사되었습니다!
1.2.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
그림 1.2. “Apache Camel Security Architecture” Apache Camel 엔드포인트 간 안전하게 라우팅하기 위한 기본 옵션에 대한 개요를 보여줍니다.
그림 1.2. Apache Camel Security Architecture
1.2.2. Apache Camel 보안 대안 링크 복사링크가 클립보드에 복사되었습니다!
그림 1.2. “Apache Camel Security Architecture” 에 표시된 대로 메시지 보안을 위한 다음과 같은 옵션이 있습니다.
엔드포인트 security-part (a)는 보안 엔드포인트가 있는 두 경로 간에 전송되는 메시지를 표시합니다. 왼쪽의 생산자 엔드포인트는 오른쪽에 있는 소비자 엔드포인트에 대한 보안 연결(일반적으로 SSL/TLS 사용)을 엽니다. 두 끝점 모두 이 시나리오에서 보안을 지원합니다.
엔드포인트 보안을 사용하면 일반적으로 일부 형태의 피어 인증(및 경우에 따라 권한 부여)을 수행할 수 있습니다.
payload security-part (b)는 끝점이 모두 안전하지 않은 두 경로 간에 전송된 메시지를 표시합니다. 이 경우 무단 스누핑으로부터 메시지를 보호하려면 메시지를 수신한 후 메시지를 보내고 암호 해독하기 전에 메시지를 암호화하는 페이로드 프로세서를 사용합니다.
페이로드 보안의 제한은 모든 종류의 인증 또는 권한 부여 메커니즘을 제공하지 않는다는 것입니다.
1.2.3. 엔드포인트 보안 링크 복사링크가 클립보드에 복사되었습니다!
보안 기능을 지원하는 Camel 구성 요소가 여러 가지가 있습니다. 그러나 이러한 보안 기능은 Camel 코어가 아닌 개별 구성 요소로 구현된다는 점에 유의해야 합니다. 따라서 지원되는 보안 기능 및 구현의 세부 사항은 구성 요소에 따라 다릅니다. 현재 보안을 지원하는 Camel 구성 요소 중 일부는 다음과 같습니다.
- client-to-broker 및 broker-to-broker 통신을 위한 JMS 및 ActiveMQ-SSL/TLS 보안 및 JAAS 보안.
- Cryostatty-HTTP 기본 인증 및 SSL/TLS 보안.
- CXF-SSL/TLS 보안 및 WS-Security.
- 메시지 무결성을 보장하기 위해 crypto-creates 및 디지털 서명을 확인합니다.
- Netty-SSL/TLS 보안
- M Cryostat-SSL/TLS 보안.
- Cometd-SSL/TLS 보안
- Google 애플리케이션 컨텍스트에서 glogin 및 gauth-authorization.
1.2.4. 페이로드 보안 링크 복사링크가 클립보드에 복사되었습니다!
Apache Camel은 암호화 및 암호 해독 단계가 마샬링()
및 unmarshal
작업에 데이터 형식으로 노출되는 다음 페이로드 보안 구현을 제공합니다.
1.2.5. XMLSecurity 데이터 형식 링크 복사링크가 클립보드에 복사되었습니다!
XMLSecurity 데이터 형식은 특히 XML 페이로드를 암호화하도록 설계되었습니다. 이 데이터 형식을 사용하는 경우 암호화할 XML 요소를 지정할 수 있습니다. 기본 동작은 모든 XML 요소를 암호화하는 것입니다. 이 기능은 대칭 암호화 알고리즘을 사용합니다.
자세한 내용은 http://camel.apache.org/xmlsecurity-dataformat.html 을 참조하십시오.
1.2.6. 암호화 데이터 형식 링크 복사링크가 클립보드에 복사되었습니다!
암호화 데이터 형식은 모든 종류의 페이로드를 암호화할 수 있는 범용 암호화 기능입니다. Java Cryptographic Extension을 기반으로 하며 대칭(공유 키) 암호화 및 암호 해독만 구현합니다.
자세한 내용은 http://camel.apache.org/crypto.html 을 참조하십시오.
2장. Apache Karaf 컨테이너 보안 링크 복사링크가 클립보드에 복사되었습니다!
초록
Apache Karaf 컨테이너는 JAAS를 사용하여 보호됩니다. JAAS 영역을 정의하면 사용자 자격 증명을 검색하는 데 사용되는 메커니즘을 구성할 수 있습니다. 기본 역할을 변경하여 컨테이너의 관리 인터페이스에 대한 액세스를 구체화할 수도 있습니다.
2.1. JAAS 인증 링크 복사링크가 클립보드에 복사되었습니다!
초록
JAAS(Java Authentication and Authorization Service)는 Java 애플리케이션에서 인증을 구현하기 위한 일반 프레임워크를 제공합니다. 인증 구현은 모듈식이며 개별 JAAS 모듈(또는 플러그인)은 인증 구현을 제공합니다.
JAAS에 대한 배경 정보는 JAAS 참조 가이드를 참조하십시오.
2.1.1. 기본 JAAS Cryostat 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 Karaf 컨테이너에서 기본 JAAS 영역에 대한 사용자 데이터를 관리하는 방법을 설명합니다.
2.1.1.1. 기본 JAAS 영역 링크 복사링크가 클립보드에 복사되었습니다!
Karaf 컨테이너에는 기본적으로 컨테이너의 모든 측면을 보호하는 데 사용되는 karaf
영역인 사전 정의된 JAAS 영역이 있습니다.
2.1.1.2. JAAS와 애플리케이션을 통합하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
자체 애플리케이션에서 karaf
영역을 사용할 수 있습니다. 간단하게 karaf
를 사용하려는 JAAS 영역의 이름으로 구성합니다.
2.1.1.3. 기본 JAAS 로그인 모듈 링크 복사링크가 클립보드에 복사되었습니다!
Karaf 컨테이너를 처음 시작하면 karaf
기본 영역을 사용하도록 구성됩니다. 이 기본 구성에서 karaf
영역은 동시에 활성화된 5개의 JAAS 로그인 모듈을 배포합니다. 배포된 로그인 모듈을 보려면 다음과 같이 jaas:realms
console 명령을 입력합니다.
사용자가 로그인을 시도할 때마다 인증은 5개의 모듈을 목록순으로 진행합니다. 각 모듈의 플래그 값은 인증이 성공하려면 모듈이 성공적으로 완료되어야 하는지 여부를 지정합니다. 또한 플래그 값은 모듈이 완료된 후 인증 프로세스가 중지되는지 또는 다음 모듈을 진행할지 여부를 지정합니다.
선택적
플래그는 5개의 인증 모듈 모두에 대해 설정됩니다. Optional
플래그 설정을 사용하면 현재 모듈이 성공적으로 완료되었는지 여부와 관계없이 인증 프로세스가 항상 한 모듈에서 다음으로 전달됩니다. Karaf JAAS 영역의 플래그 값은 하드 코딩되며 변경할 수 없습니다. 플래그에 대한 자세한 내용은 표 2.1. “JAAS 모듈 정의 플래그” 을 참조하십시오.
Karaf 컨테이너에서 properties 로그인 모듈과 공개 키 로그인 모듈이 모두 활성화됩니다. JAAS가 사용자를 인증하면 먼저 properties 로그인 모듈을 사용하여 사용자를 인증하려고 합니다. 실패하는 경우 공개 키 로그인 모듈을 사용하여 사용자를 인증하려고 합니다. 이 모듈이 실패하면 오류가 발생합니다.
2.1.1.1. 인증 감사 로깅 모듈 링크 복사링크가 클립보드에 복사되었습니다!
Karaf 컨테이너의 기본 모듈 목록 내에서 처음 두 모듈만 사용자 ID를 확인하는 데 사용됩니다. 나머지 모듈은 성공 및 실패한 로그인 시도의 감사 추적을 기록하는 데 사용됩니다. 기본 영역에는 다음과 같은 감사 로깅 모듈이 포함됩니다.
- org.apache.karaf.jaas.modules.audit.LogAuditLoginModule
-
이 모듈은
etc/org.ops4j.pax.logging.cfg
의 Pax 로깅 인프라에 대해 구성된 로거를 사용하여 인증 시도에 대한 정보를 기록합니다. 자세한 내용은 JAAS 로그 로그인 모듈을 참조하십시오. - org.apache.karaf.jaas.modules.audit.FileAuditLoginModule
- 이 모듈은 사용자가 지정하는 파일에 대한 인증 시도에 대한 정보를 직접 기록합니다. 로깅 인프라를 사용하지 않습니다. 자세한 내용은 JAAS 파일 감사 로그인 모듈을 참조하십시오.
- org.apache.karaf.jaas.modules.audit.EventAdminAuditLoginModule
- 이 모듈은 OSGi 이벤트 관리 서비스를 사용하여 인증 시도를 추적합니다.
2.1.1.4. properties 로그인 모듈에서 사용자 구성 링크 복사링크가 클립보드에 복사되었습니다!
properties 로그인 모듈은 사용자 이름/암호 자격 증명을 플랫 파일 형식으로 저장하는 데 사용됩니다. properties 로그인 모듈에서 새 사용자를 생성하려면 텍스트 편집기를 사용하여 InstallDir/etc/users.properties
파일을 열고 다음 구문으로 행을 추가합니다.
Username=Password[,UserGroup|Role][,UserGroup|Role]...
Username=Password[,UserGroup|Role][,UserGroup|Role]...
예를 들어 암호, topsecret
, 역할인 admin
을 사용하여 jdoe
사용자를 생성하려면 다음과 같은 항목을 생성할 수 있습니다.
jdoe=topsecret,admin
jdoe=topsecret,admin
admin
역할이 jdoe
사용자에게 전체 관리 권한을 제공하는 경우.
2.1.1.5. properties 로그인 모듈에서 사용자 그룹 구성 링크 복사링크가 클립보드에 복사되었습니다!
사용자에게 직접 역할을 할당하는 대신 속성 로그인 모듈에서 사용자 그룹에 사용자를 추가하는 옵션도 있습니다. properties 로그인 모듈에서 사용자 그룹을 생성하려면 텍스트 편집기를 사용하여 InstallDir/etc/users.properties
파일을 열고 다음 구문으로 행을 추가합니다.
_g_\:GroupName=Role1,Role2,...
_g_\:GroupName=Role1,Role2,...
예를 들어 역할, 그룹 및 admin
을 사용하여 admin
사용자 그룹을 생성하려면 다음과 같은 항목을 생성할 수 있습니다.
group
_g_\:admingroup=group,admin
_g_\:admingroup=group,admin
그런 다음 다음 사용자 항목을 생성하여 majorclanger
사용자를 admingroup
에 추가할 수 있습니다.
majorclanger=secretpass,_g_:admingroup
majorclanger=secretpass,_g_:admingroup
2.1.1.6. 공개 키 로그인 모듈 구성 링크 복사링크가 클립보드에 복사되었습니다!
공개 키 로그인 모듈은 SSH 공개 키 자격 증명을 플랫 파일 형식으로 저장하는 데 사용됩니다. 공개 키 로그인 모듈에서 새 사용자를 생성하려면 텍스트 편집기를 사용하여 InstallDir/etc/keys.properties
파일을 열고 다음 구문으로 행을 추가합니다.
Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...
Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...
예를 들어 InstallDir/etc/keys.properties
파일에 다음 항목을 추가하여 admin
역할이 있는 jdoe
사용자를 생성할 수 있습니다.
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
id_rsa.pub
파일의 전체 내용을 여기에 삽입하지 마십시오. 공개 키 자체를 나타내는 기호 블록을 삽입합니다.
2.1.1.7. 공개 키 로그인 모듈에서 사용자 그룹 구성 링크 복사링크가 클립보드에 복사되었습니다!
사용자에게 직접 역할을 할당하는 대신 공개 키 로그인 모듈에서 사용자 그룹에 사용자를 추가하는 옵션도 있습니다. 공개 키 로그인 모듈에서 사용자 그룹을 생성하려면 텍스트 편집기를 사용하여 InstallDir/etc/keys.properties
파일을 열고 다음 구문으로 행을 추가합니다.
_g_\:GroupName=Role1,Role2,...
_g_\:GroupName=Role1,Role2,...
예를 들어 역할, 그룹 및 admin
을 사용하여 admin
사용자 그룹을 생성하려면 다음과 같은 항목을 생성할 수 있습니다.
group
_g_\:admingroup=group,admin
_g_\:admingroup=group,admin
그런 다음 다음 사용자 항목을 생성하여 admingroup
에 jdoe
사용자를 추가할 수 있습니다.
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,_g_:admingroup
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,_g_:admingroup
2.1.1.8. 저장된 암호 암호화 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 암호는 InstallDir/etc/users.properties
파일에 일반 텍스트 형식으로 저장됩니다. 이 파일에서 암호를 보호하려면 관리자만 읽을 수 있도록 users.properties
파일의 파일 권한을 설정해야 합니다. 추가 보호를 제공하기 위해 메시지 다이제스트 알고리즘을 사용하여 저장된 암호를 선택적으로 암호화할 수 있습니다.
암호 암호화 기능을 활성화하려면 InstallDir/etc/org.apache.karaf.jaas.cfg
파일을 편집하고 주석에 설명된 대로 암호화 속성을 설정합니다. 예를 들어 다음 설정은 MD5 메시지 다이제스트 알고리즘을 사용하여 기본 암호화를 활성화합니다.
org.apache.karaf.jaas.cfg
파일의 암호화 설정은 Karaf 컨테이너의 기본 karaf
영역에 만 적용됩니다. 사용자 지정 영역에는 영향을 미치지 않습니다.
암호 암호화에 대한 자세한 내용은 2.1.10절. “저장된 암호 암호화” 을 참조하십시오.
2.1.1.9. 기본 영역 덮어쓰기 링크 복사링크가 클립보드에 복사되었습니다!
JAAS 영역을 사용자 정의하려는 경우 가장 편리한 방법은 더 높은 순위의 karaf
영역을 정의하여 기본 karaf
영역을 재정의하는 것입니다. 이렇게 하면 모든 Red Hat Fuse 보안 구성 요소가 사용자 지정 영역을 사용하도록 전환됩니다. 사용자 지정 JAAS 영역을 정의하고 배포하는 방법에 대한 자세한 내용은 2.1.2절. “JAAS Cryostats 정의” 을 참조하십시오.
2.1.2. JAAS Cryostats 정의 링크 복사링크가 클립보드에 복사되었습니다!
OSGi 컨테이너에 JAAS 영역을 정의할 때 기존 JAAS 로그인 구성 파일에 정의를 배치할 수 없습니다. 대신 OSGi 컨테이너는 블루프린트 구성 파일에서 JAAS 영역을 정의하는 데 특수 jaas:config
요소를 사용합니다. 이러한 방식으로 정의된 JAAS 영역은 컨테이너에 배포된 모든 애플리케이션 번들에서 사용할 수 있으므로 전체 컨테이너에서 JAAS 보안 인프라를 공유할 수 있습니다.
2.1.2.1. 네임스페이스 링크 복사링크가 클립보드에 복사되었습니다!
jaas:config
요소는 http://karaf.apache.org/xmlns/jaas/v1.0.0
네임스페이스에 정의되어 있습니다. JAAS 영역을 정의할 때 예 2.1. “JAAS 블루프린트 네임스페이스” 에 표시된 행을 포함해야 합니다.
예 2.1. JAAS 블루프린트 네임스페이스
xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
2.1.2.2. JAAS 영역 구성 링크 복사링크가 클립보드에 복사되었습니다!
jaas:config
요소의 구문은 예 2.2. “블루프린트 XML에서 JAAS Cryostat 정의” 에 표시됩니다.
예 2.2. 블루프린트 XML에서 JAAS Cryostat 정의
요소는 다음과 같이 사용됩니다.
jaas:config
JAAS 영역을 정의합니다. 다음과 같은 속성이 있습니다.
-
name
- JAAS 영역의 이름을 지정합니다. -
rank
- JAAS 영역 간의 이름 지정 충돌을 해결하기 위한 선택적 순위를 지정합니다. 두 개 이상의 JAAS 영역이 동일한 이름으로 등록되면 OSGi 컨테이너는 항상 가장 높은 순위의 realm 인스턴스를 선택합니다. 기본 영역인karaf
를 재정의하려면 이전에 설치한 모든karaf
영역을 덮어쓰도록100
개 이상의순위를
지정해야 합니다.
-
jaas:module
현재 영역에서 JAAS 로그인 모듈을 정의합니다.
JAAS:module
에는 다음과 같은 속성이 있습니다.-
className
- JAAS 로그인 모듈의 정규화된 클래스 이름입니다. 지정된 클래스는 번들 클래스 로더에서 사용할 수 있어야 합니다. 플래그
- 로그인 작업의 성공 또는 실패 시 발생하는 작업을 결정합니다. 표 2.1. “JAAS 모듈 정의 플래그” 유효한 값을 설명합니다.Expand 표 2.1. JAAS 모듈 정의 플래그 현재의 설명 required
이 로그인 모듈의 인증이 성공해야 합니다. 성공 또는 실패와 관계없이 항상 이 항목의 다음 로그인 모듈로 이동합니다.
필수 조건
이 로그인 모듈의 인증이 성공해야 합니다. 성공하면 다음 로그인 모듈로 진행합니다. 실패하는 경우 나머지 로그인 모듈을 처리하지 않고 즉시 돌아갑니다.
충분합니다.
이 로그인 모듈의 인증이 성공하려면 필요하지 않습니다. 성공하면 나머지 로그인 모듈을 처리하지 않고 즉시 돌아갑니다. 실패하는 경우 다음 로그인 모듈로 진행합니다.
optional
이 로그인 모듈의 인증이 성공하려면 필요하지 않습니다. 성공 또는 실패와 관계없이 항상 이 항목의 다음 로그인 모듈로 이동합니다.
jaas:module
요소의 내용은 공백으로 구분된 속성 설정 목록으로, JAAS 로그인 모듈 인스턴스를 초기화하는 데 사용됩니다. 특정 속성은 JAAS 로그인 모듈에 의해 결정되며 적절한 형식으로 입력해야 합니다.참고영역에 여러 로그인 모듈을 정의할 수 있습니다.
-
2.1.2.3. 표준 JAAS 로그인 속성을 XML로 변환 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Fuse는 표준 Java 로그인 구성 파일과 동일한 속성을 사용하지만 Red Hat Fuse를 사용하려면 약간 다르게 지정해야 합니다. 표준 Java 로그인 구성 파일 방식과 비교하여 JAAS 영역을 정의하는 Red Hat Fuse 접근 방식은 예 2.3. “표준 JAAS 속성” 에 표시된 로그인 구성을 변환하는 방법을 고려하십시오. 이 방법은 Red Hat Fuse 속성 로그인 모듈 클래스인
을 사용하여 PropertiesLogin 영역을 정의합니다.
PropertiesLogin
Module
예 2.3. 표준 JAAS 속성
PropertiesLogin { org.apache.activemq.jaas.PropertiesLoginModule required org.apache.activemq.jaas.properties.user="users.properties" org.apache.activemq.jaas.properties.group="groups.properties"; };
PropertiesLogin {
org.apache.activemq.jaas.PropertiesLoginModule required
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
};
블루프린트 파일에서 jaas:config
요소를 사용하는 동등한 JAAS 영역 정의는 예 2.4. “블루프린트 JAAS 속성” 에 표시됩니다.
예 2.4. 블루프린트 JAAS 속성
블루프린트 구성에서는 JAAS 속성에 큰따옴표를 사용하지 마십시오.
2.1.2.4. 예제 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Fuse는 JAAS 인증 데이터를 X.500 서버에 저장할 수 있는 어댑터도 제공합니다. 예 2.5. “JAAS Cryostat 구성” ldap://localhost:10389 에 있는 LDAP 서버에 연결하는 Red Hat Fuse의
클래스를 사용할 LDAPLogin 영역을 정의합니다.
LDAPLogin
Module
예 2.5. JAAS Cryostat 구성
LDAP 로그인 모듈 사용에 대한 자세한 설명 및 예제는 2.1.7절. “JAAS LDAP 로그인 모듈” 에서 참조하십시오.
2.1.3. JAAS 속성 로그인 모듈 링크 복사링크가 클립보드에 복사되었습니다!
JAAS 속성 로그인 모듈은 사용자 데이터를 플랫 파일 형식으로 저장합니다(저장된 암호는 메시지 다이제스트 알고리즘을 사용하여 선택적으로 암호화할 수 있음). 사용자 데이터는 간단한 텍스트 편집기를 사용하여 직접 편집하거나 jaas:*
콘솔 명령을 사용하여 관리할 수 있습니다.
예를 들어 Karaf 컨테이너는 기본적으로 JAAS 속성 로그인 모듈을 사용하고 관련 사용자 데이터를 InstallDir/etc/users.properties
파일에 저장합니다.
2.1.3.1. 지원되는 인증 정보 링크 복사링크가 클립보드에 복사되었습니다!
JAAS 속성 로그인 모듈은 사용자 이름/암호 자격 증명을 인증하고 인증된 사용자와 연결된 역할 목록을 반환합니다.
2.1.3.2. 구현 클래스 링크 복사링크가 클립보드에 복사되었습니다!
다음 클래스는 JAAS 속성 로그인 모듈을 구현합니다.
org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
- JAAS 로그인 모듈을 구현합니다.
org.apache.karaf.jaas.modules.properties.PropertiesBackingEngineFactory
-
OSGi 서비스로 노출되어야 합니다. 이 서비스를 사용하면 Apache Karaf 쉘에서
jaas:*
콘솔 명령을 사용하여 사용자 데이터를 관리할 수 있습니다( Apache Karaf 콘솔 참조 참조 참조).
2.1.3.3. 옵션 링크 복사링크가 클립보드에 복사되었습니다!
JAAS 속성 로그인 모듈은 다음 옵션을 지원합니다.
사용자
- 사용자 속성 파일의 위치입니다.
2.1.3.4. 사용자 속성 파일의 형식 링크 복사링크가 클립보드에 복사되었습니다!
사용자 속성 파일은 properties 로그인 모듈에 대한 사용자 이름, 암호 및 역할 데이터를 저장하는 데 사용됩니다. 각 사용자는 사용자 속성 파일에서 한 줄로 표시됩니다. 여기서 한 줄의 형식은 다음과 같습니다.
Username=Password[,UserGroup|Role][,UserGroup|Role]...
Username=Password[,UserGroup|Role][,UserGroup|Role]...
사용자 그룹은 이 파일에서도 정의할 수 있습니다. 여기서 각 사용자 그룹은 다음 형식으로 한 줄로 표시됩니다.
_g_\:GroupName=Role1[,Role2]...
_g_\:GroupName=Role1[,Role2]...
예를 들어 다음과 같이 user, bigcheese
및 guest
, 사용자 그룹, admingroup
및 guestgroup
을 정의할 수 있습니다.
2.1.3.5. 샘플 블루프린트 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 블루프린트 구성은 속성 로그인 모듈을 사용하여 새 karaf
영역을 정의하는 방법을 보여줍니다. 여기서 기본 karaf
영역은 rank
속성을 200
으로 설정하여 재정의됩니다.
jaas:*
console 명령에서 사용자 데이터를 관리할 수 있도록 BackingEngineFactory
8080을 OSGi 서비스로 내보내야 합니다.
2.1.4. JAAS OSGi Config 로그인 모듈 링크 복사링크가 클립보드에 복사되었습니다!
2.1.4.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
JAAS OSGi 구성 로그인 모듈은 OSGi Config Admin Service 를 활용하여 사용자 데이터를 저장합니다. 이 로그인 모듈은 JAAS 속성 로그인 모듈(예: 사용자 항목의 구문)과 매우 유사하지만 사용자 데이터를 검색하는 메커니즘은 OSGi Config Admin Service를 기반으로 합니다.
사용자 데이터는 해당 OSGi 구성 파일 etc/PersistentID.cfg
또는 OSGi Config Admin Service에서 지원하는 구성 방법을 사용하여 직접 편집할 수 있습니다. 그러나 jaas:*
콘솔 명령은 지원되지 않습니다.
2.1.4.2. 지원되는 인증 정보 링크 복사링크가 클립보드에 복사되었습니다!
JAAS OSGi 구성 로그인 모듈은 사용자 이름/암호 인증 정보를 인증하고 인증된 사용자와 연결된 역할 목록을 반환합니다.
2.1.4.3. 구현 클래스 링크 복사링크가 클립보드에 복사되었습니다!
다음 클래스는 JAAS OSGi config 로그인 모듈을 구현합니다.
org.apache.karaf.jaas.modules.osgi.OsgiConfigLoginModule
- JAAS 로그인 모듈을 구현합니다.
OSGi 구성 로그인 모듈에 대한 백업 엔진 팩토리가 없으므로 이 모듈은 jaas:*
콘솔 명령을 사용하여 관리할 수 없습니다.
2.1.4.4. 옵션 링크 복사링크가 클립보드에 복사되었습니다!
JAAS OSGi 구성 로그인 모듈은 다음 옵션을 지원합니다.
pid
- 사용자 데이터를 포함하는 OSGi 구성의 영구 ID 입니다. OSGi Config Admin 표준에서 영구 ID는 관련 구성 속성 세트를 참조합니다.
2.1.4.5. 구성 파일의 위치 링크 복사링크가 클립보드에 복사되었습니다!
구성 파일의 위치는 영구 ID의 구성이 다음 파일에 저장되는 일반 규칙을 따릅니다.
InstallDir/etc/PersistentID.cfg
InstallDir/etc/PersistentID.cfg
2.1.4.6. 구성 파일의 형식 링크 복사링크가 클립보드에 복사되었습니다!
PersistentID.cfg
구성 파일은 OSGi 구성 로그인 모듈에 대한 사용자 이름, 암호 및 역할 데이터를 저장하는 데 사용됩니다. 각 사용자는 구성 파일의 한 줄로 표시됩니다. 여기서 행은 다음과 같습니다.
Username=Password[,Role][,Role]...
Username=Password[,Role][,Role]...
JAAS OSGi 구성 로그인 모듈에서는 사용자 그룹이 지원되지 않습니다.
2.1.4.7. 샘플 블루프린트 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 블루프린트 구성은 OSGi config 로그인 모듈을 사용하여 새 karaf
영역을 정의하는 방법을 보여줍니다. 여기서 기본 karaf
영역은 rank
속성을 200
으로 설정하여 재정의됩니다.
이 예에서 사용자 데이터는 InstallDir/etc/org.jboss.example.osgiconfigloginmodule.cfg
에 저장되며 jaas:*
콘솔 명령을 사용하여 구성을 편집할 수 없습니다.
2.1.5. JAAS 공개 키 로그인 모듈 링크 복사링크가 클립보드에 복사되었습니다!
JAAS 공개 키 로그인 모듈은 사용자 데이터를 단순 텍스트 편집기를 사용하여 직접 편집할 수 있는 플랫 파일 형식으로 저장합니다. 그러나 jaas:*
콘솔 명령은 지원되지 않습니다.
예를 들어 Karaf 컨테이너는 기본적으로 JAAS 공개 키 로그인 모듈을 사용하고 관련 사용자 데이터를 InstallDir/etc/keys.properties
파일에 저장합니다.
2.1.5.1. 지원되는 인증 정보 링크 복사링크가 클립보드에 복사되었습니다!
JAAS 공개 키 로그인 모듈은 SSH 키 자격 증명을 인증합니다. 사용자가 로그인을 시도하면 SSH 프로토콜은 저장된 공개 키를 사용하여 사용자에게 챌린지를 수행합니다. 사용자는 챌린지에 응답하기 위해 해당 개인 키를 보유해야 합니다. 로그인에 성공하면 로그인 모듈에서 사용자와 연결된 역할 목록을 반환합니다.
2.1.5.2. 구현 클래스 링크 복사링크가 클립보드에 복사되었습니다!
다음 클래스는 JAAS 공개 키 로그인 모듈을 구현합니다.
org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule
- JAAS 로그인 모듈을 구현합니다.
공개 키 로그인 모듈에 대한 백업 엔진 팩토리가 없으므로 이 모듈은 jaas:*
콘솔 명령을 사용하여 관리할 수 없습니다.
2.1.5.3. 옵션 링크 복사링크가 클립보드에 복사되었습니다!
JAAS 공개 키 로그인 모듈은 다음 옵션을 지원합니다.
사용자
- 공개 키 로그인 모듈에 대한 사용자 속성 파일의 위치입니다.
2.1.5.4. 키 속성 파일의 형식 링크 복사링크가 클립보드에 복사되었습니다!
keys.properties
파일은 공개 키 로그인 모듈에 대한 사용자 이름, 공개 키 및 역할 데이터를 저장하는 데 사용됩니다. 각 사용자는 키 속성 파일에서 한 줄로 표시됩니다. 여기서 한 줄의 양식은 다음과 같습니다.
Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...
Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...
여기서 PublicKey 는 SSH 키 쌍의 공개 키 부분입니다(일반적으로 UNIX 시스템의 ~/.ssh/id_rsa.pub
의 사용자 홈 디렉터리에 있음).
예를 들어 admin
역할을 사용하여 사용자 jdoe
를 생성하려면 다음과 같은 항목을 생성합니다.
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
id_rsa.pub
파일의 전체 내용을 여기에 삽입하지 마십시오. 공개 키 자체를 나타내는 기호 블록을 삽입합니다.
사용자 그룹은 이 파일에서도 정의할 수 있습니다. 여기서 각 사용자 그룹은 다음 형식으로 한 줄로 표시됩니다.
_g_\:GroupName=Role1[,Role2]...
_g_\:GroupName=Role1[,Role2]...
2.1.5.5. 샘플 블루프린트 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 블루프린트 구성은 공개 키 로그인 모듈을 사용하여 새 karaf
영역을 정의하는 방법을 보여줍니다. 여기서 기본 karaf
영역은 rank
속성을 200
으로 설정하여 재정의됩니다.
이 예에서 사용자 데이터는 InstallDir/etc/keys.properties
파일에 저장되며 jaas:*
콘솔 명령을 사용하여 구성을 편집할 수 없습니다.
2.1.6. JAAS JDBC 로그인 모듈 링크 복사링크가 클립보드에 복사되었습니다!
2.1.6.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
JAAS JDBC 로그인 모듈을 사용하면 JDBC(Java Database Connectivity)를 사용하여 데이터베이스에 연결할 수 있는 데이터베이스 백엔드에 사용자 데이터를 저장할 수 있습니다. 따라서 JDBC를 지원하는 데이터베이스를 사용하여 사용자 데이터를 저장할 수 있습니다. 사용자 데이터를 관리하려면 네이티브 데이터베이스 클라이언트 도구 또는 jaas:*
콘솔 명령(지원 엔진에서 구성된 SQL 쿼리를 사용하여 관련 데이터베이스 업데이트를 수행하는 위치)을 사용할 수 있습니다.
인증 및 권한 부여 구성 요소를 모두 제공하는 각 로그인 모듈과 여러 로그인 모듈을 결합할 수 있습니다. 예를 들어 기본 PropertiesLoginModule
과 JDBCLoginModule
을 결합하여 시스템에 대한 액세스를 보장할 수 있습니다.
사용자 그룹은 JAAS JDBC 로그인 모듈에서는 지원되지 않습니다.
2.1.6.2. 지원되는 인증 정보 링크 복사링크가 클립보드에 복사되었습니다!
JAAS JDBC 로그인 모듈은 사용자 이름/암호 자격 증명을 인증하고 인증된 사용자와 관련된 역할 목록을 반환합니다.
2.1.6.3. 구현 클래스 링크 복사링크가 클립보드에 복사되었습니다!
다음 클래스는 JAAS JDBC 로그인 모듈을 구현합니다.
org.apache.karaf.jaas.modules.jdbc.JDBCLoginModule
- JAAS 로그인 모듈을 구현합니다.
org.apache.karaf.jaas.modules.jdbc.JDBCBackingEngineFactory
-
OSGi 서비스로 노출되어야 합니다. 이 서비스를 사용하면 Apache Karaf 쉘에서
jaas:*
콘솔 명령을 사용하여 사용자 데이터를 관리할 수 있습니다( olink:FMQCommandRef/Consolejaas참조).
2.1.6.4. 옵션 링크 복사링크가 클립보드에 복사되었습니다!
JAAS JDBC 로그인 모듈은 다음 옵션을 지원합니다.
- 데이터 소스
OSGi 서비스 또는 JNDI 이름으로 지정된 JDBC 데이터 소스입니다. 다음 구문을 사용하여 데이터 소스의 OSGi 서비스를 지정할 수 있습니다.
osgi:ServiceInterfaceName[/ServicePropertiesFilter]
osgi:ServiceInterfaceName[/ServicePropertiesFilter]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceInterfaceName 은 데이터 소스의 OSGi 서비스(일반적으로
javax.sql.DataSource
)에서 내보낸 인터페이스 또는 클래스입니다.Karaf 컨테이너에서 여러 데이터 소스를 OSGi 서비스로 내보낼 수 있으므로 일반적으로 원하는 특정 데이터 소스를 선택하려면 필터인 ServicePropertiesFilter 를 지정해야 합니다. OSGi 서비스의 필터는 서비스 속성 설정에 적용되며 LDAP 필터 구문에서 빌린 구문을 따릅니다.
- query.password
-
사용자 암호를 검색하는 SQL 쿼리입니다. 쿼리는 런타임에 사용자 이름으로 대체되는 단일 물음표 문자
?
를 포함할 수 있습니다. - query.role
-
사용자의 역할을 검색하는 SQL 쿼리입니다. 쿼리는 런타임에 사용자 이름으로 대체되는 단일 물음표 문자
?
를 포함할 수 있습니다. - insert.user
-
새 사용자 항목을 만드는 SQL 쿼리입니다. 쿼리에는 두 개의 물음표가 포함될 수 있습니다.
?
, 문자는 첫 번째 물음표가 사용자 이름으로 대체되고 두 번째 물음표는 런타임에 암호로 대체됩니다. - insert.role
-
사용자 항목에 역할을 추가하는 SQL 쿼리입니다. 쿼리는 두 개의 물음표(
?
)를 포함할 수 있습니다. 첫 번째 물음표는 사용자 이름으로 대체되고 두 번째 물음표는 런타임 시 역할로 대체됩니다. - delete.user
-
사용자 항목을 삭제하는 SQL 쿼리입니다. 쿼리는 런타임에 사용자 이름으로 대체되는 단일 물음표 문자
?
를 포함할 수 있습니다. - delete.role
-
사용자 항목에서 역할을 삭제하는 SQL 쿼리입니다. 쿼리는 두 개의 물음표(
?
)를 포함할 수 있습니다. 첫 번째 물음표는 사용자 이름으로 대체되고 두 번째 물음표는 런타임 시 역할로 대체됩니다. - delete.roles
-
사용자 항목에서 여러 역할을 삭제하는 SQL 쿼리입니다. 쿼리는 런타임에 사용자 이름으로 대체되는 단일 물음표 문자
?
를 포함할 수 있습니다.
2.1.6.5. JDBC 로그인 모듈 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
JDBC 로그인 모듈을 설정하려면 다음 주요 단계를 수행합니다.
2.1.6.6. 데이터베이스 테이블 만들기 링크 복사링크가 클립보드에 복사되었습니다!
JDBC 로그인 모듈을 설정하려면 먼저 사용자 데이터를 저장하려면 백업 데이터베이스에 사용자 테이블 및 역할 테이블을 설정해야 합니다. 예를 들어 다음 SQL 명령은 적절한 사용자
테이블 및 역할
테이블을 만드는 방법을 보여줍니다.
users
테이블은 사용자 이름/암호 데이터를 저장하고 roles
테이블은 사용자 이름을 하나 이상의 역할과 연결합니다.
2.1.6.7. 데이터 소스 생성 링크 복사링크가 클립보드에 복사되었습니다!
JDBC 로그인 모듈에서 JDBC 데이터 소스를 사용하려면 데이터 소스 인스턴스를 생성하고 데이터 소스를 OSGi 서비스로 내보내는 것이 좋습니다. 그런 다음 JDBC 로그인 모듈은 내보낸 OSGi 서비스를 참조하여 데이터 소스에 액세스할 수 있습니다. 예를 들어 MySQL 데이터 소스 인스턴스를 생성하고 블루프린트 파일에서 다음과 같은 코드를 사용하여 OSGi 서비스(Java x.sql.DataSource
유형)로 노출할 수 있습니다.
위의 블루프린트 구성은 Karaf 컨테이너에 OSGi 번들로 패키지하고 설치해야 합니다.
2.1.6.8. OSGi 서비스로 데이터 소스 지정 링크 복사링크가 클립보드에 복사되었습니다!
데이터 소스를 인스턴스화하고 OSGi 서비스로 내보낸 후 JDBC 로그인 모듈을 구성할 준비가 된 것입니다. 특히 JDBC 로그인 모듈의 데이터 소스
옵션은 다음 구문을 사용하여 데이터 소스의 OSGi 서비스를 참조할 수 있습니다.
osgi:javax.sql.DataSource/(osgi.jndi.service.name=jdbc/karafdb)
osgi:javax.sql.DataSource/(osgi.jndi.service.name=jdbc/karafdb)
여기서 javax.sql.DataSource
는 내보낸 OSGi 서비스의 인터페이스 유형이며 필터 (osgi.jndi.service.name=jdbc/karafdb)
. 여기서 osgi.jndi.service.name
서비스 속성에 값이 jdbc/karafdb
인 특정 javax.sql.DataSource
인스턴스를 선택합니다.
예를 들어 다음 블루프린트 구성을 사용하여 샘플 MySQL 데이터 소스를 참조하는 JDBC 로그인 모듈로 karaf
영역을 재정의할 수 있습니다.
이전 구성에 표시된 SQL 설명은 실제로 이러한 옵션의 기본값입니다. 따라서 이러한 SQL 문과 일치하는 사용자 및 역할 테이블을 생성하는 경우 옵션 설정을 생략하고 기본값을 사용할 수 있습니다.
JDBCLoginModule을 생성하는 것 외에도 이전 블루프린트 구성은 JDBCBackingEngineFactory
인스턴스를 인스턴스화하고 내보냅니다. 이를 통해 jaas:*
콘솔 명령을 사용하여 사용자 데이터를 관리할 수 있습니다.
2.1.7. JAAS LDAP 로그인 모듈 링크 복사링크가 클립보드에 복사되었습니다!
2.1.7.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
JAAS LDAP 로그인 모듈을 사용하면 사용자 데이터를 LDAP 데이터베이스에 저장할 수 있습니다. 저장된 사용자 데이터를 관리하려면 표준 LDAP 클라이언트 툴을 사용합니다. jaas:*
콘솔 명령은 지원되지 않습니다.
Red Hat Fuse에서 LDAP를 사용하는 방법에 대한 자세한 내용은 LDAP 인증 튜토리얼을 참조하십시오.
사용자 그룹은 JAAS LDAP 로그인 모듈에서는 지원되지 않습니다.
2.1.7.2. 지원되는 인증 정보 링크 복사링크가 클립보드에 복사되었습니다!
JAAS LDAP 로그인 모듈은 사용자 이름/암호 자격 증명을 인증하고 인증된 사용자와 연결된 역할 목록을 반환합니다.
2.1.7.3. 구현 클래스 링크 복사링크가 클립보드에 복사되었습니다!
다음 클래스는 JAAS LDAP 로그인 모듈을 구현합니다.
org.apache.karaf.jaas.modules.ldap.LDAPLoginModule
- JAAS 로그인 모듈을 구현합니다. Karaf 컨테이너에 미리 로드되므로 번들을 설치할 필요가 없습니다.
LDAP 로그인 모듈에 대한 백업 엔진 팩토리가 없으므로 이 모듈은 jaas:*
콘솔 명령을 사용하여 관리할 수 없습니다.
2.1.7.4. 옵션 링크 복사링크가 클립보드에 복사되었습니다!
JAAS LDAP 로그인 모듈은 다음 옵션을 지원합니다.
인증
LDAP 서버에 바인딩할 때 사용되는 인증 방법을 지정합니다. 유효한 값은
-
simple
- 사용자 이름 및 암호 인증에 바인딩하여connection.username
및connection.password
속성을 설정해야 합니다. 아니요
, 파키스탄에 묶습니다. 이 경우connection.username
및connection.password
속성은 할당되지 않은 상태로 둘 수 있습니다.참고디렉터리 서버에 대한 연결은 검색 수행에만 사용됩니다. 이 경우 인증된 바인딩보다 빠르기 때문에 익명 바인딩이 선호되는 경우가 많습니다(예: 방화벽 뒤에 배치하여 디렉터리 서버가 충분히 보호되는지 확인해야 합니다).
-
connection.url
ldap URL, ldap://호스트:포트 를 사용하여 디렉터리 서버의 위치를 지정합니다. 선택적으로 디렉토리 트리에 있는 특정 노드의 DN을 추가한 후 슬래시(
/
)를 추가하여 이 URL을 지정할 수 있습니다. 연결에 SSL 보안을 활성화하려면 URL에ldaps:
scheme을 지정해야 합니다(예: ldaps://Host:포트 ). 여러 URL을 공백으로 구분된 목록으로 지정할 수도 있습니다. 예를 들면 다음과 같습니다.connection.url=ldap://10.0.0.153:2389 ldap://10.10.178.20:389
connection.url=ldap://10.0.0.153:2389 ldap://10.10.178.20:389
Copy to Clipboard Copied! Toggle word wrap Toggle overflow connection.username
-
디렉터리 서버에 대한 연결을 여는 사용자의 DN을 지정합니다. 예:
uid=admin,ou=system
. DN에 공백이 포함된 경우LDAPLoginModule
을 구문 분석할 수 없습니다. 유일한 해결책은 공백을 포함하는 DN 이름 주위에 큰따옴표를 추가한 다음 백슬래시를 추가하여 따옴표를 이스케이프하는 것입니다. 예:uid=admin,ou=\"system index\"
. connection.password
-
connection.username
에서 DN과 일치하는 암호를 지정합니다. 디렉터리 서버에서 암호는 일반적으로 해당 디렉터리 항목에userPassword
속성으로 저장됩니다. context.com.sun.jndi.ldap.connect.pool
-
true
인 경우 LDAP 연결에 대한 연결 풀링을 활성화합니다. 기본값은false
입니다. context.com.sun.jndi.ldap.connect.timeout
- LDAP 서버에 대한 TCP 연결을 생성하는 시간 제한을 밀리초 단위로 지정합니다. 기본값은 무한이므로 중단된 연결 시도를 초래할 수 있으므로 이 속성을 명시적으로 설정하는 것이 좋습니다.
context.com.sun.jndi.ldap.read.timeout
- LDAP 작업의 읽기 제한 시간을 밀리초 단위로 지정합니다. 기본값은 무한이므로 이 속성을 명시적으로 설정하는 것이 좋습니다.We recommend that you set this property explicitly, because the default value is infinite.
context.java.naming.referral
LDAP 추천 은 일부 LDAP 서버에서 지원하는 간접 경로의 한 유형입니다. LDAP 추천은 하나 이상의 URL(일반적으로 다른 LDAP 서버에서 노드 또는 노드 참조)이 포함된 LDAP 서버의 항목입니다.
context.java.naming.referral
속성을 사용하여 다음에 추천을 활성화하거나 비활성화할 수 있습니다. 다음 값 중 하나로 설정할 수 있습니다.-
추천에
따라
(LDAP 서버에서 지원한다고 가정함) -
모든 추천을 자동으로 무시하도록 무시하십시오.
-
추천이 발생할 때마다
PartialResultException
을throw
합니다.
-
추천에
disableCache
-
이 속성을
true
로 설정하여 사용자 및 역할 캐시를 비활성화할 수 있습니다. 기본값은false
입니다. initial.context.factory
-
LDAP 서버에 연결하는 데 사용되는 컨텍스트 팩토리의 클래스를 지정합니다. 항상
com.sun.jndi.ldap.LdapCtxFactory
로 설정해야 합니다. role.base.dn
-
역할 항목을 검색할 DIT의 하위 트리의 DN을 지정합니다. 예를 들어
ou=groups,ou=system
. role.filter
역할을 찾는 데 사용되는 LDAP 검색 필터를 지정합니다.
role.base.dn
에서 선택한 하위 트리에 적용됩니다. 예를 들면(member=uid=%u)
입니다. LDAP 검색 작업에 전달하기 전에 값은 다음과 같이 문자열 대체를 따릅니다.-
%
U는 들어오는 인증 정보에서 추출된 사용자 이름으로 교체되고, -
%DN
은 LDAP 서버에서 해당 사용자의 RDN으로 교체됩니다(user.filter
필터와 일치하여 검색됨). -
%
FQDN은 LDAP 서버에서 해당 사용자의 DN으로 교체됩니다(user.filter
필터와 일치하여 확인됨).
-
role.mapping
LDAP 그룹과 JAAS 역할 간의 매핑을 지정합니다. 매핑을 지정하지 않으면 각 LDAP 그룹이 동일한 이름의 해당 JAAS 역할에 매핑되는 기본 매핑입니다. 역할 매핑은 다음 구문으로 지정됩니다.
ldap-group=jaas-role(,jaas-role)*(;ldap-group=jaas-role(,jaas-role)*)*
ldap-group=jaas-role(,jaas-role)*(;ldap-group=jaas-role(,jaas-role)*)*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서 각 LDAP 그룹
ldap-group
은 CN(일반 이름)으로 지정됩니다.예를 들어 LDAP 그룹,
admin
,devop
,tester
가 있는 경우 다음과 같이 JAAS 역할에 매핑할 수 있습니다.role.mapping=admin=admin;devop=admin,manager;tester=viewer
role.mapping=admin=admin;devop=admin,manager;tester=viewer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow role.name.attribute
-
역할/그룹 이름이 포함된 역할 항목의 특성 유형을 지정합니다. 이 옵션을 생략하면 역할 검색 기능이 효과적으로 비활성화됩니다. 예를 들면
cn
입니다. role.search.subtree
-
역할 항목 검색 범위에
role.base.dn
에서 선택한 트리의 하위 트리가 포함되어 있는지 여부를 지정합니다.true
인 경우 역할 조회는 재귀(SUBTREE
)입니다.false
인 경우 역할 조회는 첫 번째 수준(ONELEVEL
)에서만 수행됩니다. ssl
-
LDAP 서버에 대한 연결이 SSL을 사용하여 보안되는지 여부를 지정합니다.
connection.url
이 이 속성에 관계없이 ldaps:// SSL로 시작하는 경우. ssl.provider
- LDAP 연결에 사용할 SSL 공급자를 지정합니다. 지정하지 않으면 기본 SSL 공급자가 사용됩니다.
ssl.protocol
-
SSL 연결에 사용할 프로토콜을 지정합니다. SSLv3 프로토콜이 사용되지 않도록 하려면 이 속성을
TLSv1
로 설정해야 합니다(POODLE). ssl.algorithm
-
신뢰 저장소 관리자가 사용하는 알고리즘을 지정합니다. 예:
PKIX
. ssl.keystore
-
LDAP 클라이언트의 자체 X.509 인증서를 저장하는 키 저장소의 ID입니다(LDAP 서버에서 SSL 클라이언트 인증이 활성화된 경우에만 필요합니다). 키 저장소는
jaas:keystore
요소를 사용하여 배포해야 합니다( “Apache DS의 설정 예”참조). ssl.keyalias
-
LDAP 클라이언트 자체 X.509 인증서의 키 저장소 별칭입니다(
ssl.keystore
에서 지정한 키 저장소에 두 개 이상의 인증서가 저장되어 있는 경우에만 필요합니다). ssl.truststore
-
LDAP 서버의 인증서를 확인하는 데 사용되는 신뢰할 수 있는 CA 인증서를 저장하는 키 저장소의 ID입니다(LDAP 서버의 인증서 체인은 truststore의 인증서 중 하나에서 서명해야 함). 키 저장소는
jaas:keystore
요소를 사용하여 배포해야 합니다. user.base.dn
-
사용자 항목을 검색할 DIT의 하위 트리의 DN을 지정합니다. 예를 들어
ou=users,ou=system
. user.filter
사용자 인증 정보를 찾는 데 사용되는 LDAP 검색 필터를 지정합니다.
user.base.dn
에서 선택한 하위 트리에 적용됩니다. 예:(uid=%u)
LDAP 검색 작업에 전달하기 전에 값은 다음과 같이 문자열 대체를 따릅니다.-
%
U는 들어오는 인증 정보에서 추출된 사용자 이름으로 교체됩니다.
-
user.search.subtree
-
사용자 항목 검색 범위에
user.base.dn
에서 선택한 트리의 하위 트리가 포함되어 있는지 여부를 지정합니다.true
인 경우 사용자 조회는 재귀입니다(SUBTREE
).false
인 경우 사용자 조회는 첫 번째 수준(ONELEVEL
)에서만 수행됩니다.
2.1.7.5. Apache DS의 설정 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 블루프린트 구성은 LDAP 로그인 모듈을 사용하여 새 karaf
영역을 정의하는 방법을 보여줍니다. 여기서 기본 karaf
영역은 rank
속성을 200
으로 설정하여 재정의되고 LDAP 로그인 모듈은 Apache Directory 서버에 연결됩니다.
SSL을 활성화하려면 connection.url
설정에서 ldaps
스키마를 사용해야 합니다.
2.1.7.6. 다른 디렉터리 서버의 필터 설정 링크 복사링크가 클립보드에 복사되었습니다!
LDAP 로그인 모듈에서 필터 옵션을 설정하는 것과 관련하여 디렉터리 서버 간의 가장 중요한 차이점이 있습니다. 정확한 설정은 궁극적으로 DIT 조직에 의존하지만 다음 표에서는 다른 디렉터리 서버에 필요한 일반적인 역할 필터 설정에 대한 아이디어를 제공합니다.
디렉터리 서버 | 일반적인 필터 설정 |
---|---|
389-DS Red Hat DS |
user.filter=(&(objectClass=InetOrgPerson)(uid=%u)) role.filter=(uniquemember=%fqdn)
|
MS Active Directory |
user.filter=(&(objectCategory=person)(samAccountName=%u)) role.filter=(uniquemember=%fqdn)
|
Apache DS |
user.filter=(uid=%u) role.filter=(member=uid=%u)
|
OpenLDAP |
user.filter=(uid=%u) role.filter=(member:=uid=%u)
|
이전 표에서 &
amp; 기호(Logical And operator 표시)는 블루프린트 XML 파일에 옵션 설정이 포함되므로 &
로 이스케이프됩니다.
2.1.8. JAAS 로그 감사 로그인 모듈 링크 복사링크가 클립보드에 복사되었습니다!
로그인 모듈 org.apache.karaf.jaas.modules.audit.LogAuditLoginModule
은 강력한 인증 시도를 로깅합니다. 최대 파일 크기, 로그 회전, 파일 압축 및 필터링 설정과 같은 표준 로그 관리 기능을 지원합니다. 로깅 구성 파일에서 이러한 옵션에 대한 설정을 설정합니다.
기본적으로 인증 감사 로깅은 비활성화되어 있습니다. 로깅을 활성화하려면 로깅 구성과 감사 구성을 정의한 다음 둘을 함께 연결해야 합니다. 로깅 구성에서 파일 appender 프로세스 및 로거 프로세스의 속성을 지정합니다. file appender는 인증 이벤트에 대한 정보를 지정된 파일에 게시합니다. 로거는 인증 이벤트에 대한 정보를 캡처하고 사용자가 지정하는 appender에서 사용할 수 있도록 하는 메커니즘입니다. 표준 Karaf Log4j 로깅 구성 파일 etc/org.ops4j.pax.logging.cfg
에 로깅 구성을 정의합니다.
감사 구성을 사용하면 감사 로깅 및 로깅 인프라에 대한 링크를 사용할 수 있습니다. etc/org.apache.karaf.jaas.cfg
에 감사 구성을 정의합니다.
2.1.8.1. appender 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 표준 Karaf Log4j 구성 파일(etc/org.ops4j.pax.logging.cfg
)은 AuditRollingFile
이라는 이름으로 감사 로깅 appender를 정의합니다.
샘플 구성 파일의 다음 발췌 내용은 ${karaf.data}/security/audit.log
에서 감사 로그 파일에 쓰는 appender의 속성을 보여줍니다.
appender를 사용하려면 appender가 로그 파일에 게시할 정보를 제공하는 로거를 구성해야 합니다.
2.1.8.2. 로거 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Karaf Log4j 구성 파일 etc/org.ops4j.pax.logging.cfg
는 org.apache.karaf.jaas.modules.audit
라는 이름으로 감사 로거를 설정합니다. 샘플 구성 파일에서 발췌한 다음에서 기본 로거는 인증 이벤트에 대한 정보를 AuditRollingFile
이라는 이름으로 appender에 제공하도록 구성됩니다.
log4j2.logger.audit.name = org.apache.karaf.jaas.modules.audit log4j2.logger.audit.level = INFO log4j2.logger.audit.additivity = false log4j2.logger.audit.appenderRef.AuditRollingFile.ref = AuditRollingFile
log4j2.logger.audit.name = org.apache.karaf.jaas.modules.audit
log4j2.logger.audit.level = INFO
log4j2.logger.audit.additivity = false
log4j2.logger.audit.appenderRef.AuditRollingFile.ref = AuditRollingFile
etc/org.ops
.ref의 값이 일치해야 합니다.
4j.pax.logging.cfg
의 감사 파일 appender
섹션에 있는 log4j2.audit.ref의 log4j2.appender.audit.name
값과 log4j2.appenderRef
2.1.8.1. 인증 감사 로깅 활성화 링크 복사링크가 클립보드에 복사되었습니다!
로깅 구성을 설정한 후 감사 로깅을 켜고 로깅 구성을 감사 구성에 연결할 수 있습니다.
감사 로깅을 활성화하려면 etc/org.apache.karaf.jaas.cfg
에 다음 행을 삽입합니다.
audit.log.enabled = true audit.log.logger = <logger.name> audit.log.level = <level>
audit.log.enabled = true
audit.log.logger = <logger.name>
audit.log.level = <level>
< logger.name
>은 Apache Log4J 및 Log4J2 라이브러리(예: org.jboss.fuse.audit
또는 com.example.audit
)에 의해 설정된 표준 로거(category) 이름을 구분한 점 형식으로 나타냅니다. & lt;level>'
은 WARN
,INFO
,TRACE
또는 DEBUG
와 같은 로그 수준 설정을 나타냅니다.
예를 들어 샘플 감사 구성 파일에서 다음 발췌에서 감사 로그가 활성화되고 이름이 org.apache.karaf.jaas.modules.audit
:로 감사 로거를 사용하도록 구성됩니다.
audit.log.enabled = true audit.log.logger = org.apache.karaf.jaas.modules.audit audit.log.level = INFO
audit.log.enabled = true
audit.log.logger = org.apache.karaf.jaas.modules.audit
audit.log.level = INFO
audit.log.logger
의 값은 Karaf Log4j 구성 파일(etc/org.ops4j.pax.logging.cfg
)의 log4j2.logger.audit.name
값과 일치해야 합니다.
파일을 업데이트한 후 Apache Felix File Install 번들에서 변경 사항을 감지하고 Apache Felix 구성 관리 서비스(구성관리자 )에서 구성을업데이트합니다. 그러면 구성 관리자의 설정이 로깅 인프라에 전달됩니다.
2.1.1. 구성 파일을 업데이트하기 위한 Apache Karaf shell 명령 링크 복사링크가 클립보드에 복사되었습니다!
< FUSE_HOME>/etc
에서 구성 파일을 직접 편집하거나 Apache Karaf config:*
명령을 실행하여 구성 관리자를 업데이트할 수 있습니다.
config*
명령을 사용하여 구성을 업데이트하면 Apache Felix File Install 번들에 변경 사항에 대한 알림을 받고 관련 etc/*.cfg
파일을 자동으로 업데이트합니다.
예: config
명령을 사용하여 JAAS 영역의 속성 나열
쉘 프롬프트에서 JAAS 영역의 속성을 나열하려면 다음 명령을 입력합니다.
config:property-list --pid org.apache.karaf.jaas
이 명령은 영역의 현재 속성을 반환합니다. 예를 들면 다음과 같습니다.
예: config
명령을 사용하여 감사 로그 수준 변경
영역의 감사 로그 수준을 DEBUG
로 변경하려면 쉘 프롬프트에서 config:property-set --pid org.apache.karaf.jaas audit.log.level DEBUG
명령을 입력합니다.
변경 사항이 유효한지 확인하려면 속성을 다시 나열하여 audit.log.level
값을 확인합니다.
2.1.9. JAAS 파일 감사 로그인 모듈 링크 복사링크가 클립보드에 복사되었습니다!
인증 모듈 org.apache.karaf.jaas.modules.audit.FileAuditLoginModule
은 인증 시도에 대한 기본 로깅을 제공합니다. 파일 감사 로그인 모듈은 지정된 파일에 직접 씁니다. Pax 로깅 인프라에 의존하지 않기 때문에 구성은 간단합니다. 그러나 로그 감사 로그인 모듈과 달리 패턴 필터링, 로그 파일 순환 등과 같은 로그 관리 기능은 지원되지 않습니다.
FileAuditLoginModule
을 사용하여 감사 로깅을 활성화하려면 etc/org.apache.karaf.jaas.cfg
:에 다음 행을 삽입합니다.
audit.file.enabled = true audit.file.file = ${karaf.data}/security/audit.log
audit.file.enabled = true
audit.file.file = ${karaf.data}/security/audit.log
일반적으로 파일 감사 로그인 모듈과 로그 감사 로그인 모듈 모두를 통한 감사 로깅을 구성하지 않습니다. 두 모듈을 통한 로깅을 활성화하면 고유한 대상 로그 파일을 사용하도록 각 모듈을 구성하여 데이터 손실을 방지할 수 있습니다.
2.1.10. 저장된 암호 암호화 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 JAAS 로그인 모듈은 암호를 일반 텍스트 형식으로 저장합니다. 파일 권한을 적절하게 설정하여 이러한 데이터를 보호할 수 있지만 메시지 다이제스트 알고리즘을 사용하여 모호한 형식으로 저장하여 암호에 대한 추가 보호를 제공할 수 있습니다.
Red Hat Fuse는 암호 암호화를 활성화하는 일련의 옵션을 제공합니다. 이 모듈은 JAAS 로그인 모듈과 결합할 수 있습니다(필요하지 않은 공개 키 로그인 모듈 제외).
메시지 다이제스트 알고리즘은 해독하기 어렵지만 공격할 수 없는 것은 아닙니다(예: 암호화 해시 함수에 대한RADIUS 문서를참조하십시오). 항상 파일 권한을 사용하여 암호가 포함된 파일을 보호하고 암호 암호화를 사용합니다.
2.1.10.1. 옵션 링크 복사링크가 클립보드에 복사되었습니다!
선택적으로 다음 로그인 모듈 속성을 설정하여 JAAS 로그인 모듈에 대한 암호 암호화를 활성화할 수 있습니다. 이를 위해 InstallDir/etc/org.apache.karaf.jaas.cfg
파일을 편집하거나 “Jasypt 암호화를 사용하는 로그인 모듈의 예” 에 설명된 대로 자체 블루프린트 파일을 배포합니다.
encryption.enabled
-
암호 암호화를 활성화하려면
true
로 설정합니다. encryption.name
- OSGi 서비스로 등록된 암호화 서비스의 이름입니다.
encryption.prefix
- 암호화된 암호의 접두사입니다.
encryption.suffix
- 암호화된 암호의 접미사입니다.
encryption.algorithm
암호화 알고리즘의 이름을 지정합니다(예:
MD5
또는SHA-1
). 다음 암호화 알고리즘 중 하나를 지정할 수 있습니다.-
MD2
-
MD5
-
SHA-1
-
SHA-256
-
SHA-384
-
SHA-512
-
encryption.encoding
-
암호화된 암호 인코딩:
16진수
또는base64
. encryption.providerName
(Jasypt만 해당)-
다이제스트 알고리즘을 제공할
java.security.Provider
인스턴스의 이름입니다. encryption.providerClassName
(Jasypt만 해당)- 다이제스트 알고리즘을 제공하는 보안 공급자의 클래스 이름입니다.
Encryption.iterations
(Jasypt만 해당)- 해시 함수를 재귀적으로 적용하는 횟수입니다.
encryption.saltSizeBytes
(Jasypt only)- 다이제스트를 계산하는 데 사용되는 Salt 크기입니다.
encryption.saltGeneratorClassName
(Jasypt only)- Salt Generator의 클래스 이름입니다.
role.policy
-
역할 주체를 식별하는 정책을 지정합니다. 값이 있을 수 있습니다,
접두사
또는그룹
. role.discriminator
- 역할 정책에서 사용할 discriminator 값을 지정합니다.
2.1.10.2. 암호화 서비스 링크 복사링크가 클립보드에 복사되었습니다!
Fuse에서 제공하는 두 가지 암호화 서비스가 있습니다.
-
encryption.name = “기본 암호화 서비스” 에 설명된 기본
-
“Jasypt 암호화” 에 설명된
encryption.name = jasypt
.
자체 암호화 서비스를 생성할 수도 있습니다. 이렇게 하려면 다음을 수행해야 합니다.
-
org.apache.karaf.jaas.modules.EncryptionService
인터페이스 구현 - 구현을 OSGI 서비스로 노출합니다.
다음 목록은 사용자 정의 암호화 서비스를 OSGI 컨테이너에 노출하는 방법을 보여줍니다.
2.1.10.3. 기본 암호화 서비스 링크 복사링크가 클립보드에 복사되었습니다!
기본 암호화 서비스는 기본적으로 Karaf 컨테이너에 설치되고 encryption.name
속성을 값, basic
로 설정하여 참조할 수 있습니다. 기본 암호화 서비스에서 메시지 다이제스트 알고리즘은 SUN 보안 공급자(Oracle JDK의 기본 보안 공급자)에서 제공합니다.
2.1.10.4. Jasypt 암호화 링크 복사링크가 클립보드에 복사되었습니다!
Jasypt 암호화 서비스는 일반적으로 Karaf에 기본적으로 설치됩니다. 필요한 경우 다음과 같이 jasypt-encryption
기능을 설치하여 명시적으로 설치할 수 있습니다.
JBossA-MQ:karaf@root> features:install jasypt-encryption
JBossA-MQ:karaf@root> features:install jasypt-encryption
이 명령은 필수 Jasypt 번들을 설치하고 Jasypt 암호화를 OSGi 서비스로 내보내 JAAS 로그인 모듈에서 사용할 수 있도록 합니다.
Jasypt 암호화에 대한 자세한 내용은 Jasypt 설명서 를 참조하십시오.
2.1.10.5. Jasypt 암호화를 사용하는 로그인 모듈의 예 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 암호는 etc/users.properties
파일에 명확한 형식으로 저장됩니다. jasypt-encryption
기능을 설치하고 etc/org.apache.karaf.jaas.cfg
구성 파일을 수정하여 암호화를 활성화할 수 있습니다.
기능
jasypt-encryption
를 설치합니다. 그러면jasypt
서비스가 설치됩니다.karaf@root> features:install jasypt-encryption
karaf@root> features:install jasypt-encryption
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이제
jaas
명령을 사용하여 사용자를 만들 수 있습니다.$FUSE_HOME/etc/org.apache.karaf.jaas.cfg
파일을 열고 다음과 같이 수정합니다.encryption.enabled = true
,encryption.name = jasypt
를 설정하고 이 경우encryption.algorithm = SHA-256
. 다른encryption.algorithm
옵션을 사용할 수 있으며 요구 사항에 따라 설정할 수 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Karaf 콘솔에
jaas:realms
명령을 입력하여 배포된 로그인 모듈을 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 사용자를 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이제
$FUSE_HOME/etc/users.properties
파일을 보면usertest
사용자가 파일에 추가되었음을 확인할 수 있습니다.admin = {CRYPT}WXX+4PM2G7nT045ly4iS0EANsv9H/VwmStGIb9bcbGhFH5RgMuL0D3H/GVTigpga{CRYPT},_g_:admingroup _g_\:admingroup = group,admin,manager,viewer,systembundles,ssh usertest = {CRYPT}33F5E76E5FF97F3D27D790AAA1BEE36057410CCDBDBE2C792239BB2853D17654315354BB8B608AD5{CRYPT},_g_:admingroup
admin = {CRYPT}WXX+4PM2G7nT045ly4iS0EANsv9H/VwmStGIb9bcbGhFH5RgMuL0D3H/GVTigpga{CRYPT},_g_:admingroup _g_\:admingroup = group,admin,manager,viewer,systembundles,ssh usertest = {CRYPT}33F5E76E5FF97F3D27D790AAA1BEE36057410CCDBDBE2C792239BB2853D17654315354BB8B608AD5{CRYPT},_g_:admingroup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
이미
jaas:update
명령을 실행하므로 다른 터미널에서 새로 생성된 로그인을 테스트할 수 있습니다.
2.1.11. JAAS와 HTTP 기본 인증 통합 링크 복사링크가 클립보드에 복사되었습니다!
Servlet REST를 사용하여 REST DSL을 사용하여 Camel 경로에서 REST 끝점을 정의할 수 있습니다. 다음 예제에서는 HTTP Basic Authentication으로 보호되는 REST 끝점을 Karaf JAAS 서비스에 사용자 인증을 위임하는 방법을 보여줍니다.
절차
CamelInstallDir
에 Apache Camel을 설치했다고 가정하면 다음 디렉터리에서 예를 찾을 수 있습니다.CamelInstallDir/examples/camel-example-servlet-rest-karaf-jaas
CamelInstallDir/examples/camel-example-servlet-rest-karaf-jaas
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Maven을 사용하여 예제를 OSGi 번들로 빌드하고 설치합니다. 명령 프롬프트를 열고 현재 디렉터리를
CamelInstallDir/examples/camel-example-servlet-rest-karaf-jaas
로 전환한 다음 다음 명령을 입력합니다.mvn install
mvn install
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 보안 구성 파일을
KARAF_HOME/etc
폴더에 복사하려면 다음 명령을 입력합니다.cp src/main/resources/org.ops4j.pax.web.context-camelrestdsl.cfg $KARAF_HOME/etc
cp src/main/resources/org.ops4j.pax.web.context-camelrestdsl.cfg $KARAF_HOME/etc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Karaf에 Apache Camel을 설치하려면 Karaf 쉘 콘솔에 다음 명령을 입력합니다.
feature:repo-add camel ${project.version} feature:install camel
feature:repo-add camel ${project.version} feature:install camel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 기능을 설치하려면
camel-servlet
,camel-jackson
및war
Karaf 기능도 필요합니다.feature:install camel-servlet feature:install camel-jackson feature:install war
feature:install camel-servlet feature:install camel-jackson feature:install war
Copy to Clipboard Copied! Toggle word wrap Toggle overflow camel-example-servlet-rest-karaf-jaas
예제를 설치하려면 다음 명령을 입력합니다.install -s mvn:org.apache.camel.example/camel-example-servlet-rest-karaf-jaas/${project.version}
install -s mvn:org.apache.camel.example/camel-example-servlet-rest-karaf-jaas/${project.version}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
결과
애플리케이션이 실행 중인지 확인하려면 다음 명령을 입력하여 애플리케이션 로그 파일을 볼 수 있습니다(로그 후 중지하려면 ctrl+c
사용).
log:tail
log:tail
REST 사용자
끝점은 다음 작업을 지원합니다.
-
GET /user/{id}
- 지정된 ID가 있는 사용자를 보기 -
GET /user/final
- 모든 사용자를 볼 수 있습니다 -
PUT /user
- 사용자를 업데이트/생성
뷰 작업에서는 HTTP GET
을 사용하고 업데이트 작업을 업데이트하여 HTTP PUT
을 사용합니다.
2.1.11.1. 웹 브라우저에서 REST 서비스에 액세스 링크 복사링크가 클립보드에 복사되었습니다!
웹 브라우저에서 다음 예제를 사용하여 서비스에 액세스할 수 있습니다(연락 대화 상자에서 admin
을 사용자로 입력하고 admin
을 암호로 입력해야 함).
예: 사용자 ID 123
http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123
http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123
예: 모든 사용자 나열
http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll
http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll
2.1.11.2. 명령줄에서 REST 서비스에 액세스 링크 복사링크가 클립보드에 복사되었습니다!
명령줄에서 다음 예와 같이 curl
을 사용하여 REST 사용자
엔드포인트에 액세스할 수 있습니다.
예: 사용자 ID 123
curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123
curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123
예: 모든 사용자 보기
curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll
curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll
예: 사용자 ID 234 만들기 또는 업데이트
curl -X PUT -d "{ \"id\": 234, \"name\": \"John Smith\"}" -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user
curl -X PUT -d "{ \"id\": 234, \"name\": \"John Smith\"}" -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user
2.2. 역할 기반 액세스 제어 링크 복사링크가 클립보드에 복사되었습니다!
초록
이 섹션에서는 Karaf 컨테이너에서 기본적으로 활성화되어 있는 RBAC(역할 기반 액세스 제어) 기능에 대해 설명합니다. 표준 역할(예: 관리자 또는
) 중 하나를 사용자의 자격 증명에 추가하여 RBAC 기능을 즉시 활용할 수 있습니다. 고급 용도의 경우 각 역할이 수행할 수 있는 작업을 정확하게 제어하기 위해 액세스 제어 목록을 사용자 지정할 수 있는 옵션이 있습니다. 마지막으로 사용자 정의 ACL을 자체 OSGi 서비스에 적용하는 옵션이 있습니다.
관리자
2.2.1. 역할 기반 액세스 제어 개요 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Fuse 역할 기반 액세스 제어는 Fuse 관리 콘솔, Cryostat 연결 및 Karaf 명령 콘솔을 통해 액세스를 보호합니다. 기본 수준의 액세스 제어를 사용하려면 사용자 인증 데이터에 표준 역할을 추가합니다(예: users.properties
파일을 편집하여). 또한 관련 ACL(액세스 제어 목록) 파일을 편집하여 액세스 제어를 사용자 지정할 수도 있습니다.
2.2.1.1. 메커니즘 링크 복사링크가 클립보드에 복사되었습니다!
Karaf의 역할 기반 액세스 제어는 다음과 같은 메커니즘을 기반으로 합니다.
- Cryostat Guard
- Karaf 컨테이너는 들어오는 모든 Cryostat 호출을 가로채고 구성된 Cryostat 액세스 제어 목록을 통해 호출을 필터링하는 Cryostat 가드로 구성됩니다. Cryostat 가드는 JVM 수준에서 구성되므로 예외 없이 모든 Cryostat 호출을 가로챌 수 있습니다.
- OSGi Service Guard
- 모든 OSGi 서비스의 경우 OSGi 서비스 가드를 구성할 수 있습니다. OSGi 서비스 가드는 클라이언트와 원래 OSGi 서비스 간에 교차하는 프록시 오브젝트로 구현됩니다. 각 OSGi 서비스에 대해 OSGi 서비스 가드를 명시적으로 구성해야 합니다. 기본적으로 설치되지 않습니다(카운트 콘솔 명령을 나타내는 OSGi 서비스 제외).
2.2.1.2. 보호의 종류 링크 복사링크가 클립보드에 복사되었습니다!
역할 기반 액세스 제어의 Fuse 구현은 다음과 같은 유형의 보호 기능을 제공할 수 있습니다.
- Fuse 콘솔(Hawtio)
- Fuse 콘솔(Hawtio)을 통한 컨테이너 액세스는 Cryostat ACL 파일에 의해 제어됩니다. Fuse Console을 제공하는 REST/HTTP 서비스는 Jolokia 기술을 사용하여 구현되며, 위의 계층이 됩니다. 따라서 궁극적으로 모든 Fuse Console 호출은 Cryostat를 통과하고 Cryostat ACL에 의해 규제됩니다.
- JMX
- Karaf 컨테이너의 Cryostat 포트에 대한 직접 액세스는 Cryostat ACL에 의해 규제됩니다. 또한 Karaf 컨테이너에서 실행 중인 애플리케이션에서 열어 둔 추가 Cryostat 포트도 JVM 수준에서 설정되므로 Cryostat ACL에 의해 규제됩니다.
- Karaf 명령 콘솔
Karaf 명령 콘솔에 대한 액세스는 콘솔 ACL 파일에 의해 규제됩니다. Karaf 콘솔에 액세스하는 방법에 관계없이 액세스 제어가 적용됩니다. Fuse Console을 통해 명령 콘솔에 액세스하든 SSH 프로토콜을 통해 액세스 제어가 두 경우 모두 적용됩니다.
참고명령줄에서 Karaf 컨테이너를 직접 시작하고(예:
./bin/fuse
스크립트 사용) 사용자 인증이 수행되지 않는 특수한 경우etc/system.properties
파일의karaf.local.roles
속성에 의해 지정된 역할을 자동으로 가져옵니다.- OSGi 서비스
- Karaf 컨테이너에 배포된 모든 OSGi 서비스의 경우 선택적으로 ACL 파일을 활성화하여 특정 역할에 대한 메서드 호출을 제한할 수 있습니다.
2.2.1.3. 사용자 역할 추가 링크 복사링크가 클립보드에 복사되었습니다!
역할 기반 액세스 제어 시스템에서 사용자 인증 데이터에 역할을 추가하여 사용자에게 권한을 부여할 수 있습니다. 예를 들어 etc/users.properties
파일의 다음 항목은 admin
사용자를 정의하고 admin
역할을 부여합니다.
admin = secretpass,group,admin,manager,viewer,systembundles,ssh
admin = secretpass,group,admin,manager,viewer,systembundles,ssh
또한 사용자 그룹을 정의한 다음 특정 사용자 그룹에 사용자를 할당할 수도 있습니다. 예를 들어 다음과 같이 admingroup
사용자 그룹을 정의하고 사용할 수 있습니다.
admin = secretpass, _g_:admingroup _g_\:admingroup = group,admin,manager,viewer,systembundles,ssh
admin = secretpass, _g_:admingroup
_g_\:admingroup = group,admin,manager,viewer,systembundles,ssh
사용자 그룹은 모든 유형의 JAAS 로그인 모듈에서 지원되지 않습니다.
2.2.1.4. 표준 역할 링크 복사링크가 클립보드에 복사되었습니다!
표 2.2. “액세스 제어를 위한 표준 역할” Cryostat ACL 및 명령 콘솔 ACL 전체에서 사용되는 표준 역할을 나열하고 설명합니다.
역할 | 설명 |
---|---|
| Karaf 컨테이너에 대한 읽기 전용 액세스 권한을 부여합니다. |
| 애플리케이션을 배포 및 실행하려는 일반 사용자에게 적절한 수준에서 읽기-쓰기 액세스 권한을 부여합니다. 그러나 중요한 Karaf 컨테이너 구성 설정에 대한 액세스를 차단합니다. |
| Karaf 컨테이너에 대한 무제한 액세스 권한을 부여합니다. |
| 사용자에게 Karaf 명령 콘솔(ssh 포트를 통해)에 연결할 수 있는 권한을 부여합니다. |
2.2.1.5. ACL 파일 링크 복사링크가 클립보드에 복사되었습니다!
표준 ACL 파일 세트는 다음과 같이 Fuse 설치의 etc/auth/
디렉터리에 있습니다.
etc/auth/jmx.acl[.*].cfg
- Cryostat ACL 파일.
etc/auth/org.apache.karaf.command.acl.*.cfg
- 명령 콘솔 ACL 파일.
2.2.1.6. 역할 기반 액세스 제어 사용자 정의 링크 복사링크가 클립보드에 복사되었습니다!
전체 Cryostat ACL 파일 세트 및 명령 콘솔 ACL 파일은 기본적으로 제공됩니다. 시스템 요구 사항에 맞게 필요에 따라 이러한 ACL을 사용자 지정할 수 있습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 다음 섹션에서 확인할 수 있습니다.
2.2.1.7. 액세스 제어를 위한 추가 속성 링크 복사링크가 클립보드에 복사되었습니다!
etc
디렉토리 아래의 system.properties
파일은 Karaf 명령 콘솔 및 Fuse 콘솔(Hawtio)을 통해 액세스를 제어하기 위해 다음과 같은 추가 속성을 제공합니다.
karaf.local.roles
- 사용자가 Karaf 컨테이너 콘솔을 로컬 로 시작할 때 적용되는 역할을 지정합니다(예: 스크립트 실행).
hawtio.roles
- Fuse 콘솔을 통해 Karaf 컨테이너에 액세스할 수 있는 역할을 지정합니다. 이 제약 조건은 Cryostat ACL 파일에서 정의한 액세스 제어 외에도 적용됩니다.
karaf.secured.command.compulsory.roles
-
Karaf console 명령을 호출하는 데 필요한 기본 역할을 지정합니다. console 명령이 명령 ACL 파일에 의해 명시적으로 구성되지 않은 경우
etc/auth/org.apache.karaf.command.acl.*.cfg
.cfg .cfg . 명령을 호출하려면 목록에서 역할 중 하나 이상을 사용하여 사용자를 구성해야 합니다. 값은 쉼표로 구분된 역할 목록으로 지정됩니다.
2.2.2. Cryostat ACL 사용자 지정 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat ACL은 OSGi Config Admin Service에 저장되며 일반적으로 etc/auth/jmx.acl.*.cfg
.cfg 파일로 액세스할 수 있습니다. 이 섹션에서는 이러한 파일을 직접 편집하여 Cryostat ACL을 사용자 지정하는 방법을 설명합니다.
2.2.2.1. 아키텍처 링크 복사링크가 클립보드에 복사되었습니다!
그림 2.1. “Access Control Mechanism for Cryostat” Karaf 컨테이너에 대한 Cryostat 연결에 대한 역할 기반 액세스 제어 메커니즘에 대한 개요를 보여줍니다.
그림 2.1. Access Control Mechanism for Cryostat
2.2.2.2. 작동 방식 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat 액세스 제어는 특수 javax.management.MBeanServer
오브젝트를 통해 Cryostat에 대한 원격 액세스를 제공하여 작동합니다. 이 오브젝트는 org.apache.karaf.management.KarafMBeanServerGuard
오브젝트를 호출하여 프록시 역할을 합니다. Cryostat 가드는 시작 파일에서 특별한 구성없이 사용할 수 있습니다.
Cryostat 액세스 제어는 다음과 같이 적용됩니다.
- 로컬이 아닌 모든 호출에 대해 Cryostat 가드를 실제 호출 전에 호출됩니다.
- Cryostat Guard는 사용자가 액세스하려고 하는 경우(이 경우 ACL이 OSGi Config Admin 서비스에 저장된)에 대한 관련 ACL을 조회합니다.
- ACL은 특정 호출을 수행할 수 있는 역할 목록을 반환합니다.
- Cryostat Guard는 현재 보안 주체에 대한 역할 목록을 확인하여 현재 사용자에게 필요한 역할이 있는지 여부를 확인합니다.
-
일치하는 역할이 없는 경우 Cryostat 호출이 차단되고
SecurityException
이 발생합니다.
2.2.2.3. Cryostat ACL 파일의 위치 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat ACL 파일은 InstallDir/etc/auth
디렉터리에 있습니다. 여기서 ACL 파일 이름은 다음 규칙을 따릅니다.
etc/auth/jmx.acl[.*].cfg
etc/auth/jmx.acl[.*].cfg
기술적으로 ACL은 패턴 jmx.acl[.*]
과 일치하는 OSGi 영구 ID(PID)에 매핑됩니다. 이는 Karaf 컨테이너가 기본적으로 etc/
디렉터리 아래에 OSGi PID를 파일 PID.cfg
로 저장하는 것입니다.
2.2.2.4. ACL 파일 이름에 Cryostat 매핑 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat Guard는 Cryostat를 통해 액세스하는 모든 Cryostat 클래스에 액세스 제어를 적용합니다(사용자의 애플리케이션 코드에서 정의한 모든 Cryostat 포함). 특정 Cryostat 클래스의 ACL 파일은 jmx.acl
접두사를 추가하여 Cryostat의 오브젝트 이름에서 파생됩니다. 예를 들어 org.apache.camel:type=context
에서 Object Name이 지정하는 Cryostat가 있는 경우 해당 PID는 다음과 같습니다.
jmx.acl.org.apache.camel.context
jmx.acl.org.apache.camel.context
OSGi Config Admin 서비스는 이 PID 데이터를 다음 파일에 저장합니다.
etc/auth/jmx.acl.org.apache.camel.context.cfg
etc/auth/jmx.acl.org.apache.camel.context.cfg
2.2.2.5. ACL 파일 형식 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat ACL 파일의 각 줄은 다음 형식의 항목입니다.
Pattern = Role1[,Role2][,Role3]...
Pattern = Role1[,Role2][,Role3]...
여기서 Pattern
은 ScanSetting의 메서드 호출과 일치하는 패턴이며, 등호 오른쪽은 사용자에게 해당 호출을 수행할 수 있는 권한을 부여하는 쉼표로 구분된 역할 목록입니다. 가장 간단한 경우 Pattern
은 단순히 메서드 이름입니다. 예를 들어 jmx.acl.hawtio.OSGiTools
Cryostat에 대한 다음 설정과 마찬가지로 ( jmx.acl.hawtio.OSGiTools.cfg
파일에서)
getResourceURL = admin, manager, viewer getLoadClassOrigin = admin, manager, viewer
getResourceURL = admin, manager, viewer
getLoadClassOrigin = admin, manager, viewer
와일드카드 문자 *
를 사용하여 여러 메서드 이름과 일치시킬 수도 있습니다. 예를 들어 다음 항목은 set
로 시작하는 모든 메서드 이름을 호출할 수 있는 권한을 부여합니다.
set* = admin, manager, viewer
set* = admin, manager, viewer
그러나 ACL 구문은 메서드 호출에 대한 훨씬 더 세분화된 제어를 정의할 수 있습니다. 특정 인수와 함께 호출된 메서드 또는 정규식과 일치하는 인수와 일치하도록 패턴을 정의할 수 있습니다. 예를 들어 org.apache.karaf.config
에 대한 ACL은 일반 사용자가 민감한 구성 설정을 수정하지 못하도록 이 기능을 악용합니다. 이 패키지의 create
방법은 다음과 같이 제한됩니다.
create(java.lang.String)[/jmx[.]acl.*/] = admin create(java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/] = admin create(java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/] = admin create(java.lang.String) = admin, manager
create(java.lang.String)[/jmx[.]acl.*/] = admin
create(java.lang.String)[/org[.]apache[.]karaf[.]command[.]acl.+/] = admin
create(java.lang.String)[/org[.]apache[.]karaf[.]service[.]acl.+/] = admin
create(java.lang.String) = admin, manager
이 경우 manager
역할에는 일반적으로 create
메서드를 호출할 수 있는 권한이 있지만 admin
역할만 jmx.acl.*
, org.apache.karaf.command.acl.*
또는 org.apache.karaf.service.*
와 일치하는 PID 인수를 사용하여 create
를 호출할 수 있는 권한이 있습니다.
ACL 파일 형식에 대한 자세한 내용은 etc/auth/jmx.acl.cfg
파일의 주석을 참조하십시오.
2.2.2.6. ACL 파일 계층 구조 링크 복사링크가 클립보드에 복사되었습니다!
모든 단일 Cryostat에 대해 ACL 파일을 제공하는 것이 비실용적인 경우가 많으므로 해당 패키지의 모든 Cryostat에 대한 기본 설정을 제공하는 Java 패키지 수준에서 ACL 파일을 지정하는 옵션이 있습니다. 예를 들어 org.apache.cxf.Bus
Cryostat는 다음 PID 수준에서 ACL 설정의 영향을 받을 수 있습니다.
jmx.acl.org.apache.cxf.Bus jmx.acl.org.apache.cxf jmx.acl.org.apache jmx.acl.org jmx.acl
jmx.acl.org.apache.cxf.Bus
jmx.acl.org.apache.cxf
jmx.acl.org.apache
jmx.acl.org
jmx.acl
가장 구체적인 PID(list의 상단)가 최소 특정 PID(list의 봇)보다 우선합니다.
2.2.2.7. 루트 ACL 정의 링크 복사링크가 클립보드에 복사되었습니다!
루트 ACL 파일인 jmx.acl.cfg
는 모든 Cryostat에 대한 기본 ACL 설정을 제공하므로 특별한 경우입니다. 루트 ACL에는 기본적으로 다음과 같은 설정이 있습니다.
list* = admin, manager, viewer get* = admin, manager, viewer is* = admin, manager, viewer set* = admin * = admin
list* = admin, manager, viewer
get* = admin, manager, viewer
is* = admin, manager, viewer
set* = admin
* = admin
이는 일반적인 읽기 방법 패턴(list*
, get*
, is*
)은 모든 표준 역할에서 액세스할 수 있지만 일반적인 쓰기 방법 패턴 및 기타 메서드(설정* 및
)는 관리자 역할인 \*
admin
에서만 액세스할 수 있습니다.
2.2.2.8. 패키지 ACL 정의 링크 복사링크가 클립보드에 복사되었습니다!
etc/auth/jmx.acl[.*].cfg
에 제공된 표준 Cryostat ACL 파일의 대부분은 Cryostat 패키지에 적용됩니다. 예를 들어 org.apache.camel.endpoints
에 대한 ACL은 다음 권한으로 정의됩니다.
is* = admin, manager, viewer get* = admin, manager, viewer set* = admin, manager
is* = admin, manager, viewer
get* = admin, manager, viewer
set* = admin, manager
2.2.2.9. 사용자 지정 Cryostat에 대한 ACL 링크 복사링크가 클립보드에 복사되었습니다!
자체 애플리케이션에서 사용자 지정 Cryostat를 정의하는 경우 이러한 사용자 지정 Cryostat는 ACL 메커니즘과 자동으로 통합되고 Karaf 컨테이너에 배포할 때 Cryostat Guard에 의해 보호됩니다. 그러나 기본적으로 your Cryostat는 일반적으로 기본 루트 ACL 파일인 jmx.acl.cfg
에서만 보호됩니다. 보다 세분화된 ACL을 정의하려면 표준 Cryostat ACL 파일 이름 지정 규칙을 사용하여 etc/auth
아래에 새 ACL 파일을 만듭니다.
예를 들어 사용자 지정 Cryostat 클래스에 Cryostat 개체 이름, org.example:type=MyMBean
이 있는 경우 etc/auth
디렉터리에 새 ACL 파일을 생성합니다.
jmx.acl.org.example.MyMBean.cfg
jmx.acl.org.example.MyMBean.cfg
2.2.2.10. 런타임에 동적 구성 링크 복사링크가 클립보드에 복사되었습니다!
OSGi Config Admin 서비스는 동적이므로 시스템이 실행되는 동안 ACL 설정을 변경할 수 있으며 특정 사용자가 로그인되는 경우에도 변경할 수 있습니다. 따라서 시스템이 실행되는 동안 보안 위반을 발견하면 Karaf 컨테이너를 다시 시작할 필요 없이 관련 ACL 파일을 편집하여 시스템의 특정 부분에 대한 액세스를 즉시 제한할 수 있습니다.
2.2.3. 명령 콘솔 ACL 사용자 정의 링크 복사링크가 클립보드에 복사되었습니다!
명령 콘솔 ACL은 OSGi Config Admin Service에 저장되며 일반적으로 etc/auth/org.apache.karaf.command.acl.*.cfg
.cfg .cfg 로 액세스할 수 있습니다. 이 섹션에서는 이러한 파일을 직접 편집하여 명령 콘솔 ACL을 사용자 지정하는 방법을 설명합니다.
2.2.3.1. 아키텍처 링크 복사링크가 클립보드에 복사되었습니다!
그림 2.2. “OSGi 서비스의 제어 메커니즘 액세스” Karaf 컨테이너의 OSGi 서비스에 대한 역할 기반 액세스 제어 메커니즘에 대한 개요를 보여줍니다.
그림 2.2. OSGi 서비스의 제어 메커니즘 액세스
2.2.3.2. 작동 방식 링크 복사링크가 클립보드에 복사되었습니다!
실제로 명령 콘솔 액세스 제어 메커니즘은 OSGi 서비스의 일반 액세스 제어 메커니즘을 기반으로 합니다. 따라서 콘솔 명령이 구현되고 OSGi 서비스로 노출됩니다. Karaf 콘솔 자체는 OSGi 서비스 레지스트리를 통해 사용 가능한 명령을 검색하고 OSGi 서비스로 명령에 액세스합니다. 따라서 OSGi 서비스의 액세스 제어 메커니즘을 사용하여 콘솔 명령에 대한 액세스를 제어할 수 있습니다.
OSGi 서비스 보안을 위한 메커니즘은 OSGi 서비스 레지스트리 후크를 기반으로 합니다. 이는 특정 소비자의 OSGi 서비스를 숨기고 OSGi 서비스를 프록시 서비스로 교체할 수 있는 고급 OSGi 기능입니다.
서비스 가 특정 OSGi 서비스에 대해 배치되면 OSGi 서비스에서 클라이언트 호출이 다음과 같이 진행됩니다.
- 호출은 요청된 OSGi 서비스로 직접 이동하지 않습니다. 대신 요청은 원래 서비스와 동일한 서비스 속성(및 일부 추가)이 있는 대체 프록시 서비스로 라우팅됩니다.
- 서비스 가드에서 대상 OSGi 서비스에 대한 관련 ACL을 조회합니다(이 경우 ACL이 OSGi Config Admin 서비스에 저장된 위치).
- ACL은 이 특정 메서드 호출을 서비스에서 수행할 수 있는 역할 목록을 반환합니다.
-
이 명령에 대한 ACL을 찾을 수 없는 경우 서비스 가 기본적으로
etc/system.properties
파일의karaf.secured.command.compulsory.roles
속성에 지정된 역할 목록으로 설정됩니다. - 서비스 가드에서 현재 보안 주체에 대해 역할 목록을 확인하여 현재 사용자에게 필요한 역할이 있는지 여부를 확인합니다.
-
일치하는 역할이 없는 경우 메서드 호출이 차단되고
SecurityException
이 발생합니다. - 또는 일치하는 역할이 있으면 메서드 호출이 원래 OSGi 서비스에 위임됩니다.
2.2.3.3. 기본 보안 역할 구성 링크 복사링크가 클립보드에 복사되었습니다!
해당 ACL 파일이 없는 명령에 대해 etc/system.properties
파일에서 karaf.secured.command.compulsory.roles
속성을 설정하여 보안 역할의 기본 목록을 지정합니다(콤마로 구분된 역할 목록으로 지정됨).
2.2.3.4. 명령 콘솔 ACL 파일의 위치 링크 복사링크가 클립보드에 복사되었습니다!
명령 콘솔 ACL 파일은 InstallDir/etc/auth
디렉터리에 있으며 접두사 org.apache.karaf.command.acl
.
2.2.3.5. 명령 범위를 ACL 파일 이름에 매핑 링크 복사링크가 클립보드에 복사되었습니다!
명령 콘솔 ACL 파일 이름은 다음 규칙을 따릅니다.
etc/auth/org.apache.karaf.command.acl.CommandScope.cfg
etc/auth/org.apache.karaf.command.acl.CommandScope.cfg
여기서 CommandScope
는 특정 Karaf 콘솔 명령의 접두사에 해당합니다. 예를 들어
및 feature
:installfeatures:uninstall
명령은 해당 ACL 파일 org.apache.karaf.command.acl.features.cfg
가 있는 feature 명령 범위에 속합니다.
2.2.3.6. ACL 파일 형식 링크 복사링크가 클립보드에 복사되었습니다!
명령 콘솔 ACL 파일의 각 줄은 다음 형식의 항목입니다.
Pattern = Role1[,Role2][,Role3]...
Pattern = Role1[,Role2][,Role3]...
여기서 Pattern
은 현재 명령 범위의 Karaf console 명령과 일치하는 패턴이며 등호 오른쪽은 사용자가 해당 호출을 수행할 수 있는 권한을 부여하는 쉼표로 구분된 역할 목록입니다. 가장 간단한 경우 Pattern
은 단순히 범위가 지정되지 않은 명령 이름입니다. 예를 들어 org.apache.karaf.command.acl.feature.cfg
ACL 파일에는 기능
명령에 대한 다음 규칙이 포함됩니다.
특정 명령 이름에 일치하는 항목이 없는 경우 이 명령에 역할이 필요하지 않으며 모든 사용자가 호출할 수 있다고 가정합니다.
특정 인수와 함께 호출된 명령 또는 정규식과 일치하는 인수와 일치하도록 패턴을 정의할 수도 있습니다. 예를 들어 org.apache.karaf.command.acl.bundle.cfg
ACL 파일은 일반 사용자가 -f
(force) 플래그를 사용하여 bundle:start
및 bundle:stop
명령을 호출하지 못하도록 합니다(시스템 번들을 관리하도록 지정해야 함). 이 제한은 ACL 파일에서 다음과 같이 코딩됩니다.
start[/.*[-][f].*/] = admin start = admin, manager stop[/.*[-][f].*/] = admin stop = admin, manager
start[/.*[-][f].*/] = admin
start = admin, manager
stop[/.*[-][f].*/] = admin
stop = admin, manager
이 경우 manager
역할에는 일반적으로 bundle:start
및 bundle:stop
명령을 호출할 수 있는 권한이 있지만 admin
역할만 force 옵션 -f
를 사용하여 이러한 명령을 호출할 수 있는 권한이 있습니다.
ACL 파일 형식에 대한 자세한 내용은 etc/auth/org.apache.karaf.command.acl.bundle.cfg
파일에서 주석을 참조하십시오.
2.2.3.7. 런타임에 동적 구성 링크 복사링크가 클립보드에 복사되었습니다!
명령 콘솔 ACL 설정은 완전히 동적이므로 시스템이 실행되는 동안 ACL 설정을 변경할 수 있으며 변경 사항은 이미 로그인한 사용자에게도 몇 초 내에 적용됩니다.
2.2.4. OSGi 서비스에 대한 ACL 정의 링크 복사링크가 클립보드에 복사되었습니다!
모든 OSGi 서비스(시스템 수준 또는 애플리케이션 수준)에 대한 사용자 지정 ACL을 정의할 수 있습니다. 기본적으로 OSGi 서비스에는 액세스 제어가 활성화되지 않습니다(명령 콘솔 ACL 파일로 미리 구성된 Karaf 콘솔 명령을 노출하는 OSGi 서비스 제외). 이 섹션에서는 OSGi 서비스에 대한 사용자 지정 ACL을 정의하는 방법과 지정된 역할을 사용하여 해당 서비스에서 메서드를 호출하는 방법을 설명합니다.
2.2.4.1. ACL 파일 형식 링크 복사링크가 클립보드에 복사되었습니다!
OSGi 서비스 ACL 파일에는 다음과 같이 이 ACL이 적용되는 OSGi 서비스를 식별하는 특수 항목이 한 개 있습니다.
service.guard = (objectClass=InterfaceName)
service.guard = (objectClass=InterfaceName)
여기서 service.guard
는 일치하는 OSGi 서비스를 선택하기 위해 OSGi 서비스 속성의 레지스트리에 적용되는 LDAP 검색 필터입니다. 가장 간단한 유형의 필터 (objectClass=InterfaceName)
는 지정된 Java 인터페이스 이름 InterfaceName
을 사용하여 OSGi 서비스를 선택합니다.
ACL 파일의 나머지 항목은 다음과 같습니다.
Pattern = Role1[,Role2][,Role3]...
Pattern = Role1[,Role2][,Role3]...
Pattern
은 서비스 방법과 일치하는 패턴이며 등호 오른쪽은 사용자에게 해당 호출을 수행할 수 있는 권한을 부여하는 쉼표로 구분된 역할 목록입니다. 이러한 항목의 구문은 기본적으로 Cryostat ACL 파일의 항목과 동일합니다. “ACL 파일 형식” 을 참조하십시오.
2.2.4.2. 사용자 지정 OSGi 서비스에 대한 ACL을 정의하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
사용자 지정 OSGi 서비스에 대한 ACL을 정의하려면 다음 단계를 수행합니다.
Java 인터페이스를 사용하여 OSGi 서비스를 정의하는 것이 일반적입니다(일반 Java 클래스를 사용할 수 있지만 권장되지 않음). 예를 들어 OSGi 서비스로 노출하려는 Java 인터페이스
MyService
를 고려해 보십시오.package org.example; public interface MyService { void doit(String s); }
package org.example; public interface MyService { void doit(String s); }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Java 인터페이스를 OSGi 서비스로 노출하려면 일반적으로 OSGi 블루프린트 XML 파일에
service
요소를 추가합니다. 블루프린트 XML 파일은 일반적으로 Maven 프로젝트의src/main/resources/OSGI-INF/blueprint
디렉터리에 저장됩니다. 예를 들어MyService
ImplMyService
OSGi 서비스를 노출할 수 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSGi 서비스에 대한 ACL을 정의하려면
org.apache.karaf.service.acl
접두사를 사용하여 OSGi Config Admin PID를 생성해야 합니다.예를 들어, Karaf 컨테이너(OSGi Config Admin PID)가
etc/auth/
디렉터리에.cfg
파일로 저장된 경우MyService
OSGi 서비스에 대해 다음 ACL 파일을 생성할 수 있습니다.etc/auth/org.apache.karaf.service.acl.myservice.cfg
etc/auth/org.apache.karaf.service.acl.myservice.cfg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고필요한 접두사인
org.apache.karaf.acl
로 시작하는 한 이 파일의 이름을 정확하게 지정하는 것은 중요하지 않습니다. 이 ACL 파일의 해당 OSGi 서비스는 실제로 이 파일의 속성 설정에 의해 지정됩니다(다음 단계에서 볼 수 있음).ACL 파일의 내용을 다음과 같은 형식으로 지정합니다.
service.guard = (objectClass=InterfaceName) Pattern = Role1[,Role2][,Role3]...
service.guard = (objectClass=InterfaceName) Pattern = Role1[,Role2][,Role3]...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow service.guard
설정은 OSGi 서비스의InterfaceName
을 지정합니다(OSGi 서비스 속성에 적용되는 LDAP 검색 필터의 구문 사용). ACL 파일의 다른 항목은 일치하는 방법을 지정된 역할에 연결하는패턴
메서드로 구성됩니다. 예를 들어org.apache.karaf.service.acl.myservice.cfg
파일에서 다음 설정을 사용하여MyService
OSGi 서비스에 대한 간단한 ACL을 정의할 수 있습니다.service.guard = (objectClass=org.example.MyService) doit = admin, manager, viewer
service.guard = (objectClass=org.example.MyService) doit = admin, manager, viewer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 마지막으로 이 OSGi 서비스에 대한 ACL을 활성화하려면
etc/system.properties
파일에서karaf.secured.services
속성을 편집해야 합니다.karaf.secured.services
속성의 값에는 LDAP 검색 필터 구문이 있습니다(OSGi 서비스 속성에 적용됨). 일반적으로 OSGi 서비스인ServiceInterface
에 대해 ACL을 활성화하려면 다음과 같이 이 속성을 수정해야 합니다.karaf.secured.services=(|(objectClass=ServiceInterface)(...ExistingPropValue...))
karaf.secured.services=(|(objectClass=ServiceInterface)(...ExistingPropValue...))
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어
MyService
OSGi 서비스를 활성화하려면 다음을 수행합니다.karaf.secured.services=(|(objectClass=org.example.MyService)(&(osgi.command.scope=*)(osgi.command.function=*)))
karaf.secured.services=(|(objectClass=org.example.MyService)(&(osgi.command.scope=*)(osgi.command.function=*)))
Copy to Clipboard Copied! Toggle word wrap Toggle overflow karaf.secured.services
속성의 초기 값에는 명령 콘솔 ACL을 활성화하는 설정이 있습니다. 이러한 항목을 삭제하거나 손상시키면 명령 콘솔 ACL이 작동하지 않을 수 있습니다.
2.2.4.3. RBAC로 보안된 OSGi 서비스를 호출하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
사용자 지정 OSGi 서비스(즉, OSGi 서비스의 클라이언트 구현)에서 메서드를 호출하기 위해 Java 코드를 작성하는 경우 Java 보안 API를 사용하여 서비스를 호출하는 데 사용 중인 역할을 지정해야 합니다. 예를 들어 manager
역할을 사용하여 MyService
OSGi 서비스를 호출하려면 다음과 같은 코드를 사용할 수 있습니다.
이 예에서는 Karaf 역할 유형 org.apache.karaf.jaas.boot.principal.RolePrincipal
를 사용합니다. 필요한 경우 고유한 사용자 지정 역할 클래스를 대신 사용할 수 있지만, 이 경우 OSGi 서비스의 ACL 파일에서 className:roleName
구문을 사용하여 역할을 지정해야 합니다.
2.2.4.4. OSGi 서비스에 필요한 역할을 검색하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
ACL로 보안된 OSGi 서비스에 대해 코드를 작성하는 경우 서비스를 호출할 수 있는 역할을 확인하는 것이 유용할 수 있습니다. 이를 위해 프록시 서비스는 추가 OSGi 속성 org.apache.karaf.service.guard.roles
를 내보냅니다. 이 속성의 값은 해당 서비스에서 메서드를 호출할 수 있는 모든 역할 목록을 포함하는 java.util.Collection
개체입니다.
2.3. 암호화된 속성 위치 소유자 사용 방법 링크 복사링크가 클립보드에 복사되었습니다!
Karaf 컨테이너를 보호하는 경우 구성 파일에 일반 텍스트 암호를 사용하지 마십시오. 일반 텍스트 암호를 사용하지 않는 한 가지 방법은 가능한 경우 암호화된 속성 자리 표시자를 사용하는 것입니다. 자세한 내용은 다음 항목을 참조하십시오.
2.3.1. 값을 암호화하기 위한 마스터 암호 정보 링크 복사링크가 클립보드에 복사되었습니다!
Jasypt를 사용하여 값을 암호화하려면 마스터 암호가 필요합니다. 마스터 암호를 선택하는 것은 귀하 또는 관리자에게 달려 있습니다. Jasypt는 마스터 암호를 설정하는 몇 가지 방법을 제공합니다.
한 가지 방법은 블루프린트 구성에서 일반 텍스트로 마스터 암호를 지정하는 것입니다. 예를 들면 다음과 같습니다.
일반 텍스트로 마스터 암호를 지정하는 대신 다음 중 하나를 수행할 수 있습니다.
환경 변수를 마스터 암호로 설정합니다. 블루프린트 구성 파일에서 이 환경 변수를
passwordEnvName
속성 값으로 지정합니다. 예를 들어MASTER_PW
환경 변수를 마스터 암호로 설정하면 블루프린트 구성 파일에 이 항목이 있습니다.<property name="passwordEnvName" value="MASTER_PW">
Karaf 시스템 속성을 마스터 암호로 설정합니다. 블루프린트 구성 파일에서 이 시스템 속성을
passwordSys
속성 값으로 지정합니다. 예를 들어karaf.password
시스템 속성을 마스터 암호로 설정하면 블루프린트 구성 파일에 이 항목이 있습니다.<property name="passwordSys" value="karaf.password">
2.3.2. 암호화된 속성 자리 표시자 사용 링크 복사링크가 클립보드에 복사되었습니다!
Karaf 컨테이너를 보호할 때 블루프린트 구성 파일에서 암호화된 속성 자리 표시자를 사용합니다.
사전 요구 사항
- 값을 암호화하기 위한 마스터 암호를 알고 있습니다.
절차
기본 암호화 알고리즘인
PBEWithMD5AndDES
를 사용하거나 다음과 같이 사용할 암호화 알고리즘을 선택합니다.jasypt:list-algorithms
명령을 실행하여 현재 Java 환경에서 지원되는 알고리즘을 확인합니다.karaf@root()> jasypt:list-algorithms
karaf@root()> jasypt:list-algorithms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인수 또는 옵션이 없습니다. 출력은 지원되는 다이제스트 및 PBE(암호 기반 암호화) 알고리즘에 대한 식별자 목록입니다. 목록에는 Bouncy Castle 라이브러리에서 제공하는 알고리즘이 포함되어 있으며 Fuse 7.11의 일부입니다. 이 목록은 길 수 있습니다. 이 중 일부는 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 목록을 검사하고 사용하려는 암호화 알고리즘의 식별자를 찾습니다. 알고리즘을 선택하는 데 도움이 되도록 사이트의 보안 전문가와 상의할 수 있습니다.
구성 파일에서 사용할 암호와 같은 중요한 구성 값을 암호화하려면
jasypt:encrypt
명령을 실행합니다. 명령의 형식은 다음과 같습니다.jasypt:encrypt [options] [input]
옵션을 지정하지 않고 이 명령을 호출하고 암호화할 값을 지정하지 않으면 명령에서 마스터 암호를 입력하라는 메시지를 표시하고 값을 암호화하고 다른 옵션에 기본값을 적용합니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 암호화하려는 각 값에 대해
jasypt:encrypt
명령을 호출합니다.기본 동작을 변경하려면 다음 옵션 중 하나 이상을 지정합니다.
Expand 옵션 설명 예제 -w
또는--password-property
환경 변수 또는 마스터 암호 값으로 설정된 시스템 속성을 사용하여 이 옵션을 따릅니다. Jasypt는 암호화 알고리즘과 함께 이 값을 사용하여 암호화 키를 파생합니다.
명령을 호출한 후
-w
또는-W
옵션을 지정하지 않으면 마스터 암호를 입력하고 확인하라는 메시지를 표시합니다.-W MASTER_PW
-
w 또는--password
선택한 마스터 암호의 일반 텍스트 값을 사용하여 이 옵션을 따르십시오. 마스터 암호의 일반 텍스트 값이 기록에 표시됩니다.
Jasypt는 암호화 알고리즘과 함께 이 값을 사용하여 암호화 키를 파생합니다.
명령을 호출한 후
-w
또는-W
옵션을 지정하지 않으면 마스터 암호를 입력하고 확인하라는 메시지를 표시합니다.-W "M@s!erP#"
-a
또는--algorithm
jasypt:encrypt
명령이 초기 암호화 키를 파생하는 데 사용할 알고리즘의 식별자로 이 옵션을 따릅니다. 기본값은PBEWithMD5AndDES
입니다.목록에
jasypt-list-algorithms
명령 출력이 지원되는 모든 알고리즘이 지원됩니다. 명령줄에서 알고리즘 이름을 지정할 때 자동 완성을 사용할 수 있습니다.예:
-a PBEWITHMD5ANDRC2
-i
또는--iterations
초기 키의 해시를 반복적으로 생성하는 횟수를 나타내는 정수를 사용하여 이 옵션을 따릅니다. 각 반복은 이전 해시 결과를 가져와서 다시 해시합니다. 결과는 최종 암호화 키입니다. 기본값은 1000입니다.
예:
-i 5000
-h
또는--hex
16진수 출력을 얻으려면 이 옵션을 지정합니다. 기본 출력은 Base64입니다.
예:
-h
--help
명령 구문 및 옵션에 대한 정보를 표시합니다.
jasypt:encrypt --help
jasypt:encrypt
명령을 실행하여 얻은 암호화된 값이 포함된 속성 파일을 생성합니다.ENC()
함수에서 각 암호화된 값을 래핑합니다.예를 들어, 일부 LDAP 자격 증명을
etc/ldap.properties
파일에 저장한다고 가정합니다. 파일 콘텐츠는 다음과 같습니다.#ldap.properties ldap.password=ENC(VMJ5S566MEDhQ5r6jiIqTB+fao3NN4pKnQ9xU0wiDCg=) ldap.url=ldap://192.168.1.74:10389
#ldap.properties ldap.password=ENC(VMJ5S566MEDhQ5r6jiIqTB+fao3NN4pKnQ9xU0wiDCg=) ldap.url=ldap://192.168.1.74:10389
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 암호화된 속성 자리 표시자에 필요한 네임스페이스를
블루프린트.xml
파일에 추가합니다. 이러한 네임스페이스는 Aries 확장 및 Apache Karaf Jasypt를 위한 것입니다. 예를 들면 다음과 같습니다.<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0" xmlns:enc="http://karaf.apache.org/xmlns/jasypt/v1.0.0"> ... </blueprint>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0" xmlns:enc="http://karaf.apache.org/xmlns/jasypt/v1.0.0"> ... </blueprint>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용한 Jasypt 암호화 알고리즘과 속성 파일의 위치를 구성합니다. 다음 예제에서는 다음을 수행하는 방법을 보여줍니다.
-
etc/ldap.properties
파일에서 속성을 읽도록ext:property-placeholder
요소를 구성합니다. enc:property-placeholder
요소를 다음과 같이 구성합니다.-
PBEWithMD5AndDES
암호화 알고리즘을 식별합니다. Karaf
bin/setenv
파일에 정의된 환경 변수JASYPT_ENCRYPTION_PASSWORD
에서 마스터 암호를 읽습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
-
초기화 벡터 속성 구성
다음 알고리즘에서는 블루프린트 구성에 ivGenerator
라는 초기화 벡터 속성을 추가해야 합니다.
다음 예제에서는 필요한 경우 ivGenerator
속성을 블루프린트 구성에 추가하는 방법을 보여줍니다.
암호화된 속성 자리 표시자를 사용하는 LDAP JAAS 영역 구성
다음 예제는 Jasypt 암호화된 속성 자리 표시자를 사용하는 LDAP JAAS 영역 구성을 표시하여 이전 예제의 블루프린트.xml
파일에 추가합니다.
이 항목에 설명된 프로세스를 사용하여 속성을 암호화하는 경우 @PropertyInject
주석을 사용하여 속성의 암호를 해독할 수 없습니다. 대신 이 블루프린트 예제와 같이 XML을 사용하여 Java 오브젝트에 속성을 삽입합니다.
이 예에서는 컨테이너 초기화 중에 ${ldap.password}
자리 표시자가 etc/ldap.properties
파일에서 ldap.password
속성의 해독된 값으로 교체됩니다.
환경 변수 또는 시스템 속성 지정의 예
값을 암호화할 때 일반 텍스트 마스터 암호를 지정하는 대신 환경 변수 또는 마스터 암호로 설정된 시스템 속성을 지정할 수 있습니다. 예를 들어 bin/setenv
파일에 다음이 포함되어 있다고 가정합니다.
export MASTER_PASSWORD=passw0rd
export MASTER_PASSWORD=passw0rd
다음 명령을 사용하여 값을 암호화할 수 있습니다.
karaf@root()> jasypt:encrypt -w MASTER_PASSWORD "$en$!t!ve" Algorithm used: PBEWithMD5AndDES Encrypted data: /4DZCwqXD7cQ++TKQjt9QzmmcWv7TwmylCPkHumv2LQ=
karaf@root()> jasypt:encrypt -w MASTER_PASSWORD "$en$!t!ve"
Algorithm used: PBEWithMD5AndDES
Encrypted data: /4DZCwqXD7cQ++TKQjt9QzmmcWv7TwmylCPkHumv2LQ=
etc/system.properties
파일에 다음이 포함된 경우:
master.password=passw0rd
master.password=passw0rd
다음 명령을 사용하여 값을 암호화할 수 있습니다.
karaf@root()> jasypt:encrypt -w master.password "$en$!t!ve" Algorithm used: PBEWithMD5AndDES Encrypted data: 03+8UTJJtEXxHaJkVCmzhqLMUYtT8TBG2RMvOBQlfmQ=
karaf@root()> jasypt:encrypt -w master.password "$en$!t!ve"
Algorithm used: PBEWithMD5AndDES
Encrypted data: 03+8UTJJtEXxHaJkVCmzhqLMUYtT8TBG2RMvOBQlfmQ=
2.3.3. jasypt:digest 명령 호출 링크 복사링크가 클립보드에 복사되었습니다!
Jasypt 다이제스트는 MD5와 같은 암호화 해시 함수를 값에 적용한 결과입니다. 다이제스트를 생성하는 것은 단방향 암호화의 유형입니다. 다이제스트를 생성한 다음 다이제스트에서 원래 값을 재구성할 수 없습니다. 특히 민감한 값의 경우 값을 암호화하는 대신 다이제스트를 생성해야 할 수 있습니다. 그런 다음 다이제스트를 속성 자리 표시자로 지정할 수 있습니다.
다이제스트를 생성하기 위한 명령을 호출하는 형식은 다음과 같습니다.
jasypt:digest [options] [입력]
옵션을 지정하지 않고 다이제스트를 생성할 입력을 지정하지 않으면 명령에서 옵션에 기본값을 암호화하고 적용할 값을 지정하라는 메시지를 표시합니다. 예를 들면 다음과 같습니다.
karaf@root()> jasypt:digest Input data to digest: ******** Input data to digest (repeat): ******** Algorithm used: MD5 Digest value: 8D4C0B3D5EE133BCFD7585A90F15C586741F814BC527EAE2A386B9AA6609B926AD9B3C418937251373E08F18729AD2C93815A7F14D878AA0EF3268AA04729A614ECAE95029A112E9AD56FEDD3FD7E28B73291C932B6F4C894737FBDE21AB382
karaf@root()> jasypt:digest
Input data to digest: ********
Input data to digest (repeat): ********
Algorithm used: MD5
Digest value: 8D4C0B3D5EE133BCFD7585A90F15C586741F814BC527EAE2A386B9AA6609B926AD9B3C418937251373E08F18729AD2C93815A7F14D878AA0EF3268AA04729A614ECAE95029A112E9AD56FEDD3FD7E28B73291C932B6F4C894737FBDE21AB382
다음 예제에서는 명령줄에서 입력
인수의 사양을 보여줍니다.
karaf@root()> jasypt:digest ImportantPassword
karaf@root()> jasypt:digest ImportantPassword
이 명령은 기본 옵션을 적용하고 ImportantPassword
의 단방향 암호화를 제공하는 다이제스트를 생성합니다. 명령 출력은 다음과 같습니다.
karaf@root()> jasypt:digest ImportantPassword Algorithm used: MD5 Digest value: 0bL90nno/nHiTEdzx3dKa61LBDcWQQZMpjaONtY3b1fJBuDWbWTTtZ6tE5eOOPKh7orLTXS7XRt2blA2DrfnjWIlIETjge9n
karaf@root()> jasypt:digest ImportantPassword
Algorithm used: MD5
Digest value: 0bL90nno/nHiTEdzx3dKa61LBDcWQQZMpjaONtY3b1fJBuDWbWTTtZ6tE5eOOPKh7orLTXS7XRt2blA2DrfnjWIlIETjge9n
단방향 암호화를 원하는 각 값에 대해 jasypt:digest
명령을 호출합니다.
기본 동작을 변경하려면 다음 옵션 중 하나 이상을 지정합니다.
옵션 | 설명 | 예제 |
---|---|---|
|
목록에 |
예: |
| 초기 다이제스트의 해시를 반복적으로 생성하는 횟수를 나타내는 정수와 함께 이 옵션을 따릅니다. 각 반복은 이전 해시 결과를 가져와서 다시 해시합니다. 결과는 최종 다이제스트입니다. 기본값은 1000입니다. |
예: |
|
다이제스트를 생성하기 위해 |
예: |
| 16진수 출력을 얻으려면 이 옵션을 지정합니다. 기본 출력은 Base64입니다. |
예: |
| 명령 구문 및 옵션에 대한 정보를 표시합니다. |
|
다이제스트를 가져온 후 암호화된 속성 자리 표시자 사용에서 설명한 것과 동일한 방식으로 사용할 수 있습니다.
기본값이 아닌 값을 사용하는 경우 계산 시간이 더 오래 걸립니다. 예를 들면 다음과 같습니다.
karaf@root()> jasypt:digest --iterations 1000000 --salt-size 32 -a SHA-512 --hex passw0rd Algorithm used: SHA-512 Digest value: 4007A85C4932A399D8376B4F2B3221E34F0AF349BB152BEAC80F03BEB2B368DA7900F0990C186DB36D61741FA147B96DC9F73481991506FAA3662EA1693642CDAB89EB7E6B1DC21E1443D06D70A5842EB2851D37E262D5FC77A1D0909B3B2783
karaf@root()> jasypt:digest --iterations 1000000 --salt-size 32 -a SHA-512 --hex passw0rd
Algorithm used: SHA-512
Digest value: 4007A85C4932A399D8376B4F2B3221E34F0AF349BB152BEAC80F03BEB2B368DA7900F0990C186DB36D61741FA147B96DC9F73481991506FAA3662EA1693642CDAB89EB7E6B1DC21E1443D06D70A5842EB2851D37E262D5FC77A1D0909B3B2783
2.3.4. jasypt:decrypt 명령 호출 링크 복사링크가 클립보드에 복사되었습니다!
암호화된 자리 표시자의 원래 값을 확인하려면 자리 표시자에서 jasypt:decrypt
명령을 사용합니다.
사전 요구 사항
-
jasypt:encrypt
명령을 호출하여 자리 표시자를 생성해야 합니다.
다음을 알고 있어야 합니다.
- 마스터 암호 또는 마스터 암호로 사용하는 환경 변수 또는 시스템 속성입니다.
-
jasypt:encrypt
와 함께 사용되는 암호화 알고리즘입니다. -
jasypt:encrypt
반복 수입니다.
jasypt:decrypt
명령을 호출하는 형식은 다음과 같습니다.
jasypt:decrypt [options] [input]
옵션
및 입력을
지정하지 않고 명령을 실행할 수 있지만 기본값을 jasypt:encrypt
명령으로 사용하는 경우에만 실행합니다.
이 경우 마스터 암호와 암호를 해독할 값을 제공해야 합니다. 다른 모든 옵션에는 기본값이 있습니다.
예제
이 경우 프롬프트에 암호를 해독할 마스터 암호와 데이터를 입력합니다. 기본 알고리즘 PBEWithMD5AndDES
는 값을 해독하기 위한 암호 해독 키를 만듭니다.
karaf@root()> jasypt:decrypt Master password: ******** Data to decrypt: ******************************************** Algorithm used: PBEWithMD5AndDES Decrypted data: $en$!t!ve
karaf@root()> jasypt:decrypt
Master password: ********
Data to decrypt: ********************************************
Algorithm used: PBEWithMD5AndDES
Decrypted data: $en$!t!ve
2.3.4.1. jasypt:decrypt에 대한 옵션 지정 링크 복사링크가 클립보드에 복사되었습니다!
기본 동작을 변경하려면 다음 옵션 중 하나 이상을 지정합니다.
옵션 | 설명 | 참고 | 예제 |
---|---|---|---|
|
환경 변수 또는 마스터 암호 값으로 설정된 시스템 속성입니다. |
명령을 호출한 후 |
|
| 선택한 마스터 암호의 일반 텍스트 값을 사용하여 이 옵션을 따르십시오. 마스터 암호의 일반 텍스트 값이 기록에 표시됩니다.
|
명령을 호출한 후 |
|
|
|
|
|
| 초기 키의 해시를 반복적으로 생성하는 횟수를 나타내는 정수를 사용하여 이 옵션을 따릅니다. 각 반복은 이전 해시 결과를 가져와서 다시 해시합니다. 결과는 최종 암호 해독 키입니다. 기본값은 1000입니다. |
|
|
| 16진수 출력을 얻으려면 이 옵션을 지정합니다. 기본 출력은 Base64입니다. |
| |
| 이전 버전의 Jasypt로 암호화된 암호 해독에 고정 IV 생성기를 사용합니다. |
| |
| 명령 구문 및 옵션에 대한 정보를 표시합니다. |
|
2.3.4.2. 환경 변수 또는 시스템 속성 지정 링크 복사링크가 클립보드에 복사되었습니다!
명령에 값을 매개변수로 추가하는 대신 jasypt:decrypt
명령에 환경 변수 또는 시스템 속성을 사용할 수 있습니다.
2.3.4.2.1. 환경 변수 사용 링크 복사링크가 클립보드에 복사되었습니다!
환경 variable을 사용하려면 bin/setenv
파일에 매개 변수를 추가합니다.
예제
export MASTER_PASSWORD=passw0rd
export MASTER_PASSWORD=passw0rd
환경 변수 MASTER_PASSWORD
를 사용하여 값을 해독할 수 있습니다.
예제
karaf@root()> jasypt:decrypt -a -w MASTER_PASSWORD Data to decrypt: ******************************************** Algorithm used: PBEWithMD5AndDES Decrypted data: $en$!t!ve
karaf@root()> jasypt:decrypt -a -w MASTER_PASSWORD
Data to decrypt: ********************************************
Algorithm used: PBEWithMD5AndDES
Decrypted data: $en$!t!ve
2.3.4.2.2. 시스템 속성 사용 링크 복사링크가 클립보드에 복사되었습니다!
환경 variablem을 사용하려면 매개 변수를 etc/system.properties
파일에 추가합니다.
예제
master.password=passw0rd
master.password=passw0rd
이 시스템 속성인 master.password
를 사용하여 값을 해독할 수 있습니다.
예제
karaf@root()> jasypt:decrypt -w master.password Data to decrypt: ******************************************** Algorithm used: PBEWithMD5AndDES Decrypted data: $en$!t!ve
karaf@root()> jasypt:decrypt -w master.password
Data to decrypt: ********************************************
Algorithm used: PBEWithMD5AndDES
Decrypted data: $en$!t!ve
2.4. 원격#159 SSL 활성화 링크 복사링크가 클립보드에 복사되었습니다!
2.4.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat JBoss Fuse는 Cryostat를 사용하여 Karaf 컨테이너의 원격 모니터링 및 관리를 허용하는 Cryostat 포트를 제공합니다. 그러나 기본적으로 Cryostat 연결을 통해 보내는 자격 증명은 암호화되지 않고 스누핑에 취약합니다. Cryostat 연결을 암호화하고 암호 스누핑으로부터 보호하려면 SSL을 통해 Cryostat 통신을 보호해야 합니다.
SSL을 통해 Cryostat를 구성하려면 다음 단계를 수행합니다.
SSL 액세스를 통해 Cryostat를 구성한 후에는 연결을 테스트해야 합니다.
SSL/TLS 보안을 활성화하려면 Poodle 취약점(CVE-2014-3566) 으로부터 보호하기 위해 SSLv3 프로토콜을 명시적으로 비활성화해야 합니다. 자세한 내용은 JBoss Fuse 6.x 및 JBoss A-MQ 6.x에서 SSLv3 비활성화 를 참조하십시오.
Red Hat JBoss Fuse가 실행되는 동안 SSL을 통해 Cryostat를 구성하는 경우 다시 시작해야 합니다.
2.4.2. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
아직 수행하지 않은 경우 다음을 수행해야 합니다.
-
JAVA_HOME
환경 변수 설정 admin
역할을 사용하여 Karaf 사용자 구성InstallDir/etc/users.properties
파일을 편집하고 한 줄에 다음 항목을 추가합니다.admin=YourPassword,admin
admin=YourPassword,admin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그러면 사용자 이름,
admin
, password,YourPassword
,admin
역할이 있는 새 사용자가 생성됩니다.
2.4.3. jbossweb.keystore 파일 생성 링크 복사링크가 클립보드에 복사되었습니다!
명령 프롬프트를 열고 Karaf 설치의 etc/
디렉토리에 있는지 확인합니다.
cd etc
cd etc
명령줄에서 애플리케이션에 적합한 -dname
값(별시 이름)을 사용하여 다음 명령을 입력합니다.
$JAVA_HOME/bin/keytool -genkey -v -alias jbossalias -keyalg RSA -keysize 1024 -keystore jbossweb.keystore -validity 3650 -keypass JbossPassword -storepass JbossPassword -dname "CN=127.0.0.1, OU=RedHat Software Unit, O=RedHat, L=Boston, S=Mass, C=USA"
$JAVA_HOME/bin/keytool -genkey -v -alias jbossalias -keyalg RSA -keysize 1024 -keystore jbossweb.keystore -validity 3650 -keypass JbossPassword -storepass JbossPassword -dname "CN=127.0.0.1, OU=RedHat Software Unit, O=RedHat, L=Boston, S=Mass, C=USA"
단일 명령줄에 전체 명령을 입력합니다.
이 명령은 다음과 같은 출력을 반환합니다.
InstallDir/etc
에 파일 jbossweb.keystore
가 포함되어 있는지 확인합니다.
2.4.4. keystore.xml 파일을 생성하고 배포합니다. 링크 복사링크가 클립보드에 복사되었습니다!
-
즐겨 찾는 XML 편집기를 사용하여 <
installDir> /jboss-fuse-7.11.1.fuse-7_11_1-00013-redhat-00003/etc
디렉터리에keystore.xml
파일을 생성하고 저장합니다. 이 텍스트를 파일에 포함합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow InstallDir/deploy
디렉터리( hot deploy 디렉터리)에 복사하여keystore.xml
파일을 Karaf 컨테이너에 배포합니다.참고이후
keystore.xml
파일 배포를 취소해야 하는 경우 Karaf 컨테이너가 실행되는 동안deploy/
디렉토리에서keystore.xml
파일을 삭제하여 이를 수행할 수 있습니다.
2.4.5. org.apache.karaf.management.cfg에 필요한 속성을 추가합니다. 링크 복사링크가 클립보드에 복사되었습니다!
InstallDir/etc/org.apache.karaf.management.cfg
파일을 편집하여 파일 끝에 이러한 속성을 포함합니다.
secured = true secureProtocol = TLSv1 keyAlias = jbossalias keyStore = sample_keystore trustStore = sample_keystore
secured = true
secureProtocol = TLSv1
keyAlias = jbossalias
keyStore = sample_keystore
trustStore = sample_keystore
Poodle 취약점 (CVE-2014-3566)으로부터 보호하려면 secureProtocol
을 TLSv1
로 설정해야 합니다.
선택적으로 enabledCipherSuites
속성을 설정하여 Cryostat TLS 연결에 사용할 특정 암호화 제품군을 나열할 수 있습니다. 이 속성을 설정하면 기본 암호화 제품군이 재정의됩니다.
2.4.6. Karaf 컨테이너를 다시 시작 링크 복사링크가 클립보드에 복사되었습니다!
새 Cryostat SSL/TLS 설정을 적용하려면 Karaf 컨테이너를 다시 시작해야 합니다.
2.4.7. Secure Cryostat 연결 테스트 링크 복사링크가 클립보드에 복사되었습니다!
명령 프롬프트를 열고 Fuse 설치의
etc/
디렉터리에 있는지 확인합니다.cd <installDir>/jboss-fuse-7.11.1.fuse-7_11_1-00013-redhat-00003/etc
cd <installDir>/jboss-fuse-7.11.1.fuse-7_11_1-00013-redhat-00003/etc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 터미널을 열고 다음 명령을 입력하여 JConsole을 시작합니다.
jconsole -J-Djavax.net.debug=ssl -J-Djavax.net.ssl.trustStore=jbossweb.keystore -J-Djavax.net.ssl.trustStoreType=JKS -J-Djavax.net.ssl.trustStorePassword=JbossPassword
jconsole -J-Djavax.net.debug=ssl -J-Djavax.net.ssl.trustStore=jbossweb.keystore -J-Djavax.net.ssl.trustStoreType=JKS -J-Djavax.net.ssl.trustStorePassword=JbossPassword
Copy to Clipboard Copied! Toggle word wrap Toggle overflow J-Djavax.net.ssl.trustStore
옵션이jbossweb.keystore
파일의 위치를 지정합니다(이 위치가 올바르게 지정되었는지 확인하거나 SSL/TLS 핸드셰이크는 실패합니다).-J-Djavax.net.debug=ssl
설정을 사용하면 SSL/TLS 핸드셰이크 메시지를 로깅할 수 있으므로 SSL/TLS가 성공적으로 활성화되었는지 확인할 수 있습니다.중요동일한 명령줄에 전체 명령을 입력합니다.
-
JConsole이 열리면
새 연결
마법사에서Remote Process
옵션을 선택합니다. Remote Process
옵션에서service:jmx:<protocol>:<sap
> 연결 URL에 대해 다음 값을 입력합니다.service:jmx:rmi://localhost:44444/jndi/rmi://localhost:1099/karaf-root
service:jmx:rmi://localhost:44444/jndi/rmi://localhost:1099/karaf-root
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그리고 유효한 JAAS 인증 정보(
etc/users.properties
파일에 설정된)를 사용하여Username
및Password
필드를 작성합니다.Username: admin Password: YourPassword
Username: admin Password: YourPassword
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. Elytron 인증 정보 저장소 사용 링크 복사링크가 클립보드에 복사되었습니다!
Fuse에는 JBoss EAP의 일부인 Elytron 자격 증명 저장소 기능이 포함되어 있습니다. 인증 정보 저장소는 스토리지 파일에서 암호화하여 중요한 텍스트 문자열을 안전하게 보호할 수 있습니다. 각 컨테이너에는 정확히 하나의 인증 정보 저장소가 있을 수 있습니다.
보안 구성에서 일반적인 문제는 암호를 저장하는 방법입니다. 예를 들어 다양한 애플리케이션에서 데이터베이스 액세스에 대한 암호를 고려하십시오. 여러 인증 방법의 경우 서버가 데이터베이스 서버에 자격 증명을 보내기 전에 암호를 일반 텍스트로 사용할 수 있어야 합니다. 일반적으로 텍스트 구성 파일에 일반 텍스트 암호를 저장하는 것은 좋지 않습니다.
Elytron 인증 정보 저장소는 이 문제를 해결합니다. PKCS#12 사양을 준수하는 암호화된 파일인 인증 정보 저장소에 암호 및 기타 중요한 값을 안전하게 저장합니다. 인증 정보 저장소는 암호화되지 않은 값을 저장하지 않습니다. 인증 정보 저장소는 PBE(암호 기반 암호화)를 사용하여 암호와 저장소 자체와 같은 중요한 값을 모두 암호화합니다.
다음 주제에서는 세부 정보를 제공합니다.
- 2.5.1절. “사용할 인증 정보 저장소 만들기”
- 2.5.2절. “시스템 속성이 인증 정보 저장소 구성을 보유할 때 동작”
- 2.5.3절. “인증 정보 저장소 시스템 속성 및 환경 변수 설명”
-
2.5.4절. “
credentials-store:create
명령 참조” -
2.5.5절. “
credential-store:store
명령 참조” -
2.5.6절. “
credentials-store:list
명령 참조” -
2.5.7절. “
credential-store:remove
명령 참조” - 2.5.8절. “인증 정보 저장소 사용을 활성화하는 구성 관리자 속성의 예”
2.5.1. 사용할 인증 정보 저장소 만들기 링크 복사링크가 클립보드에 복사되었습니다!
Fuse를 실행 중인 Apache Karaf 컨테이너에서 사용 자격 증명 저장소를 사용하고, 인증 정보 저장소를 생성 및 구성한 다음 값을 추가합니다. Fuse는 계속 실행되며 인증 정보 저장소를 사용할 수 있습니다.
사전 요구 사항
인증 정보 저장소를 생성할 때 다음 기본값을 사용합니다.
- PKCS#12 인증 정보 저장소를 생성합니다.
-
masked-SHA1-DES-EDE
알고리즘을 적용하여 자격 증명 저장소를 암호화합니다. - 알고리즘을 200000 번 반복합니다.
-
${karaf.etc}/credential.store.p12
에서 인증 정보 저장소를 찾습니다.
-
인증 정보 저장소 구성을
${karaf.etc}/system.properties
에 저장하려고 합니다.
이러한 동작을 변경해야 하는 경우 credentials -store:create 명령 호출에
대한 정보를 참조하십시오.
절차
인증 정보 저장소 암호를 선택합니다.
나중에 인증 정보 저장소에 값을 추가하거나 값을 해독하려는 경우 인증 정보 저장소 명령에서는 인증 정보 저장소 암호를 사용하여 값을 암호화하고 암호 해독합니다.
credentials
-store:create
명령을 호출하여 선택한 인증 정보 저장소 암호를 입력하라는 메시지를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은
etc/system.properties
에 다음과 같은 구성을 작성합니다.credential.store.location = /data/servers/fuse-karaf-7.4.0.fuse-740060/etc/credential.store.p12 credential.store.protection.algorithm = masked-SHA1-DES-EDE credential.store.protection.params = MDkEKFJId25PaXlVQldKUWw5R2tLclhZQndpTGhhVXJsWG5lNVJMbTFCZEMCAwMNQAQI0Whepb7H1BA= credential.store.protection = m+1BcfRyCnI=
credential.store.location = /data/servers/fuse-karaf-7.4.0.fuse-740060/etc/credential.store.p12 credential.store.protection.algorithm = masked-SHA1-DES-EDE credential.store.protection.params = MDkEKFJId25PaXlVQldKUWw5R2tLclhZQndpTGhhVXJsWG5lNVJMbTFCZEMCAwMNQAQI0Whepb7H1BA= credential.store.protection = m+1BcfRyCnI=
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이
credential-store:store
명령을 호출하여 인증 정보 저장소에 암호화된 값을 추가합니다.credential-store:store 별칭
alias
를 고유한 키 값으로 바꿉니다. 나중에 인증 정보 저장소에 추가하는 암호화된 값을 검색하려면 툴에서 이 별칭을 사용합니다. 예를 들어 코드에서db.password
시스템 속성을 사용하고etc/system.properties
파일에db.password
속성을 데이터베이스의 실제 암호로 설정하는 항목이 있다고 가정합니다. 시스템 속성db.password
를 별칭으로 지정하는 것이 좋습니다.이 명령을 호출하면 입력하라는 메시지를 표시하고 인증 정보 저장소에 추가할 중요한 값을 확인합니다. 프롬프트에서
db.password
별칭 예제를 계속 사용하면 데이터베이스에 대한 실제 암호를 입력합니다.karaf@root()> credential-store:store db.password Secret value to store: ****** Secret value to store (repeat): ****** Value stored in the credential store. To reference it use: CS:db.password
karaf@root()> credential-store:store db.password Secret value to store: ****** Secret value to store (repeat): ****** Value stored in the credential store. To reference it use: CS:db.password
Copy to Clipboard Copied! Toggle word wrap Toggle overflow etc/system.properties
파일에서 항목을 업데이트하거나 새 항목을 추가합니다. 업데이트하거나 추가하는 항목은 credentials-store:store
명령에 지정한 별칭을 명령이 출력하는 참조 값으로 설정합니다. 예를 들면 다음과 같습니다.db.password = CS:db.password
db.password = CS:db.password
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Fuse가 구성된 인증 정보 저장소로 실행 중이면
db.password
시스템 속성의 각 인스턴스를 인증 정보 저장소에 있는 실제 시크릿 값으로 동적으로 대체합니다.-
credential-store:store
명령에서 지정한 별칭이 이미 사용 중인 시스템 속성인 경우 다음 단계로 건너뜁니다. 코드가 시크릿에 지정한 별칭을 아직 사용하지 않는 경우 시크릿이 필요한 각 파일에서 이전 단계에서 시스템 속성으로 추가한 별칭을 지정합니다. 예를 들어 코드는db.password
를 참조합니다. - 인증 정보 저장소에 추가할 각 값에 대해 이전 세 단계를 반복합니다.
결과
인증 정보 저장소를 사용할 준비가 되었습니다. Fuse가 시작되거나 인증 정보 저장소 번들이 다시 시작되면 시스템 속성을 처리하여 해당 참조 인증 정보 저장소 항목을 찾습니다. 이러한 각 시스템 속성의 경우 Fuse는 인증 정보 저장소에서 관련 값을 가져오고 시스템 속성을 실제 시크릿 값으로 대체합니다. 그러면 해당 시스템 속성의 인스턴스가 포함된 모든 구성 요소, 번들 및 코드에서 실제 시크릿 값을 사용할 수 있습니다.
2.5.2. 시스템 속성이 인증 정보 저장소 구성을 보유할 때 동작 링크 복사링크가 클립보드에 복사되었습니다!
인증 정보 저장소가 사용 중이며 시스템 속성을 사용하여 구성 매개 변수를 보유하고 있다고 가정합니다. Fuse가 시작되면 모든 시스템 속성을 처리합니다. Fuse는 CS:
접두사가 인증 정보 저장소에 있는 연결된 값과 함께 값으로 설정된 시스템 속성을 대체합니다. Fuse는 java.lang:type=Runtime
Cryostat를 프록시하여 Cryostat getSystemProperties()
메서드를 통해 암호 해독된 값을 숨기도록 합니다.
예를 들어 하나의 항목이 있는 인증 정보 저장소를 고려해 보십시오.
karaf@root()> credential-store:list --show-secrets Alias │ Reference │ Secret value ────────────┼────────────────┼───────────── db.password │ CS:db.password │ sec4et
karaf@root()> credential-store:list --show-secrets
Alias │ Reference │ Secret value
────────────┼────────────────┼─────────────
db.password │ CS:db.password │ sec4et
이 항목을 인증 정보 저장소에 추가한 후 etc/system.properties
파일을 편집하여 이 항목을 추가하십시오.
db.password = CS:db.password
Fuse가 시작되거나 org.jboss.fuse.modules.fuse-credential-store-core
번들을 다시 시작할 때 Fuse에서 db.password
시스템 속성에 대한 참조를 확인합니다. 각 참조에 대해 Fuse는 CS:db.password
별칭을 사용하여 인증 정보 저장소에서 관련 값을 가져옵니다. 다음 명령을 호출하여 확인할 수 있습니다.
karaf@root()> system:property db.password sec4et
karaf@root()> system:property db.password
sec4et
그러나 Cryostat를 사용하여 이를 확인하는 경우 인증 정보 저장소의 값이 숨겨집니다.
2.5.3. 인증 정보 저장소 시스템 속성 및 환경 변수 설명 링크 복사링크가 클립보드에 복사되었습니다!
시스템 속성 또는 환경 변수를 사용하여 인증 정보 저장소 구성 매개변수를 저장할 수 있습니다. 인증 정보 저장소를 생성할 때 지정하는 옵션에 따라 결정됩니다.
- 속성 또는 변수를 직접 설정해야 하는지 여부입니다.
- 속성 또는 변수의 정확한 값은 속성 또는 변수여야 합니다.
속성/변수를 이해하면 인증 정보 저장소의 작동 방식을 이해하는 데 도움이 됩니다.
credential-store:create
명령을 호출하고 --persist
옵션만 지정하면 명령은 시스템 속성을 인증 정보 저장소 구성 매개변수로 설정합니다. 인증 정보 저장소 시스템 속성을 명시적으로 설정할 필요가 없습니다.
대신 인증 정보 저장소 환경 변수를 사용하거나 credential-store:create
명령의 기본 동작을 변경하려면 인증 정보 저장소를 생성할 때 지정할 수 있는 옵션에 대한 자세한 내용은 credential-store:create
명령 참조를 참조하십시오.
인증 정보 저장소를 생성하는 명령을 호출할 때 지정하는 옵션에 따라 인증 정보 저장소 속성 또는 변수의 설정이 결정됩니다. 속성 또는 변수를 직접 설정해야 하는 경우 credentials -store:create
명령의 출력에는 해당 작업에 대한 지침이 포함되어 있습니다. 즉, 인증 정보 저장소 시스템 속성 또는 환경 변수의 설정을 결정하는 것은 쉽지 않습니다. credential-store:create
명령을 실행하면 항상 설정이 결정됩니다.
다음 표에서는 인증 정보 저장소 속성 및 변수를 설명합니다. 특정 매개변수의 경우 환경 변수와 시스템 속성이 모두 설정된 경우 환경 변수 설정이 우선합니다.
이름 | 설명 |
---|---|
환경 변수:
시스템 속성: | 인증 정보 저장소 명령에서 암호화 키를 파생하는 데 사용하는 PBE(암호 기반 암호화) 알고리즘입니다. |
환경 변수:
시스템 속성: | 인증 정보 저장소의 위치입니다. |
환경 변수:
시스템 속성: | 인증 정보 저장소에서 암호화 키를 파생하는 데 사용하는 매개변수입니다. 매개 변수에는 반복 횟수, 초기 벡터 및 Salt가 포함됩니다. |
환경 변수:
시스템 속성: |
인증 정보 저장소에서 암호 또는 기타 보안 데이터를 복구하기 위해 인증 정보 저장소에서 암호를 해독해야 하는 암호입니다. |
2.5.4. credentials-store:create 명령 참조 링크 복사링크가 클립보드에 복사되었습니다!
인증 정보 저장소를 생성하고 구성하려면 다음 형식의 credentials -store:create
명령을 호출합니다.
credential-store:create [options]
옵션을 지정하지 않으면 명령에서 다음을 수행합니다.
- 선택한 인증 정보 저장소 암호를 입력하라는 메시지를 표시합니다.
- PKCS#12 인증 정보 저장소 생성
-
masked-SHA1-DES-EDE
알고리즘을 사용하여 인증 정보 저장소를 암호화 - 알고리즘 200000 번 반복합니다.
-
${karaf.etc}/credential.store.p12
에서 인증 정보 저장소를 찾습니다. - 인증 정보 저장소 구성을 저장하지 않음
다음 표에서는 기본 동작을 변경하기 위해 지정할 수 있는 옵션을 설명합니다.
옵션 | 설명 |
---|---|
| 환경 변수 또는 마스터 암호 값으로 설정된 시스템 속성을 사용하여 이 옵션을 따릅니다. 인증 정보 저장소는 알고리즘과 함께 이 값을 사용하여 암호화 또는 암호 해독 키를 파생합니다.
명령을 호출한 후
예: |
| 선택한 마스터 암호의 일반 텍스트 값을 사용하여 이 옵션을 따르십시오. 마스터 암호의 일반 텍스트 값이 기록에 표시됩니다. 인증 정보 저장소는 알고리즘과 함께 이 값을 사용하여 암호화 또는 암호 해독 키를 파생합니다.
명령을 호출한 후
예: |
| 인증 정보 저장소의 강제로 생성합니다. 인증 정보 저장소가 새 인증 정보 저장소의 의도된 위치에 있는 경우 이 옵션의 사양으로 인해 명령이 기존 인증 정보 저장소를 덮어씁니다. 기존 인증 정보 저장소의 모든 콘텐츠가 손실됩니다. 기본 동작은 의도한 위치에 이미 인증 정보 저장소가 있는 경우 명령에서 인증 정보 저장소를 생성하지 않는다는 것입니다. |
|
새 인증 정보 저장소의 위치를 지정합니다. 권장 사항은 기본 위치 |
| 사용 중인 암호화 알고리즘을 반복적으로 적용하는 횟수를 나타내는 정수를 사용하여 이 옵션을 따릅니다. 각 반복은 이전 결과를 가져와서 알고리즘을 다시 적용합니다. 결과는 최종 마스크된 암호입니다. 기본값은 200000입니다. |
|
masked 암호를 생성하는 데 사용할 credentials |
|
새 인증 정보 저장소의 구성을
이 옵션을 생략하는 이유는 인증 정보 저장소 구성 매개변수 값을 확인해야 하기 때문입니다. 또는 |
| 명령 구문 및 옵션에 대한 정보를 표시합니다. |
--persist
를 지정하지 않고 인증 정보 저장소를 생성하는 예
다음 명령은 인증 정보 저장소를 생성하지만 ${karaf.etc}/system.properties
에 인증 정보 저장소 구성을 저장하지 않습니다. 이 명령은 기본값인 masked-SHA1-DES-EDE
알고리즘을 사용합니다.
2.5.5. credential-store:store 명령 참조 링크 복사링크가 클립보드에 복사되었습니다!
암호화된 값을 인증 정보 저장소에 추가하려면 다음 형식의 credentials -store:store
명령을 호출합니다.
credential-store:store 별칭 [secret]
alias
를 고유한 키 값으로 바꿉니다. 인증 정보 저장소에 추가하는 암호화된 값을 검색하려면 툴에서 이 별칭을 사용합니다.
선택적으로 시크릿을
암호화하고 인증 정보 저장소에 추가할 값으로 교체합니다. 일반적으로 암호이지만 암호화하려는 모든 값이 될 수 있습니다.
명령줄에서 secret
을 지정하면 일반 텍스트 값이 기록에 표시됩니다. 명령줄에서 secret
을 지정하지 않으면 명령에서 입력 프롬프트를 표시하고 값은 기록에 표시되지 않습니다.
명령에 대한 정보를 보려면 다음을 입력합니다.
credentials-store:store --help
.
다음 명령줄은 인증 정보 저장소에 항목을 추가하는 예입니다.
karaf@root()> credential-store:store db.password sec4et Value stored in the credential store. To reference it use: CS:db.password
karaf@root()> credential-store:store db.password sec4et
Value stored in the credential store. To reference it use: CS:db.password
이제 인증 정보 저장소에 CS:db.password
를 지정하여 참조할 수 있는 항목이 있습니다.
2.5.6. credentials-store:list 명령 참조 링크 복사링크가 클립보드에 복사되었습니다!
인증 정보 저장소의 항목 별칭을 가져오려면 인증 정보 저장소에 모든 항목 목록을 표시하는 credentials-store:
list 명령을 호출합니다. 예를 들면 다음과 같습니다.
karaf@root()> credential-store:list Alias │ Reference ─────────────┼─────────────── db.password │ CS:db.password db2.password | CS:db2.password
karaf@root()> credential-store:list
Alias │ Reference
─────────────┼───────────────
db.password │ CS:db.password
db2.password | CS:db2.password
인증 정보 저장소에서 암호화된 보안 값의 암호 해독도 나열하려면 다음과 같이 명령을 호출합니다.
karaf@root()> credential-store:list --show-secrets Alias │ Reference │ Secret value ─────────────┼─────────────────┼───────────── db.password │ CS:db.password │ sec4et db2.password | CS:db2.password | t0pSec4et
karaf@root()> credential-store:list --show-secrets
Alias │ Reference │ Secret value
─────────────┼─────────────────┼─────────────
db.password │ CS:db.password │ sec4et
db2.password | CS:db2.password | t0pSec4et
명령에 대한 정보를 보려면 다음을 수행합니다.
karaf@root()> credential-store:list --help
karaf@root()> credential-store:list --help
2.5.7. credential-store:remove 명령 참조 링크 복사링크가 클립보드에 복사되었습니다!
인증 정보 저장소에서 항목을 제거하려면 다음 형식의 credentials -store:remove
명령을 호출합니다.
credential-store:remove 별칭
별칭
을 인증 정보 저장소에 항목을 추가할 때 alias
인수에 대해 지정한 고유 키 값으로 바꿉니다. CS:
접두사를 지정하지 마십시오. credentials -store:list
명령을 호출하여 별칭을 가져올 수 있습니다.
credentials -store:remove
명령은 사용자가 지정한 별칭이 있는 항목의 인증 정보 저장소를 확인하고 해당 저장소를 제거합니다. 예를 들면 다음과 같습니다.
karaf@root()> credential-store:remove db.password Alias │ Reference │ Secret value ─────────────┼─────────────────┼───────────── db2.password | CS:db2.password | t0pSec4et
karaf@root()> credential-store:remove db.password
Alias │ Reference │ Secret value
─────────────┼─────────────────┼─────────────
db2.password | CS:db2.password | t0pSec4et
명령에 대한 정보를 보려면 다음을 수행합니다.
karaf@root()> credential-store:remove --help
2.5.8. 인증 정보 저장소 사용을 활성화하는 구성 관리자 속성의 예 링크 복사링크가 클립보드에 복사되었습니다!
개발 환경에서는 구성 관리자 서비스 속성을 사용하여 인증 정보 저장소를 사용할 수 있습니다. 구성 관리자 속성은 etc/*.cfg
파일에 정의됩니다.
인증 정보 저장소를 사용할 수 있도록 구성 관리자 속성을 사용하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 https://access.redhat.com/support/offerings/techpreview/를 참조하십시오.
준비
-
credential-store:create
명령을 호출하여 인증 정보 저장소를 생성합니다.credential-store:create 명령 참조를
참조하십시오. -
etc/config.properties
파일을 편집하여 구성 관리자 속성 사용을 활성화하여fe#159.cm.pm = elytron : 행의 주석을 제거합니다.
When uncommented, configuration properties handled by Configuration Admin service will be encrypted when storing in etc/ and in bundle data. Values of the properties will actually be aliases to credential store entries. Please consult the documentation for more details.
# When uncommented, configuration properties handled by Configuration Admin service will be encrypted when storing
# in etc/ and in bundle data. Values of the properties will actually be aliases to credential store entries.
# Please consult the documentation for more details.
felix.cm.pm = elytron
Fuse가 시작되면 어떻게 됩니까
fe#159.configadmin
번들:-
fe#159.cm.pm
속성이 설정되어 있으므로ConfigurationAdmin
서비스 등록 지연. -
name=cm
OSGi 서비스 등록 속성을 사용하여org.apache.fe Cryostat.cm.PersistenceManagerOSGi
서비스의 가용성을 기다립니다.
-
Fuse 인증 정보 저장소 번들:
-
credentials.store에 설정된 값을 사용하여
인증 정보 저장소를 로드합니다.
* 시스템 속성 또는 credentials_STORE_
* 환경 변수를 사용합니다. -
org.apache.fe Cryostat.cm.PersistenceManagerOSGi
서비스를 구현하는 OSGi 서비스를 등록합니다.
문제가 발생하면 인증 정보 저장소 번들에서
지속성Manager
서비스를 등록합니다. 이 서비스는 특별한 작업을 수행하지 않습니다. 문제가 발생하거나 인증 정보 저장소를 사용할 수 없는 경우 Fuse는 암호화되지 않은 구성 값을 읽을 수 있어야 합니다.CS:
접두사로 지정된 암호화된 값은 원래 값을 기억하거나 인증 정보 저장소와 해당 구성을 복구하지 않는 한 손실됩니다.-
credentials.store에 설정된 값을 사용하여
-
con
hi 192.0.2..configadmin
프로세스는 새 지속성 관리자 서비스를 사용하여 인증 정보 저장소 구성을 로드하고 저장합니다.
예제
인증 정보 저장소에 두 개의 항목이 있다고 가정합니다.
karaf@root()> credential-store:list --show-secrets Alias │ Reference │ Secret value ────────────┼────────────────┼───────────── db.password │ CS:db.password │ sec4et http.port │ CS:http.port │ 8182
karaf@root()> credential-store:list --show-secrets
Alias │ Reference │ Secret value
────────────┼────────────────┼─────────────
db.password │ CS:db.password │ sec4et
http.port │ CS:http.port │ 8182
구성 관리 서비스 구성에서 실제 값 대신 중요한 값에 대한 별칭을 사용하도록 선택합니다. 예를 들어 다음과 같이 웹 구성 속성을 변경합니다.
로그에서 다음 줄의 끝에 볼 수 있듯이 실제 값인 8182
가 표시될 수 있습니다. 로그에서 실제 텍스트 값을 표시하는지 여부는 암호화된 값을 사용하는 구성 요소에 따라 결정됩니다.
2019-03-12 15:36:25,648 INFO {paxweb-config-2-thread-1} (ServerControllerImpl.java:458) : Starting undertow http listener on 0.0.0.0:8182
2019-03-12 15:36:25,648 INFO {paxweb-config-2-thread-1} (ServerControllerImpl.java:458) : Starting undertow http listener on 0.0.0.0:8182
이전 명령에서 두 번째 config:property-list --pid org.ops4j.pax.web
명령은 8182
대신 CS:http.port
를 표시합니다. pax-web-undertow
프로세스는 이 포트에서 시작됩니다. 이는 OSGi 후크가 config:property-list --pid org
프로세스를 방지하기 때문입니다. 또한 .ops4j.pax.web
명령의 출력을 보여주는 fe#159.fileinstalletc/org.ops4j.pax.web.cfg
파일이 해독된 값을 저장하지 않고 대신 다음과 같이 저장합니다.
3장. Cryostat HTTP 서버 보안 링크 복사링크가 클립보드에 복사되었습니다!
초록
etc/undertow.xml
구성 파일의 내용을 편집하여 SSL/TLS 보안을 사용하도록 기본 제공 Cryostat HTTP 서버를 구성할 수 있습니다. 특히 이러한 방식으로 Fuse Console에 SSL/TLS 보안을 추가할 수 있습니다.
3.1. Cryostat 서버 링크 복사링크가 클립보드에 복사되었습니다!
Fuse 컨테이너는 general-purpose HTTP 서버 및 HTTP 서블릿 컨테이너 역할을 하는 Cryostat 서버로 사전 구성됩니다. 단일 HTTP 포트(기본적으로 http://localhost:8181)를 통해 Cryostat 컨테이너는 여러 서비스를 호스팅할 수 있습니다. 예를 들면 다음과 같습니다.http://localhost:8181
-
Fuse 콘솔 (기본적으로
http://localhost:8181/hawtio
) - Apache CXF 웹 서비스 엔드포인트(호스트 및 포트가 엔드포인트 구성에 지정되지 않은 경우)
- 일부 Apache Camel 끝점
모든 HTTP 끝점에 기본 Cryostat 서버를 사용하는 경우 여기에 설명된 단계에 따라 이러한 HTTP 끝점에 SSL/TLS 보안을 편리하게 추가할 수 있습니다.
3.2. X.509 인증서 및 개인 키 생성 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat 서버에서 SSL/TLS를 활성화하려면 인증서와 개인 키가 Java 키 저장소 형식(JKS 형식)이어야 하는 X.509 인증서 및 개인 키를 생성해야 합니다. 서명된 인증서 및 개인 키를 생성하는 방법에 대한 자세한 내용은 부록 A. 인증서 관리 을 참조하십시오.
3.3. Apache Karaf 컨테이너에서 Cryostat에 대해 SSL/TLS 활성화 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 키 저장소 파일에 서명된 X.509 인증서 및 개인 키 쌍을 이미 생성했다고 가정합니다. alice.ks
는 키 저장소 암호, StorePass
, 키 암호, KeyPass
입니다.
Karaf 컨테이너에서 Cryostat에 대해 SSL/TLS를 활성화하려면 다음을 수행합니다.
Pax 웹 서버가
etc/undertow.xml
파일에서 구성을 가져오도록 구성되었는지 확인합니다.etc/org.ops4j.pax.web.cfg
파일의 내용을 보면 다음 설정이 표시됩니다.org.ops4j.pax.web.config.file=${karaf.etc}/undertow.xml
org.ops4j.pax.web.config.file=${karaf.etc}/undertow.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 텍스트 편집기에서
etc/org.ops4j.pax.web.cfg
파일을 열고 다음 행을 추가합니다.org.osgi.service.http.port.secure=8443
org.osgi.service.http.port.secure=8443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파일을 저장하고 닫습니다.
etc/org.ops4j.pax.web.cfg
.-
텍스트 편집기에서
etc/undertow.xml
파일을 엽니다. 다음 단계에서는 설치 시간 이후 변경되지 않은 기본undertow.xml
파일로 작업한다고 가정합니다. XML 요소
http-listener
및https-listener
를 검색합니다.http-listener
요소를 주석 처리하고(<!--과
> )--
https-listener
요소의 주석을 제거하고(두 행을 통해 수신 대기)합니다. 편집된 XML 조각은 다음과 같아야 합니다.<!-- HTTP(S) Listener references Socket Binding (and indirectly - Interfaces) --> <!-- http-listener name="http" socket-binding="http" /> --> <!-- verify-client: org.xnio.SslClientAuthMode.NOT_REQUESTED, org.xnio.SslClientAuthMode.REQUESTED, org.xnio.SslClientAuthMode.REQUIRED --> <https-listener name="https" socket-binding="https" security-realm="https" verify-client="NOT_REQUESTED" />
<!-- HTTP(S) Listener references Socket Binding (and indirectly - Interfaces) --> <!-- http-listener name="http" socket-binding="http" /> --> <!-- verify-client: org.xnio.SslClientAuthMode.NOT_REQUESTED, org.xnio.SslClientAuthMode.REQUESTED, org.xnio.SslClientAuthMode.REQUIRED --> <https-listener name="https" socket-binding="https" security-realm="https" verify-client="NOT_REQUESTED" />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow w:keystore
요소를 검색합니다. 기본적으로w:keystore
요소는 다음과 같이 구성됩니다.<w:keystore path="${karaf.etc}/certs/server.keystore" provider="JKS" alias="server" keystore-password="secret" key-password="secret" generate-self-signed-certificate-host="localhost" />
<w:keystore path="${karaf.etc}/certs/server.keystore" provider="JKS" alias="server" keystore-password="secret" key-password="secret" generate-self-signed-certificate-host="localhost" />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow alice
인증서를 Cryostat 서버의 인증서로 설치하려면 다음과 같이w:keystore
요소 속성을 수정합니다.-
파일 시스템에서
alice.ks
파일의 절대 위치에 대한경로를
설정합니다. -
provider
를JKS
로 설정합니다. -
키 저장소의
alice
인증서 별칭에alias
를 설정합니다. -
keystore-password
를 키 저장소를 잠금 해제하는 암호 값으로 설정합니다. -
alice
개인 키를 암호화하는 암호 값으로key-password
를 설정합니다. -
generate-self-signed-certificate-host
속성 설정을 삭제합니다.
-
파일 시스템에서
예를 들어
alice.ks
키 저장소를 설치한 후 수정된w:keystore
요소는 다음과 같습니다.<w:keystore path="${karaf.etc}/certs/alice.ks" provider="JKS" alias="alice" keystore-password="StorePass" key-password="KeyPass" />
<w:keystore path="${karaf.etc}/certs/alice.ks" provider="JKS" alias="alice" keystore-password="StorePass" key-password="KeyPass" />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 보안 HTTPS 포트가 바인딩되는 IP 주소를 지정하는 데 사용되는 <
interface name="secure"
> 태그를 검색합니다. 기본적으로 이 요소는 다음과 같이 주석 처리됩니다.<!--<interface name="secure">--> <!--<w:inet-address value="127.0.0.1" />--> <!--</interface>-->
<!--<interface name="secure">--> <!--<w:inet-address value="127.0.0.1" />--> <!--</interface>-->
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 요소의 주석을 제거하고
value
속성을 사용자 지정하여 HTTPS 포트가 바인딩되는 IP 주소를 지정합니다. 예를 들어 와일드카드 값인0.0.0.0
은 사용 가능한 모든 IP 주소에 바인딩하도록 HTTPS를 구성합니다.<interface name="secure"> <w:inet-address value="0.0.0.0" /> </interface>
<interface name="secure"> <w:inet-address value="0.0.0.0" /> </interface>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <
socket-binding name="https"
태그를 검색하고 주석 처리를 해제합니다. 이 태그의 주석 처리를 해제하면 다음과 같이 표시됩니다.<socket-binding name="https" interface="secure" port="${org.osgi.service.http.port.secure}" />
<socket-binding name="https" interface="secure" port="${org.osgi.service.http.port.secure}" />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
파일을 저장하고 닫습니다.
etc/undertow.xml
. - 구성 변경 사항을 적용하려면 Fuse 컨테이너를 다시 시작합니다.
3.4. 허용된 TLS 프로토콜 및 암호화 제품군 사용자 정의 링크 복사링크가 클립보드에 복사되었습니다!
etc/undertow.xml
파일에서 w:engine
요소의 다음 속성을 수정하여 허용된 TLS 프로토콜 및 암호화 제품군을 사용자 지정할 수 있습니다.
enabled-cipher-suites
- 허용된 TLS/SSL 암호화 제품군 목록을 지정합니다.
enabled-protocols
허용된 TLS/SSL 프로토콜 목록을 지정합니다.
주의공격에 취약하므로
SSL
프로토콜 버전을 활성화하지 마십시오.TLS
프로토콜 버전만 사용합니다.
사용 가능한 프로토콜 및 암호화 제품군에 대한 자세한 내용은 적절한 JVM 문서 및 보안 공급자 설명서를 참조하십시오. 예를 들어 Java 8의 경우 JDK 8용 Java 암호화 아키텍처 Oracle 공급자 설명서를 참조하십시오.
3.5. 보안 콘솔에 연결 링크 복사링크가 클립보드에 복사되었습니다!
Pax 웹 구성 파일에서 server에 대한 SSL 보안을 구성한 후 다음 URL을 검색하여 Fuse Console을 열 수 있어야 합니다.
https://localhost:8443/hawtio
https://localhost:8443/hawtio
이 URL에 http:
대신 https:
스키마를 입력해야 합니다.
처음에 브라우저에서 신뢰할 수 없는 인증서를 사용한다고 경고합니다. 이 경고를 건너뛰면 Fuse Console의 로그인 화면이 표시됩니다.
3.6. 고급 Cryostat 구성 링크 복사링크가 클립보드에 복사되었습니다!
3.6.1. IO 구성 링크 복사링크가 클립보드에 복사되었습니다!
PAXWEB-1255부터 리스너가 사용하는 XNIO 작업자 및 버퍼 풀의 구성을 변경할 수 있습니다. undertow.xml 템플릿에는 일부 IO 관련 매개변수의 기본값을 지정하는 섹션이 있습니다.
다음 buffer-pool
매개변수를 지정할 수 있습니다.
buffer-size
- IO 작업에 사용되는 버퍼의 크기를 지정합니다. 지정하지 않으면 사용 가능한 메모리에 따라 크기가 계산됩니다.
direct-buffers
- java.nio.ByteBuffer#allocateDirect 또는 java.nio.ByteBuffer#allocate를 사용해야 하는지 여부를 결정합니다.
다음 작업자
매개변수를 지정할 수 있습니다.
io-threads
- 작업자에 대해 생성할 I/O 스레드 수입니다. 지정하지 않으면 스레드 수가 CPU 수 × 2로 설정됩니다.
task-core-threads
- 코어 작업 스레드 풀의 스레드 수입니다.
task-max-threads
- 작업자 작업 스레드 풀의 최대 스레드 수입니다. 지정하지 않으면 최대 스레드 수가 CPU 수 × 16으로 설정됩니다.
3.6.2. 작업자 IO 구성 링크 복사링크가 클립보드에 복사되었습니다!
Cryostat 스레드 풀과 해당 이름은 서비스별 또는 번들 기준으로 구성할 수 있으므로 Hawtio 콘솔에서 모니터링하고 디버깅을 보다 효율적으로 수행할 수 있습니다.
번들 블루프린트 구성 파일(일반적으로 Maven 프로젝트의 src/main/resources/OSGI-INF/blueprint
디렉터리에 저장됨)에서 다음 예와 같이 workerIOName 및 ThreadPool을 구성할 수 있습니다.
예 3.1. httpu:engine-factory 요소가 workerIOName 및 ThreadPool 구성
<httpu:engine-factory> <httpu:engine port="9001"> <httpu:threadingParameters minThreads="99" maxThreads="777" workerIOThreads="8" workerIOName="WorkerIOTest"/> </httpu:engine> </httpu:engine-factory>
<httpu:engine-factory>
<httpu:engine port="9001">
<httpu:threadingParameters minThreads="99" maxThreads="777" workerIOThreads="8" workerIOName="WorkerIOTest"/>
</httpu:engine>
</httpu:engine-factory>
다음의 threadingParameters
를 지정할 수 있습니다.
minThreads
- 작업자 작업 스레드 풀에 대한 "코어" 스레드 수를 지정합니다. 일반적으로 이는 CPU 코어당 최소 10개 이상 높은 수준이어야 합니다.
maxThreads
- 작업자 작업 스레드 풀에 대한 최대 스레드 수를 지정합니다.
다음 작업자
매개변수를 지정할 수 있습니다.
workerIOThreads
- 작업자에 대해 생성할 I/O 스레드 수를 지정합니다. 지정하지 않으면 기본값이 선택됩니다. CPU 코어당 하나의 IO 스레드가 적절한 기본값입니다.
workerIOName
- 작업자의 이름을 지정합니다. 지정하지 않으면 기본 "XNIO-1"이 선택됩니다.
4장. Camel ActiveMQ 구성 요소 보안 링크 복사링크가 클립보드에 복사되었습니다!
초록
Camel ActiveMQ 구성 요소를 사용하면 Apache ActiveMQ 브로커에 연결할 수 있는 경로에 JMS 끝점을 정의할 수 있습니다. Camel ActiveMQ 엔드포인트를 보호하려면 보안 연결 팩토리를 사용하는 Camel ActiveMQ 구성 요소의 인스턴스를 생성해야 합니다.
4.1. 보안 ActiveMQ 연결 Cryostat 링크 복사링크가 클립보드에 복사되었습니다!
4.1.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
Apache Camel은 경로에서 Apache ActiveMQ 엔드포인트를 정의하는 데 필요한 Apache ActiveMQ 구성 요소를 제공합니다. Apache ActiveMQ 끝점은 효과적으로 브로커의 Java 클라이언트이며 소비자 끝점(일반적으로 JMS 메시지에 폴링할 경로 시작 시 사용)을 정의하거나 생산자 엔드포인트를 정의합니다(일반적으로 JMS 메시지를 브로커에 보내기 위해 경로의 중간 또는 중간에서 사용됨).
원격 브로커가 보안(SSL 보안, JAAS 보안 또는 둘 다)인 경우 Apache ActiveMQ 구성 요소를 필수 클라이언트 보안 설정으로 구성해야 합니다.
4.1.2. 보안 속성 프로그래밍 링크 복사링크가 클립보드에 복사되었습니다!
Apache ActiveMQ를 사용하면 ActiveMQSslConnectionFactory
JMS 연결 팩토리 인스턴스를 생성하고 구성하여 SSL 보안 설정(및 JAAS 보안 설정)을 프로그래밍할 수 있습니다. JMS 연결 팩토리를 프로그래밍하는 것은 OSGi, J2EE, Tomcat 등과 같은 컨테이너 컨텍스트에서 사용하는 올바른 접근 방식입니다. 이러한 설정은 JMS connection 팩토리 인스턴스를 사용하여 애플리케이션에 로컬이기 때문입니다.
독립 실행형 브로커는 Java 시스템 속성을 사용하여 SSL 설정을 구성할 수 있습니다. 그러나 컨테이너에 배포된 클라이언트의 경우 구성은 전체 OSGi 컨테이너가 아닌 개별 번들에만 적용되어야 하므로 실용적인 접근 방식은 아닙니다. Camel ActiveMQ 끝점은 효과적으로 일종의 Apache ActiveMQ Java 클라이언트이므로 이 제한 사항은 Camel ActiveMQ 엔드포인트에도 적용됩니다.
4.1.3. 보안 연결 팩토리 정의 링크 복사링크가 클립보드에 복사되었습니다!
예 4.1. “보안 연결 프로비저닝” 블루프린트에서 보안 연결 팩토리 8080을 생성하여 SSL/TLS 보안 및 JAAS 인증을 모두 활성화하는 방법을 보여줍니다.
예 4.1. 보안 연결 프로비저닝
다음 속성은 ActiveMQSslConnectionFactory
클래스에 지정됩니다.
brokerURL
- 연결할 원격 브로커의 URL입니다. 이 예에서는 로컬 호스트의 SSL 사용 OpenWire 포트에 연결됩니다. 브로커는 호환 포트 설정을 사용하여 해당 전송 커넥터도 정의해야 합니다.
사용자 이름
및암호
-
유효한 JAAS 로그인 자격 증명,
사용자 이름
및암호
. trustStore
-
SSL 연결에 대한 인증서 신뢰 저장소를 포함하는 Java 키 저장소 파일의 위치입니다. 위치는 classpath 리소스로 지정됩니다. 상대 경로가 지정되면 리소스 위치는 classpath의
org/jbossfuse/example
디렉터리를 기준으로 합니다. trustStorePassword
- 신뢰 저장소가 포함된 키 저장소 파일의 잠금을 해제하는 암호입니다.
keyStore
및 keyStorePassword
속성을 지정할 수도 있지만, SSL 상호 인증이 활성화된 경우에만 필요합니다(SSL 핸드셰이크 중에 클라이언트가 X.509 인증서를 브로커에 제공하는 경우).
4.2. Camel ActiveMQ 구성의 예 링크 복사링크가 클립보드에 복사되었습니다!
4.2.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 샘플 Camel ActiveMQ 구성 요소 인스턴스를 초기화하고 구성하는 방법을 설명합니다. 이 인스턴스를 사용하여 Camel 경로에서 ActiveMQ 엔드포인트를 정의할 수 있습니다. 이를 통해 Camel 경로가 브로커에서 메시지를 보내거나 받을 수 있습니다.
4.2.2. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
Camel ActiveMQ 구성 요소에 필요한 번들을 정의하는 camel-activemq
기능은 기본적으로 설치되지 않습니다. camel-activemq
기능을 설치하려면 다음 console 명령을 입력합니다.
JBossFuse:karaf@root> features:install camel-activemq
JBossFuse:karaf@root> features:install camel-activemq
4.2.3. Camel ActiveMQ 구성 요소 샘플 링크 복사링크가 클립보드에 복사되었습니다!
다음 블루프린트 샘플은 SSL/TLS 보안 및 JAAS 인증이 모두 활성화된 Camel ActiveMQ 구성 요소의 전체 구성을 보여줍니다. Camel ActiveMQ 구성 요소 인스턴스는 activemqssl
8080 ID를 사용하여 에 정의되어 있습니다. 즉, Camel 경로에서 엔드포인트를 정의할 때 사용하는 activemqssl
스키마와 연결되어 있습니다.
4.2.4. Camel 경로 샘플 링크 복사링크가 클립보드에 복사되었습니다!
다음 Camel 경로는 이전 예에 정의된 Camel ActiveMQ 구성 요소를 참조하는 데 activemqssl
스키마를 사용하여 브로커의 security.test
큐에 안전하게 메시지를 보내는 샘플 끝점을 정의합니다.
5장. Camel CXF 구성 요소 보안 링크 복사링크가 클립보드에 복사되었습니다!
초록
이 장에서는 Camel CXF 프록시 데모를 시작점으로 사용하여 Camel CXF 엔드포인트에서 SSL/TLS 보안을 활성화하는 방법을 설명합니다. Camel CXF 구성 요소를 사용하면 Apache CXF 엔드포인트를 Apache Camel 경로에 추가할 수 있습니다. 이를 통해 Apache Camel에서 웹 서비스를 시뮬레이션하거나 WS 클라이언트와 웹 서비스 간에 경로를 인터푸핑하여 추가 처리(여기에 고려됨)를 수행할 수 있습니다.
5.1. Camel CXF 프록시 데모 링크 복사링크가 클립보드에 복사되었습니다!
5.1.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
OSGi에서 Camel CXF 엔드포인트를 보호하는 방법을 설명하기 위해 이 튜토리얼은 Camel CXF 프록시 인 Apache Camel의 독립 실행형 배포에서 제공되는 예를 기반으로 합니다. 그림 5.1. “Camel CXF 프록시 개요” 이 데모의 작동 방식에 대한 개요 제공
그림 5.1. Camel CXF 프록시 개요
RealWebServiceBean
에 의해 구현되는 보고서 사고는 사고(예: 트래픽 사고)의 세부 정보를 수신하고 클라이언트에 추적 코드를 반환합니다. 그러나 WS 클라이언트는 요청을 실제 웹 서비스로 직접 전송하는 대신 WS 클라이언트와 실제 웹 서비스 간에 서로 배치되는 Camel CXF 엔드포인트에 연결합니다. Apache Camel 경로는 실제 웹 서비스로 전달하기 전에 WSDL 메시지에서 일부 처리를 수행합니다.
SSL/TLS 보안을 활성화하는 경우 Poodle 취약점(CVE-2014-3566) 으로부터 보호하기 위해 SSLv3 프로토콜을 명시적으로 비활성화해야 합니다. 자세한 내용은 JBoss Fuse 6.x 및 JBoss A-MQ 6.x에서 SSLv3 비활성화 를 참조하십시오.
5.1.2. 수정 링크 복사링크가 클립보드에 복사되었습니다!
OSGi 컨텍스트에서 Camel CXF 엔드포인트에서 SSL/TLS를 활성화하는 방법을 설명하기 위해 이 장에서는 다음과 같이 기본 데모를 수정하는 방법에 대한 지침을 설명합니다.
- WS 클라이언트와 Camel CXF 끝점 간의 연결 시 SSL/TLS 보안이 활성화됩니다.
-
Apache Camel 경로와
RealWebServiceBean
Quarkus는 모두 OSGi 컨테이너에 배포됩니다.
5.1.3. 데모 코드 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
Camel CXF 프록시 데모는 InstallDir/extras
디렉터리에 포함된 Apache Camel의 독립 실행형 배포에서만 사용할 수 있습니다. 표준 아카이브 유틸리티를 사용하여 Camel 아카이브 파일을 확장하고 파일 시스템의 편리한 위치로 콘텐츠를 추출합니다.
CamelInstallDir 에 Apache Camel을 설치했다고 가정하면 다음 디렉터리에서 Camel CXF 프록시 데모를 찾을 수 있습니다.
CamelInstallDir/examples/camel-example-cxf-proxy
CamelInstallDir/examples/camel-example-cxf-proxy
5.1.4. 샘플 인증서 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
이 데모에는 X.509 인증서가 필요합니다. 실제 배포에서는 개인 인증 기관을 사용하여 이러한 인증서를 직접 생성해야 합니다. 그러나 이 데모에서는 Apache CXF wsdl_first_http
예제의 일부 샘플 인증서를 사용합니다. 이 데모는 InstallDir/extras
디렉터리에 포함된 Apache CXF의 독립 실행형 배포에서 사용할 수 있습니다. 표준 아카이브 유틸리티를 사용하여 CXF 아카이브 파일을 확장하고 파일 시스템의 편리한 위치로 콘텐츠를 추출합니다.
CXFInstallDir 에 Apache CXF를 설치했다고 가정하면 다음 디렉터리에서 wsdl_first_http
데모를 찾을 수 있습니다.
CXFInstallDir/samples/wsdl_first_http
CXFInstallDir/samples/wsdl_first_http
5.1.5. WSDL 계약의 물리적 부분 링크 복사링크가 클립보드에 복사되었습니다!
WSDL 계약의 물리적 부분은 wsdl:service
및 wsdl:port
요소를 나타냅니다. 이러한 요소는 특정 웹 서비스 끝점에 연결하는 데 필요한 전송 세부 정보를 지정합니다. 이 데모의 목적을 위해 이는 계약의 가장 흥미로운 부분이며 예 5.1. “ReportIncidentEndpointService WSDL Service” 에 표시됩니다.
예 5.1. ReportIncidentEndpointService WSDL Service
애플리케이션 코드가 주소 URL의 기본값을 재정의하므로 WSDL 계약( soap:address
요소의 위치
특성 값)에 나타나는 주소 URL은 중요하지 않습니다.
5.1.6. 자세한 내용은 WSDL 주소 지정 링크 복사링크가 클립보드에 복사되었습니다!
WS 클라이언트에는 WSDL 서비스 이름, WSDL 포트 이름 및 웹 서비스 의 주소 URL 이라는 세 가지 정보가 필요합니다. 다음 주소 지정 세부 사항은 프록시 웹 서비스 및 실제 웹 서비스에 연결하는 데 사용됩니다.
- WSDL 서비스 이름
WSDL 서비스의 전체 QName은 다음과 같습니다.
{http://reportincident.example.camel.apache.org}ReportIncidentEndpointService
{http://reportincident.example.camel.apache.org}ReportIncidentEndpointService
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - WSDL 포트 이름
WSDL 포트의 전체 QName은 다음과 같습니다.
{http://reportincident.example.camel.apache.org}ReportIncidentEndpoint
{http://reportincident.example.camel.apache.org}ReportIncidentEndpoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 주소 URL
프록시 웹 서비스 끝점의 주소 URL(HTTPS 프로토콜 사용)은 다음과 같습니다.
https://localhost:9080/camel-example-cxf-proxy/webservices/incident
https://localhost:9080/camel-example-cxf-proxy/webservices/incident
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고이전 주소는 번들의 Spring 구성 파일의
cxf:cxfEndpoint
요소,src/main/resources/META-INF/spring/camel-config.xml
을 사용하여reportIncident
scaling을 생성할 때 지정됩니다.실제 웹 서비스 끝점의 주소 URL(HTTP 프로토콜 사용)은 다음과 같습니다.
http://localhost:9081/real-webservice
http://localhost:9081/real-webservice
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고이전 주소는 번들의 Spring 구성 파일인
src/main/resources/META-INF/spring/camel-config.xml
에realWebService
RAM이 생성될 때 지정됩니다.
5.2. 웹 서비스 프록시 보안 링크 복사링크가 클립보드에 복사되었습니다!
5.2.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 실제 웹 서비스의 프록시 역할을 하는 Camel CXF 엔드포인트에서 SSL/TLS 보안을 활성화하는 방법을 설명합니다. 이미 X.509 인증서를 사용할 수 있다고 가정하면 필요한 모든 것은 Spring 구성 파일에 구성 데이터 블록을 추가하는 것입니다(구성 데이터가 httpj:engine-factory
요소에 포함됨). 여기에는 약간의 미묘한 측면만 있습니다. 그러나 Camel CXF 엔드포인트가 SSL/TLS 구성 세부 정보와 어떻게 연관되는지 이해해야 합니다.
5.2.2. 암시적 구성 링크 복사링크가 클립보드에 복사되었습니다!
WS 끝점은 Spring에서 끝점을 생성한 다음 해당 Cryostat 컨테이너에서 SSL/TLS 속성을 구성하여 구성할 수 있습니다. 그러나 다음과 같은 이유로 구성이 다소 혼란스러울 수 있습니다. 그러나 다음과 같은 이유로 (Suppj :engine-factory
요소에 의해 구성된 컨테이너) 는 포함된 WS 끝점을 명시적으로 참조하지 않으며 WS 끝점은 다른 컨테이너를 명시적으로 참조하지 않습니다. WS Endpoint Implicitly Configured by httpj:engine-factory 에 설명된 대로 동일한 TCP 포트를 사용하도록 구성되어 있으므로 컨테이너 컨테이너와 포함된 끝점 간의 연결이 암시적으로 설정됩니다.
WS Endpoint Implicitly Configured by httpj:engine-factory
Element
Element
웹 서비스 엔드포인트와 httpj:engine-factory
요소 간의 연결은 다음과 같이 설정됩니다.
-
Spring 컨테이너는
httpj:engine-factory
요소가 포함된 파일을 로드하고 구문 분석합니다. -
httpj:engine-factory
8080이 생성되면 레지스트리에 해당 항목이 생성되어, metrics에 대한 참조를 저장합니다.httpj:engine-factory
Cryostat는 지정된 TCP 포트에서 수신 대기하는 container를 초기화하는 데도 사용됩니다. -
WS 끝점이 생성되면 레지스트리를 검사하여 엔드포인트 주소 URL에서 TCP 포트와 동일한 TCP 포트가 있는
httpj:engine-factory
8080을 찾을 수 있는지 확인합니다. - 빈 중 하나가 끝점의 TCP 포트와 일치하면 WS 엔드포인트가 해당 Cryostat 컨테이너에 자체적으로 설치됩니다. Cryostatty 컨테이너에 SSL/TLS가 활성화된 경우 WS 엔드포인트는 이러한 보안 설정을 공유합니다.
5.2.3. SSL/TLS 보안을 컨테이너에 추가하는 단계 링크 복사링크가 클립보드에 복사되었습니다!
SSL/TLS 보안을 컨테이너에 추가하여 WS 프록시 끝점을 보호하려면 다음 단계를 수행합니다.
5.2.4. 번들 리소스에 인증서 추가 링크 복사링크가 클립보드에 복사되었습니다!
이 데모에 사용된 인증서는 Apache CXF 3.3.6.fuse-7_11_1-00015-redhat-00002 제품의 샘플에서 가져옵니다. ( InstallDir/extras/
디렉토리에서 사용 가능) Apache CXF의 독립 실행형 버전을 설치하는 경우 CXFInstallDir/samples/wsdl_first_https/src/main/config
디렉터리에서 샘플 인증서를 찾을 수 있습니다.
CXFInstallDir/samples/wsdl_first_https/src/main/config
디렉터리의 client
디렉터리에 복사합니다. Keystore.jk
키 저장소를CamelInstallDir/example-cxf-proxy/src/main/resources/certss
5.2.5. POM을 수정하여 리소스 필터링 전환 링크 복사링크가 클립보드에 복사되었습니다!
번들에 리소스로 직접 인증서를 포함하는 것이 가장 편리한 방법입니다. 그러나 Maven 프로젝트에서 인증서를 리소스로 배포할 때 Maven 리소스 필터링을 비활성화하여 바이너리 파일이 손상됩니다.
Maven에서 .jks
파일 필터링을 비활성화하려면 텍스트 편집기를 사용하여 프로젝트 POM 파일인 CamelInstallDir/examples/camel-example-cxf-proxy/pom.xml
을 열고 다음 resources
요소를 빌드
요소의 하위로 추가합니다.
5.2.6. CXF 버스 인스턴스화 링크 복사링크가 클립보드에 복사되었습니다!
Spring XML에서 명시적으로 CXF 버스를 인스턴스화해야 합니다(다음 단계에서 httpj:engine-factory
요소에 의해 인스턴스화되는 컨테이너는). src/main/resources/META-INF/spring
디렉토리에서 camel-config.xml
파일을 편집하여 다음과 같이 cxfcore:bus
요소를 빈
요소의 자식으로 추가합니다.
<beans ... > ... <cxfcore:bus/> ... </beans>
<beans ... >
...
<cxfcore:bus/>
...
</beans>
cxfcore:
네임스페이스 접두사는 이후 단계에서 정의됩니다.
5.2.7. Spring에 httpj:engine-factory 요소 추가 링크 복사링크가 클립보드에 복사되었습니다!
configuration
configuration
SSL/TLS 보안을 사용하도록 TCP 포트 9080에서 수신 대기하는 Cryostat 컨테이너를 구성하려면 예 5.2. “httpj:engine-factory Element with SSL/TLS enabled” 에 표시된 대로 src/main/resources/META-INF/spring
디렉터리에서 camel-config.xml
파일을 편집하여 httpj:engine-factory
요소를 추가합니다.
이 예에서 sec:clientAuthentication
요소의 required
속성이 false
로 설정되어 있습니다. 즉, SSL/TLS 핸드셰이크 중에 X.509 인증서를 서버에 제공할 필요가 없습니다 (이러한 인증서가 있는 경우 그렇게 할 수 있음).
예 5.2. httpj:engine-factory Element with SSL/TLS enabled
5.2.8. cxfcore:, sec: 및 httpj: 접두사를 정의합니다. 링크 복사링크가 클립보드에 복사되었습니다!
camel-config.xml
파일의 beans
요소에 다음 강조 표시된 행을 추가하여
요소 정의 및 cxfcore:
bus
요소의 정의에 표시되는 cxfcore: , httpj:
engine-factorysec:
namespace 접두사를 정의합니다.
xsi:schemaLocation
속성에서 http://cxf.apache.org/configuration/security
스키마의 위치와 http://cxf.apache.org/transports/http-jetty/configuration
스키마를 지정해야 합니다. 이는 OSGi 컨테이너에서 자동으로 제공되지 않습니다.
5.2.9. HTTPS를 사용하도록 프록시 주소 URL 수정 링크 복사링크가 클립보드에 복사되었습니다!
Apache Camel 경로 시작 시 프록시 끝점은 camel-config.xml
파일의 cxf:cxfEndpoint
요소에 의해 구성됩니다. 기본적으로 이 프록시 끝점은 HTTP 프로토콜을 사용하도록 구성되어 있습니다. 그러나 대신 보안 HTTPS 프로토콜을 사용하도록 주소 URL을 수정해야 합니다. camel-config.xml
파일에서 다음 조각에 표시된 대로 cxf:cxfEndpoint
요소의 address 속성을 편집하여 http:
접두사를 https:
접두사로 교체합니다.
또한 주소 URL은 TCP 포트 ${proxy.port}
(기본적으로 값 9080
)를 사용하도록 구성되어 있습니다. 이 TCP 포트 값은 http:engine-factory
요소로 구성된 컨테이너의 값과 동일하므로 이 엔드포인트가 Cryostat 컨테이너에 배포되도록 합니다. cxf:cxfEndpoint
의 속성은 “자세한 내용은 WSDL 주소 지정” 에 설명된 대로 WSDL 주소 지정 세부 정보를 지정합니다.
serviceName
- WSDL 서비스 이름을 지정합니다.
endpointName
- WSDL 포트 이름을 지정합니다.
address
- 프록시 웹 서비스의 주소 URL을 지정합니다.
5.3. Apache Camel 경로 배포 링크 복사링크가 클립보드에 복사되었습니다!
5.3.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
기본 Camel CXF 프록시 데모의 Maven POM 파일은 OSGi 번들을 생성하도록 이미 구성되어 있습니다. 따라서 Maven을 사용하여 데모를 빌드한 후 데모 번들(Apache Camel 경로 및 RealWebServicesBean
VLAN 포함)을 OSGi 컨테이너에 배포할 준비가 되었습니다.
5.3.2. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
OSGi 컨테이너에 Apache Camel 경로를 배포하기 전에 이전 섹션인 5.2절. “웹 서비스 프록시 보안” 에 설명된 대로 SSL/TLS 보안을 사용하도록 프록시 웹 서비스를 구성해야 합니다.
5.3.3. Camel 경로 배포 단계 링크 복사링크가 클립보드에 복사되었습니다!
OSGi 컨테이너에 웹 서비스 프록시 데모를 배포하려면 다음 단계를 수행합니다.
5.3.4. 데모 빌드 링크 복사링크가 클립보드에 복사되었습니다!
Maven을 사용하여 데모를 OSGi 번들로 빌드하고 설치합니다. 명령 프롬프트를 열고 현재 디렉터리를 CamelInstallDir/examples/camel-example-cxf-proxy
로 전환한 다음 다음 명령을 입력합니다.
mvn install -Dmaven.test.skip=true
mvn install -Dmaven.test.skip=true
5.3.5. OSGi 컨테이너 시작 링크 복사링크가 클립보드에 복사되었습니다!
아직 수행하지 않은 경우 새 명령 프롬프트에 다음 명령을 입력하여 Karaf 콘솔(및 컨테이너 인스턴스)을 시작합니다.
./fuse
./fuse
5.3.6. 필요한 기능 설치 링크 복사링크가 클립보드에 복사되었습니다!
Camel/CXF 구성 요소에 필요한 번들을 정의하는 camel-cxf
기능은 기본적으로 설치되지 않습니다. camel-cxf
기능을 설치하려면 다음 console 명령을 입력합니다.
JBossFuse:karaf@root> features:install camel-cxf
JBossFuse:karaf@root> features:install camel-cxf
Camel/HTTP 구성 요소에 필요한 번들을 정의하는 camel-http
기능도 필요합니다. camel-http
기능을 설치하려면 다음 console 명령을 입력합니다.
JBossFuse:karaf@root> features:install camel-http
JBossFuse:karaf@root> features:install camel-http
5.3.7. 번들 배포 링크 복사링크가 클립보드에 복사되었습니다!
다음 console 명령을 입력하여 camel-example-cxf-proxy
번들을 배포합니다.
JBossFuse:karaf@root> install -s mvn:org.apache.camel/camel-example-cxf-proxy/2.23.2.fuse-7_11_1-00015-redhat-00002
JBossFuse:karaf@root> install -s mvn:org.apache.camel/camel-example-cxf-proxy/2.23.2.fuse-7_11_1-00015-redhat-00002
이 경우 콘솔 화면에 번들 출력을 볼 수 있도록 핫 배포를 사용하는 대신 install
을 사용하여 직접 번들을 배포하는 것이 좋습니다.
mvn
URL 핸들러를 사용하는 데 어려움이 있는 경우 설정 방법에 대한 자세한 내용은 olink: CryostatOSGiGuide/UrlHandlers-Maven 를 참조하십시오.
5.3.8. 콘솔 출력 확인 링크 복사링크가 클립보드에 복사되었습니다!
번들이 성공적으로 배포되면 콘솔 창에 다음과 같은 출력이 표시됩니다.
JBossFuse:karaf@root> Starting real web service... Started real web service at: http://localhost:9081/real-webservice
JBossFuse:karaf@root> Starting real web service...
Started real web service at: http://localhost:9081/real-webservice
5.4. 웹 서비스 클라이언트 보안 링크 복사링크가 클립보드에 복사되었습니다!
5.4.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
기본 Camel CXF 프록시 데모에서 Web 서비스 클라이언트는 실제로 src/test
디렉터리에 JUnit 테스트로 구현됩니다. 즉, mvn test
를 사용하여 클라이언트를 쉽게 실행할 수 있습니다. 클라이언트에서 SSL/TLS 보안을 활성화하기 위해 테스트 클라이언트의 Java 구현은 완전히 교체되고 SSL/TLS 구성이 포함된 Spring 파일이 src/test/resources/META-INF/spring
디렉터리에 추가됩니다. 클라이언트를 설정하기 위해 수행해야 하는 단계를 설명하기 전에 이 섹션에서는 클라이언트의 Java 코드 및 Spring 구성에 대한 몇 가지 세부 사항을 설명합니다.
5.4.2. 암시적 구성 링크 복사링크가 클립보드에 복사되었습니다!
엔드포인트 주소의 URL 스키마를 https
로 변경하는 것 외에도 클라이언트 프록시에서 SSL/TLS 보안을 활성화하는 대부분의 구성은 Spring 구성의 http:conduit
요소에 포함됩니다. 그러나 이 구성이 클라이언트 프록시에 적용되는 방식은 다음과 같은 이유로 혼란스러울 수 있습니다. http:conduit
요소는 클라이언트 프록시를 명시적으로 참조하지 않으며 클라이언트 프록시는 http:conduit
요소를 명시적으로 참조하지 않습니다. http:conduit
요소와 클라이언트 프록시 간의 연결은 모두 클라이언트 프록시 Implicitly configured by http:conduit 에 설명된 대로 동일한 WSDL 포트를 참조하도록 암시적으로 설정됩니다.
클라이언트 프록시 Implicitly configured by http:conduit
Element
Element
클라이언트 프록시와 http:conduit
요소 간의 연결은 다음과 같이 설정됩니다.
-
클라이언트는
http:conduit
요소가 포함된 Spring 구성 파일을 로드하고 구문 분석합니다. -
http:conduit
8080이 생성되면 레지스트리에 해당 항목이 생성되고, 해당 항목은 지정된 WSDL 포트 이름 아래에 빈에 대한 참조를 저장합니다(이름이 QName 형식으로 저장되어 있음). -
Cryostat-WS 클라이언트 프록시가 생성되면 레지스트리를 검사하여 프록시의 WSDL 포트 이름과 연결된
http:conduit
entries를 찾을 수 있는지 확인합니다. 이러한 빈을 찾으면 구성 세부 정보를 프록시에 자동으로 삽입합니다.
5.4.3. 클라이언트 측에 필요한 인증서 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트는 src/main/resources/certs
디렉터리의 clientKeystore.jks
키 저장소 파일로 구성됩니다. 이 키 저장소에는 다음과 같이 두 개의 항목이 포함되어 있습니다.
- 신뢰할 수 있는 인증서 항목
- 서버 인증서와 클라이언트 인증서 모두를 발행하고 서명한 CA 인증서가 포함된 신뢰할 수 있는 인증서 항목입니다.
- 개인 키 항목
- 클라이언트 자체 X.509 인증서 및 개인 키가 포함된 개인 키 항목입니다. 실제로 이 인증서는 현재 예제를 실행하는 데 반드시 필요한 것은 아닙니다. 서버에 TLS 핸드셰이크 중에 인증서를 전송할 필요가 없기 때문입니다( 예 5.2. “httpj:engine-factory Element with SSL/TLS enabled”참조).
5.4.4. 클라이언트에 Spring 정의 로드 링크 복사링크가 클립보드에 복사되었습니다!
예제 클라이언트는 Spring 컨테이너에 직접 배포되지 않지만 보안 HTTP conduit를 정의하려면 일부 Spring 정의가 필요합니다. 그렇다면 Spring 컨테이너 없이 Spring 정의를 생성하려면 어떻게 해야 합니까? org.apache.cxf.bus.spring.SpringBusFactory
클래스를 사용하여 Java 기반 클라이언트에 Spring 정의를 쉽게 읽을 수 있습니다.
다음 코드는 META-INF/spring/cxf-client.xml
파일에서 Spring 정의를 읽고 해당 정의를 통합하는 Apache CXF Bus 오브젝트를 생성하는 방법을 보여줍니다.
5.4.5. 클라이언트 프록시 생성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 WSDL 프록시를 생성하는 방법에는 여러 가지가 있습니다. WSDL 파일의 내용을 기반으로 프록시를 생성하기 위해 Cryostat-WS API를 사용하여 WSDL 파일 없이 프록시를 생성할 수 있습니다. 또는 Apache CXF 관련 클래스인 JaxWsProxyFactoryBean
을 사용하여 프록시를 생성할 수 있습니다.
이 SSL/TLS 클라이언트의 경우 가장 편리한 방법은 다음 Java 샘플과 같이 WSDL 파일을 사용하지 않고 프록시를 생성하도록 하는 것입니다.
이 예제에서는 JaxWsProxyFactoryBean
접근 방식을 사용하여 프록시를 생성할 수 없습니다. 이러한 방식으로 생성된 프록시는 Spring 구성 파일에 지정된 HTTP conduit 설정을 찾지 못하기 때문입니다.
SERVICE_NAME
및 PORT_NAME
상수는 각각 예 5.1. “ReportIncidentEndpointService WSDL Service” 에 정의된 WSDL 서비스 및 WSDL 포트의 QNames입니다. ADDRESS_URL
문자열에는 프록시 웹 서비스 주소와 동일한 값이 있으며 다음과 같이 정의됩니다.
private static final String ADDRESS_URL = "https://localhost:9080/camel-example-cxf-proxy/webservices/incident";
private static final String ADDRESS_URL =
"https://localhost:9080/camel-example-cxf-proxy/webservices/incident";
특히 주소는 SSL/TLS를 통해 HTTP를 선택하는 URL 체계 https
를 사용하여 정의해야 합니다.
5.4.6. 클라이언트에 SSL/TLS 보안을 추가하는 단계 링크 복사링크가 클립보드에 복사되었습니다!
SSL/TLS 보안이 활성화된 Cryostat-WS 클라이언트를 정의하려면 다음 단계를 수행합니다.
5.4.7. Java 클라이언트를 테스트 케이스로 생성 링크 복사링크가 클립보드에 복사되었습니다!
예 5.3. “ReportIncidentRoutesTest Java 클라이언트” JUnit 테스트 케이스로 구현된 Java 클라이언트의 전체 코드를 표시합니다. 이 클라이언트는 예제/camel-example-cxf-proxy
데모의 src/test/java/org/apache/camel/example/reportincident
하위 디렉터리에 있는 ReportIncidentRoutesTest.java
.java를 대체합니다.
CamelInstallDir/examples/camel-example-cxf-proxy
데모에 클라이언트를 추가하려면 src/test/java/org/apache/camel/example/reportincident
sub-directory로 이동하여 기존 ReportIncidentRoutesTest.java
파일을 백업 위치로 이동한 다음 새 ReportIncidentRoutesTest.java
파일을 생성합니다. 예 5.3. “ReportIncidentRoutesTest Java 클라이언트”
예 5.3. ReportIncidentRoutesTest Java 클라이언트
5.4.8. Spring 구성에 http:conduit 요소 추가 링크 복사링크가 클립보드에 복사되었습니다!
예 5.4. “HTTP:conduit Element with SSL/TLS enabled” ReportIncidentEndpoint
WSDL 포트에 대한 http:conduit
요소를 정의하는 Spring 구성을 표시합니다. http:conduit
요소는 지정된 WSDL 포트를 사용하는 모든 클라이언트 프록시에 대해 SSL/TLS 보안을 사용하도록 구성되어 있습니다.
클라이언트 테스트 케이스에 Spring 구성을 추가하려면 src/test/resources/META-INF/spring
하위 디렉토리를 만들고 즐겨 찾는 텍스트 편집기를 사용하여 cxf-client.xml
을 생성한 다음 예 5.4. “HTTP:conduit Element with SSL/TLS enabled” 내용을 파일에 붙여넣습니다.
예 5.4. HTTP:conduit Element with SSL/TLS enabled
이전 구성에 대해서는 다음 사항에 유의하십시오.
-
http:
및sec:
namespace 접두사는http:conduit
요소를 정의하는 데 필요합니다.xsi:schemaLocation
요소에서는 해당http://cxf.apache.org/configuration/security
및http://cxf.apache.org/transports/http/configuration
네임스페이스의 위치를 지정해야 합니다. http:tlsClientParameters
요소의disableCNCheck
속성은true
로 설정됩니다. 즉, 클라이언트는 서버의 X.509 인증서의 일반 이름이 서버 호스트 이름과 일치하는지 확인하지 않습니다. 자세한 내용은 부록 A. 인증서 관리 에서 참조하십시오.중요프로덕션 배포에서는 CN 검사를 비활성화하는 것이 권장되지 않습니다.
sec:keystore
요소에서 인증서 위치는 classpath에서 인증서를 찾는resource
특성을 사용하여 지정됩니다. Maven이 테스트를 실행하면 classpath에서src/main/resources
의 콘텐츠를 자동으로 사용할 수 있으므로src/main/resources/certs
디렉터리에서 인증서를 읽을 수 있습니다.참고파일 시스템에서 보는
file
속성을 사용하여 인증서 위치를 지정하는 옵션도 있습니다. 그러나resource
속성은 번들에 패키지된 애플리케이션에서 사용하기에 더 적합합니다.sec:cipherSuitesFilter
요소는 일치하는 암호화 제품군을 제외하도록 구성됩니다.** 및 .*
. 이러한 암호화 제품군은 효과적으로 불완전하며 일반 용도로는 사용되지 않습니다.DH_ anon.\*
.* .*중요일치하는 암호를 항상 제외 하는 것이 좋습니다.* 및
.*
.DH_ anon.\*
.* .*-
서버 프로토콜과 일치하고 SSLv3 프로토콜을 사용하지 않도록
secureSocketProtocol
속성을 TLSv1로 설정하고POODLE 보안 취약점 (CVE-2014-3566)을 사용해야 합니다.
5.4.9. 클라이언트 실행 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트는 테스트 사례로 정의되므로 표준 Maven 테스트 목표를 사용하여 클라이언트를 실행할 수 있습니다. 클라이언트를 실행하려면 새 명령 창을 열고 CamelInstallDir/examples/camel-example-cxf-proxy
로 디렉토리를 변경하고 다음 Maven 명령을 입력합니다.
mvn test
mvn test
테스트가 성공적으로 실행되면 OSGi 콘솔 창에 다음 출력이 표시됩니다.
Incident was 123, changed to 456 Invoked real web service: id=456 by Claus Ibsen
Incident was 123, changed to 456
Invoked real web service: id=456 by Claus Ibsen
6장. Fuse Console 보안 링크 복사링크가 클립보드에 복사되었습니다!
독립 실행형 배포를 위해 다음 보안 기능을 구현하는 방법에 대한 자세한 내용은 Manage Fuse on Karaf Standalone 가이드에서 참조하십시오.
- 필요한 프로토콜로 HTTPS 설정
- 공개 키를 사용하여 응답 보안
- SSL/TLS 보안 활성화
- 사용자 액세스 제어
기본적으로 Fuse Console은 원격으로 액세스할 수 없습니다. Fuse Console에 원격으로 액세스하는 방법에 대한 자세한 내용은 Karaf Standalone 가이드의 Fuse 콘솔 잠금 해제 섹션을 참조하십시오.
7장. Red Hat Single Sign-On과의 통합 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Single Sign-On(RH-SSO) 옵션은 JAAS와 협력하여 Fuse 및 Fuse 관리 서비스(SSH, Cryostat 및 Fuse 관리 콘솔) 내에서 실행되는 특정 웹 클라이언트 애플리케이션 및 서비스에 대한 엔터프라이즈 보안을 제공합니다.
어댑터는 Red Hat Fuse의 다음 유형의 컨테이너에 대해 제공됩니다.
7.1. Spring Boot 컨테이너 어댑터 링크 복사링크가 클립보드에 복사되었습니다!
Spring Boot 컨테이너의 어댑터는 다음과 같은 임베디드 웹 컨테이너를 지원합니다.
- Cryostat
- Cryostatty
- Tomcat
Spring Boot 컨테이너용 Red Hat Single Sign-On 어댑터 설치 및 사용에 대한 자세한 내용은 Red Hat Single Sign-On Securing Applications and Services 가이드의 Spring Boot Adapter 를 참조하십시오.
7.2. Apache Karaf 컨테이너용 어댑터 링크 복사링크가 클립보드에 복사되었습니다!
Apache Karaf 컨테이너의 어댑터는 다음 구성 요소를 보호할 수 있습니다.
- Pax Web war Extender를 사용하여 Fuse에 배포된 클래식 WAR 애플리케이션.
-
Pax Web whiteboard Extender를 사용하여 Fuse에 OSGI 서비스로 배포되고 표준 OSGi Enterprise HTTP 서비스인
org.osgi.service.http.HttpService#registerServlet()
을 통해 등록된 서블릿입니다. - Camel Cryostat 구성 요소와 함께 실행되는 Apache Camel Cryostat 끝점.
- 자체적인 Cryostat 엔진에서 실행되는 Apache CXF 끝점.
- CXF 서블릿에서 제공하는 기본 엔진에서 실행되는 Apache CXF 끝점.
- SSH 및 Cryostat 관리자 액세스.
- Hawtio 관리 콘솔.
Apache Karaf 컨테이너의 Red Hat Single Sign-On 어댑터 설치 및 사용에 대한 자세한 내용은 Red Hat Single Sign-On Security Applications and Services Guide의 JBoss Fuse 7 Adapter 를 참조하십시오.
7.3. JBoss EAP 컨테이너 어댑터 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP(Enterprise Application Platform) 컨테이너의 어댑터는 WAR에 대한 보안을 제공하므로 URL에 대한 역할 기반 보안 제약 조건을 정의할 수 있습니다.
JBoss EAP 컨테이너용 Red Hat Single Sign-On 어댑터 설치 및 사용에 대한 자세한 내용은 Red Hat Single Sign-On 보안 애플리케이션 및 서비스 가이드의 JBoss EAP 어댑터 를 참조하십시오.
8장. LDAP 인증 튜토리얼 링크 복사링크가 클립보드에 복사되었습니다!
초록
이 튜토리얼에서는 X.500 디렉터리 서버를 설정하고 LDAP 인증을 사용하도록 OSGi 컨테이너를 구성하는 방법을 설명합니다.
8.1. 튜토리얼 개요 링크 복사링크가 클립보드에 복사되었습니다!
8.1.1. 목표 링크 복사링크가 클립보드에 복사되었습니다!
이 튜토리얼에서는 다음을 수행합니다.
- 389 Directory Server 설치
- LDAP 서버에 사용자 항목 추가
- 보안 역할을 관리할 그룹 추가
- LDAP 인증을 사용하도록 Fuse 구성
- 권한 부여에 역할을 사용하도록 Fuse 구성
- LDAP 서버에 대한 SSL/TLS 연결 구성
8.2. Directory Server 및 콘솔 설정 링크 복사링크가 클립보드에 복사되었습니다!
이 튜토리얼에서는 Fedora 389 Directory Server 프로젝트에서 X.500 디렉터리 서버 및 관리 콘솔을 설치하는 방법을 설명합니다. 389 Directory Server 인스턴스에 이미 액세스할 수 있는 경우 389 Directory Server 설치 지침을 건너뛰고 대신 389 관리 콘솔을 설치할 수 있습니다.
8.2.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux 플랫폼에 설치하는 경우 먼저 EPEL(Extra Packages for Enterprise Linux) 을 설치해야 합니다. fedoraproject.org
사이트의 RHEL/Cent OS/ EPEL (RHEL 6, RHEL 7, Cent OS 6, Cent OS7) 에서 설치 노트를 참조하십시오.
8.2.2. 389 Directory Server 설치 링크 복사링크가 클립보드에 복사되었습니다!
기존 389 Directory Server 인스턴스에 액세스할 수 없는 경우 다음과 같이 로컬 시스템에 389 Directory Server 를 설치할 수 있습니다.
Red Hat Enterprise Linux 및 Fedora 플랫폼에서는 표준
dnf
패키지 관리 유틸리티를 사용하여 389 Directory Server 를 설치합니다. 명령 프롬프트에서 다음 명령을 입력합니다(시스템에 대한 관리자 권한이 있어야 함).sudo dnf install 389-ds
sudo dnf install 389-ds
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고필요한
389-ds
및389-console
RPM 패키지는 Fedora, RHEL6+EPEL 및 CentOS7+EPEL 플랫폼에서 사용할 수 있습니다. 작성 당시 RHEL 7에서는389-console
패키지를 사용할 수 없습니다.389 디렉토리 서버 패키지를 설치한 후 다음 명령을 입력하여 디렉터리 서버를 구성합니다.
sudo setup-ds-admin.pl
sudo setup-ds-admin.pl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 스크립트는 대화형이며 389 디렉터리 서버에 대한 기본 구성 설정을 제공하라는 메시지를 표시합니다. 스크립트가 완료되면 백그라운드에서 389 디렉토리 서버를 자동으로 시작합니다.
- 389 Directory Server 를 설치하는 방법에 대한 자세한 내용은 다운로드 페이지를 참조하십시오.
8.2.3. 389 관리 콘솔 설치 링크 복사링크가 클립보드에 복사되었습니다!
389 Directory Server 인스턴스에 이미 액세스할 수 있는 경우 서버를 원격으로 로그인하고 관리할 수 있는 389 관리 콘솔만 설치해야 합니다. 다음과 같이 389 관리 콘솔을 설치할 수 있습니다.
Red Hat Enterprise Linux 및 Fedora 플랫폼에서는 표준
dnf
패키지 관리 유틸리티를 사용하여 389 관리 콘솔을 설치합니다. 명령 프롬프트에서 다음 명령을 입력합니다(시스템에 대한 관리자 권한이 있어야 함).sudo dnf install 389-console
sudo dnf install 389-console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Windows 플랫폼의경우 -
fedoraproject.org
에서 Windows 콘솔 다운로드 지침을 참조하십시오.
8.2.4. 콘솔에 서버에 연결 링크 복사링크가 클립보드에 복사되었습니다!
389 Directory Server Console을 LDAP 서버에 연결하려면 다음을 수행합니다.
389 관리 콘솔을 시작하려면 다음 명령을 입력합니다.
389-console
389-console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로그인 대화 상자가 나타납니다.
사용자 ID
및암호
필드에 LDAP 로그인 인증 정보를 입력하고 관리URL
필드의 호스트 이름을 사용자 지정하여 389 관리 서버 인스턴스에 연결합니다(포트9830
은 389 관리 서버 인스턴스의 기본 포트임).-
389 관리 콘솔 창이 표시됩니다.
서버 및 애플리케이션 탭을
선택합니다. 왼쪽 창에서
Directory Server
아이콘으로 드릴다운합니다.-
왼쪽 창에서
Directory Server
아이콘을 선택하고열기
를 클릭하여389 Directory Server Console
을 엽니다. -
389
에서 디렉터리 탭을 클릭하여 디렉터리 정보 트리(DIT)를 확인합니다.Directory
Server Console 루트 노드
YourDomain
(일반적으로 호스트 이름 다음에 이름이 지정되고 다음 스크린샷에localdomain
으로 표시됨)을 확장하여 DIT를 확인합니다.
8.3. 디렉터리 서버에 사용자 항목 추가 링크 복사링크가 클립보드에 복사되었습니다!
OSGi 컨테이너에서 LDAP 인증을 사용하기 위한 기본 전제 조건은 X.500 디렉터리 서버가 실행 중이고 사용자 항목 컬렉션으로 구성되어 있어야 합니다. 많은 사용 사례의 경우 사용자 역할을 관리하도록 여러 그룹을 구성해야 합니다.
8.3.1. 사용자 항목 추가 대체 링크 복사링크가 클립보드에 복사되었습니다!
LDAP 서버에 사용자 항목 및 그룹이 이미 정의되어 있는 경우 새 항목을 생성하는 대신 LDAPLoginModule
구성의 roles.mapping
속성을 사용하여 기존 LDAP 그룹을 JAAS 역할에 매핑하는 것을 선호할 수 있습니다. 자세한 내용은 2.1.7절. “JAAS LDAP 로그인 모듈”의 내용을 참조하십시오.
8.3.2. 목표 링크 복사링크가 클립보드에 복사되었습니다!
이 튜토리얼에서 다음을 수행합니다.
8.3.3. 사용자 항목 추가 링크 복사링크가 클립보드에 복사되었습니다!
다음 단계를 수행하여 디렉터리 서버에 사용자 항목을 추가합니다.
- LDAP 서버 및 콘솔이 실행 중인지 확인합니다. 8.2절. “Directory Server 및 콘솔 설정”을 참조하십시오.
Directory Server Console
의Directory
탭을 클릭하고 YourDomain 노드(여기서YourDomain
localdomain
으로 표시됨) 아래의People
노드로 드릴다운합니다.-
단계를 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 menu:[ > New >
User
> ]를 선택하여새 사용자 만들기
대화 상자를 엽니다. -
새
만들기 대화 상자의 왼쪽 창에서 사용자
탭을 선택합니다. 다음과 같이
User
탭의 필드를 작성합니다.-
첫 번째 이름
필드를존
으로 설정합니다. -
성
필드를Doe
로 설정합니다. -
User ID
필드를jdoe
로 설정합니다. -
암호 필드에
암호
password를 입력합니다. 암호
확인 필드에 암호
,시크릿
을 입력합니다.
-
- 를 클릭합니다.
3 에 따라
Jane Doe
사용자를 6 단계 에 추가합니다.5.e 에서 새 사용자의
사용자 ID
로janedoe
를 사용하고 암호 필드에 암호인secret
을 사용합니다.3 에 따라 사용자
Camel Rider
를 6 단계 에 추가합니다.5.e 에서 새 사용자의
사용자 ID
로crider
를 사용하고 암호 필드에 암호,시크릿
을 사용합니다.
8.3.4. 역할에 대한 그룹 추가 링크 복사링크가 클립보드에 복사되었습니다!
역할을 정의하는 그룹을 추가하려면 다음을 수행합니다.
-
Directory
Server ConsoleYourDomain
노드의그룹
노드를 드릴다운합니다. -
의
그룹
노드를 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 메뉴:[ > New >Group
> ]을 선택하여새 그룹 만들기
대화 상자를 엽니다. -
새 그룹 만들기
대화 상자의 왼쪽 창에서 탭을 선택합니다. :
일반
탭의 필드를 다음과 같이 입력합니다.-
그룹 이름
필드를admin
으로 설정합니다. 선택적으로
Description
필드에 설명을 입력합니다.
-
새 그룹 만들기
대화 상자의 왼쪽 창에서 탭을 선택합니다.-
추가
를 클릭하여사용자 및 그룹 검색
대화 상자를 엽니다. 검색
필드의 드롭다운 메뉴에서사용자를
선택하고검색
버튼을 클릭합니다.-
: 현재 표시되는 사용자 목록에서
존 Doe
를 선택합니다. -
사용자 및 그룹 검색
대화 상자를 닫습니다. 을 클릭하여 -
새 그룹 만들기
대화 상자를 닫습니다. 클릭하여 2 단계 에 따라
관리자
역할을 10단계 에 추가합니다.4단계 의
그룹 이름
필드에manager
를 입력합니다.8 단계 에서
Jane Doe
를 선택합니다.2 단계 에 따라
뷰어
역할을 10단계 에 추가합니다.4단계 의
그룹 이름
필드에viewer
를 입력합니다.8 단계 에서
Camel Rider
를 선택합니다.2 단계 에 따라
ssh
역할을 10단계 에 추가합니다.4단계 의
그룹 이름
필드에ssh
를 입력합니다.8 단계 에서 모든 사용자, Jo Doe
,
및Jane Doe
Camel Rider
를 선택합니다.
8.4. OSGi 컨테이너에서 LDAP 인증 활성화 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 OSGi 컨테이너에서 LDAP 영역을 구성하는 방법을 설명합니다. 컨테이너가 X.500 디렉터리 서버에 저장된 사용자 항목을 기반으로 인증 정보를 인증하도록 새 영역은 기본 karaf
영역을 재정의합니다.
8.4.1. 참고 자료 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 LDAP 인증에 대한 자세한 문서는 다음과 같습니다.
- LdapLoginModule 옵션- 2.1.7절. “JAAS LDAP 로그인 모듈” 에 자세히 설명되어 있습니다.
- 다른 디렉토리 서버에 대한 구성- 이 튜토리얼에서는 389-DS 만 다룹니다. Microsoft Active Directory와 같은 다른 디렉터리 서버를 구성하는 방법에 대한 자세한 내용은 “다른 디렉터리 서버의 필터 설정” 을 참조하십시오.
8.4.2. 독립 실행형 OSGi 컨테이너 절차 링크 복사링크가 클립보드에 복사되었습니다!
독립 실행형 OSGi 컨테이너에서 LDAP 인증을 활성화하려면 다음을 수행합니다.
- X.500 디렉터리 서버가 실행 중인지 확인합니다.
터미널 창에 다음 명령을 입력하여 Karaf 컨테이너를 시작합니다.
./bin/fuse
./bin/fuse
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
ldap-module.xml
이라는 파일을 생성합니다. 예 8.1. “독립 실행형용 JAAS Cryostat” 를
ldap-module.xml
에 복사합니다.예 8.1. 독립 실행형용 JAAS Cryostat
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ldap-module.xml
파일에서 다음 설정을 사용자 지정해야 합니다.- connection.url
-
이 URL을 디렉터리 서버 인스턴스의 실제 위치로 설정합니다. 일반적으로 이 URL의 형식은
ldap://Hostname:포트
입니다. 예를 들어 389 Directory Server의 기본 포트는 IP 포트389
입니다. - connection.username
-
디렉터리 서버에 대한 연결을 인증하는 데 사용되는 사용자 이름을 지정합니다. 389 Directory Server의 경우 기본값은 일반적으로
cn=Directory Manager
입니다. - connection.password
- 디렉터리 서버에 연결하기 위한 자격 증명의 암호 부분을 지정합니다.
- 인증
인증 프로토콜에 대해 다음 대안 중 하나를 지정할 수 있습니다.
-
간단히
말해 사용자 인증 정보가 제공되며 이 경우connection.username
및connection.password
옵션을 설정해야 합니다. none
은 인증이 수행되지 않음을 나타냅니다. 이 경우connection.username
및connection.password
옵션을 설정하지 않아야 합니다.이 로그인 모듈은
karaf
라는 JAAS 영역을 생성합니다. 이 영역은 Fuse에서 사용하는 기본 JAAS 영역과 동일한 이름입니다.순위
속성 값이0
보다 큰 이 영역을 재정의하면 순위가0
인 표준karaf
영역을 재정의합니다.LDAP를 사용하도록 Fuse를 구성하는 방법에 대한 자세한 내용은 2.1.7절. “JAAS LDAP 로그인 모듈” 을 참조하십시오.
중요위의 JAAS 속성을 설정할 때 속성 값을 큰따옴표로 묶 지 마십시오.
-
새 LDAP 모듈을 배포하려면
ldap-module.xml
을 Karaf 컨테이너의deploy/
디렉터리(hot deploy)에 복사합니다.LDAP 모듈이 자동으로 활성화됩니다.
참고이후 LDAP 모듈 배포를 취소해야 하는 경우 Karaf 컨테이너가 실행되는 동안
deploy/
디렉토리에서ldap-module.xml
파일을 삭제하여 이를 수행할 수 있습니다.
8.4.3. LDAP 인증 테스트 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 Karaf 클라이언트
유틸리티를 사용하여 실행 중인 컨테이너에 연결하여 새 LDAP 영역을 테스트합니다.
- 새 명령 프롬프트를 엽니다.
-
디렉토리를 Karaf
InstallDir/bin
디렉토리로 변경합니다. identity
jdoe
를 사용하여 실행 중인 컨테이너 인스턴스에 로그인하려면 다음 명령을 입력합니다../client -u jdoe -p secret
./client -u jdoe -p secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너의 원격 콘솔에 성공적으로 로그인해야 합니다. 명령 콘솔에서
jaas:
다음에 [Tab] 키를 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow jdoe
는 모든jaas
명령에 액세스할 수 있습니다(관리자
역할과 일치).-
logout
명령을 입력하여 원격 콘솔을 로그아웃합니다. identity
janedoe
를 사용하여 실행 중인 컨테이너 인스턴스에 로그인하려면 다음 명령을 입력합니다../client -u janedoe -p secret
./client -u janedoe -p secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너의 원격 콘솔에 성공적으로 로그인해야 합니다. 명령 콘솔에서
jaas:
다음에 [Tab] 키를 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow janedoe
는 거의 모든jaas
명령에 액세스할 수 있습니다(manager
역할과 일치).-
logout
명령을 입력하여 원격 콘솔을 로그아웃합니다. identity
crider
를 사용하여 실행 중인 컨테이너 인스턴스에 로그인하려면 다음 명령을 입력합니다../client -u crider -p secret
./client -u crider -p secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너의 원격 콘솔에 성공적으로 로그인해야 합니다. 명령 콘솔에서
jaas:
다음에 [Tab] 키를 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 마케터는 5개의
jaas
명령에만 액세스할 수 있습니다(예:뷰어 역할과
일치).-
logout
명령을 입력하여 원격 콘솔을 로그아웃합니다.
8.4.4. 문제 해결 링크 복사링크가 클립보드에 복사되었습니다!
LDAP 연결을 테스트하는 동안 문제가 발생하면 DEBUG
에 로깅 수준을 늘리면 LDAP 서버 연결에서 발생하는 상황을 자세히 추적할 수 있습니다.
다음 단계를 수행합니다.
Karaf 콘솔에서 다음 명령을 입력하여 로깅 수준을
DEBUG
로 늘립니다.log:set DEBUG
log:set DEBUG
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Karaf 로그를 실시간으로 관찰합니다.
log:tail
log:tail
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로그 목록에서 이스케이프하려면 Ctrl-C를 입력합니다.
부록 A. 인증서 관리 링크 복사링크가 클립보드에 복사되었습니다!
초록
TLS 인증은 X.509 인증서(애플리케이션 오브젝트를 인증하는 일반적이고 안전하며 신뢰할 수 있는 인증 방법)를 사용합니다. Red Hat Fuse 애플리케이션을 식별하는 X.509 인증서를 생성할 수 있습니다.
A.1. X.509 인증서란 무엇입니까? 링크 복사링크가 클립보드에 복사되었습니다!
A.1.1. 인증서의 역할 링크 복사링크가 클립보드에 복사되었습니다!
X.509 인증서는 이름을 공개 키 값에 바인딩합니다. 인증서의 역할은 공개 키를 X.509 인증서에 포함된 ID와 연결하는 것입니다.
A.1.2. 공개 키의 무결성 링크 복사링크가 클립보드에 복사되었습니다!
보안 애플리케이션의 인증은 애플리케이션 인증서의 공개 키 값의 무결성에 따라 달라집니다. 공개 키를 자체 공개 키로 교체하는 경우 true 애플리케이션을 가장하고 안전한 데이터에 액세스할 수 있습니다.
이러한 유형의 공격을 방지하려면 모든 인증서에 CA( 인증 기관 )에서 서명해야 합니다. CA는 인증서에 공개 키 값의 무결성을 확인하는 신뢰할 수 있는 노드입니다.
A.1.3. 디지털 서명 링크 복사링크가 클립보드에 복사되었습니다!
CA는 인증서에 디지털 서명을 추가하여 인증서에 서명합니다. 디지털 서명은 CA의 개인 키로 인코딩된 메시지입니다. CA의 공개 키는 CA의 인증서를 배포하여 애플리케이션에 사용할 수 있습니다. 애플리케이션은 CA의 공개 키로 CA의 디지털 서명을 디코딩하여 인증서가 유효한 서명인지 확인합니다.
제공된 데모 인증서는 자체 서명된 인증서입니다. 이러한 인증서는 모든 사용자가 개인 키에 액세스할 수 있기 때문에 안전하지 않습니다. 시스템을 보호하려면 신뢰할 수 있는 CA에서 서명한 새 인증서를 생성해야 합니다.
A.1.4. X.509 인증서의 콘텐츠 링크 복사링크가 클립보드에 복사되었습니다!
X.509 인증서에는 인증서 주체 및 인증서 발행자(인증서를 발급한 CA)에 대한 정보가 포함되어 있습니다. 인증서는 네트워크에서 보내거나 받을 수 있는 메시지를 설명하는 표준 구문인 Abstract Syntax Notation One (ASN.1)로 인코딩됩니다.
인증서의 역할은 ID를 공개 키 값과 연결하는 것입니다. 자세한 내용은 인증서에 다음이 포함됩니다.
- 인증서 소유자를 식별하는 제목 고유 이름(DN) 입니다.
- 주체와 연결된 공개 키 입니다.
- X.509 버전 정보.
- 인증서를 고유하게 식별하는 일련 번호입니다.
- 인증서를 발급한 CA를 식별하는 발행자 DN 입니다.
- 발행자의 디지털 서명입니다.
- 인증서에 서명하는 데 사용되는 알고리즘에 대한 정보입니다.
- 일부 선택적 X.509 v.3 확장 기능(예: CA 인증서와 최종 고유 인증서를 구분하는 확장 기능이 있습니다.
A.1.5. 고유 이름 링크 복사링크가 클립보드에 복사되었습니다!
DN은 보안 컨텍스트에서 자주 사용되는 범용 X.500 식별자입니다.
DN에 대한 자세한 내용은 부록 B. ASN.1 및 Distinguished Names 을 참조하십시오.
A.2. 인증 기관 링크 복사링크가 클립보드에 복사되었습니다!
A.2.1. 인증 기관 소개 링크 복사링크가 클립보드에 복사되었습니다!
CA는 인증서를 생성하고 관리하기 위한 툴 세트와 생성된 모든 인증서가 포함된 데이터베이스로 구성됩니다. 시스템을 설정할 때는 요구 사항에 충분히 안전한 적절한 CA를 선택하는 것이 중요합니다.
다음 두 가지 유형의 CA를 사용할 수 있습니다.
A.2.2. 상용 인증 기관 링크 복사링크가 클립보드에 복사되었습니다!
A.2.2.1. 인증서에 서명 링크 복사링크가 클립보드에 복사되었습니다!
다양한 상용 CA를 사용할 수 있습니다. 상용 CA를 사용하여 인증서에 서명하는 메커니즘은 선택한 CA에 따라 다릅니다.
A.2.2.2. 상용 CA의 이점 링크 복사링크가 클립보드에 복사되었습니다!
상용 CA의 장점은 종종 많은 수의 사람이 신뢰할 수 있다는 것입니다. 조직 외부의 시스템에서 애플리케이션을 사용할 수 있도록 설계된 경우 상용 CA를 사용하여 인증서에 서명합니다. 애플리케이션이 내부 네트워크 내에서 사용할 경우 개인 CA가 적합할 수 있습니다.
A.2.2.3. CA 선택 기준 링크 복사링크가 클립보드에 복사되었습니다!
상용 CA를 선택하기 전에 다음 기준을 고려하십시오.
- 상용 CA의 인증서 서명 정책은 무엇입니까?
- 애플리케이션이 내부 네트워크에서만 사용할 수 있도록 설계되었습니까?
- 상용 CA에 가입하는 비용에 비해 개인 CA를 설정하는 데 드는 잠재적 비용은 무엇입니까?
A.2.3. 개인 인증 기관 링크 복사링크가 클립보드에 복사되었습니다!
A.2.3.1. CA 소프트웨어 패키지 선택 링크 복사링크가 클립보드에 복사되었습니다!
시스템의 인증서에 서명해야 하는 경우 개인 CA를 설정합니다. 개인 CA를 설정하려면 인증서를 생성하고 서명하기 위한 유틸리티를 제공하는 소프트웨어 패키지에 액세스해야 합니다. 이 유형의 여러 패키지를 사용할 수 있습니다.
A.2.3.2. OpenSSL 소프트웨어 패키지 링크 복사링크가 클립보드에 복사되었습니다!
개인 CA를 설정할 수 있는 소프트웨어 패키지 중 하나는 OpenSSL, http://www.openssl.org 입니다. OpenSSL 패키지에는 인증서를 생성하고 서명하기 위한 기본 명령줄 유틸리티가 포함되어 있습니다. OpenSSL 명령줄 유틸리티에 대한 전체 문서는 http://www.openssl.org/docs 에서 확인할 수 있습니다.
A.2.3.3. OpenSSL을 사용하여 개인 CA 설정 링크 복사링크가 클립보드에 복사되었습니다!
개인 CA를 설정하려면 A.5절. “자체 인증서 생성” 의 지침을 참조하십시오.
A.2.3.4. 개인 인증 기관을 위한 호스트 선택 링크 복사링크가 클립보드에 복사되었습니다!
호스트를 선택하는 것은 개인 CA를 설정하는 데 중요한 단계입니다. CA 호스트와 연결된 보안 수준은 CA에서 서명한 인증서와 관련된 신뢰 수준을 결정합니다.
Red Hat Fuse 애플리케이션 개발 및 테스트에서 사용할 CA를 설정하는 경우 애플리케이션 개발자가 액세스할 수 있는 호스트를 사용합니다. 그러나 CA 인증서 및 개인 키를 생성할 때 보안 중요 애플리케이션이 실행되는 모든 호스트에서 CA 개인 키를 사용하지 마십시오.
A.2.3.5. 보안 예방 조치 링크 복사링크가 클립보드에 복사되었습니다!
배포하려는 애플리케이션의 인증서에 서명하도록 CA를 설정하는 경우 CA 호스트를 최대한 안전하게 설정합니다. 예를 들어 CA를 보호하려면 다음 예방 조치를 취합니다.
- CA를 네트워크에 연결하지 마십시오.
- CA에 대한 모든 액세스를 신뢰할 수 있는 제한된 사용자 세트로 제한합니다.
- radio-frequency 감시로부터 CA를 보호하기 위해 Cryostat-shield를 사용하십시오.
A.3. 인증서 체인 링크 복사링크가 클립보드에 복사되었습니다!
A.3.1. 인증서 체인 링크 복사링크가 클립보드에 복사되었습니다!
인증서 체인은 체인 의 각 인증서가 후속 인증서로 서명하는 일련의 인증서입니다.
그림 A.1. “Certificate Chain of Depth 2” 간단한 인증서 체인의 예를 보여줍니다.
그림 A.1. Certificate Chain of Depth 2
A.3.2. 자체 서명된 인증서 링크 복사링크가 클립보드에 복사되었습니다!
A.3.3. 신뢰 체인 링크 복사링크가 클립보드에 복사되었습니다!
인증서 체인의 목적은 피어 인증서에서 신뢰할 수 있는 CA 인증서로 신뢰 체인을 설정하는 것입니다. CA는 피어 인증서의 ID에 서명하여 사용됩니다. CA가 신뢰할 수 있는 경우(루트 인증서 디렉터리에 CA 인증서 사본이 있는 것으로 표시됨) 서명된 피어 인증서도 신뢰할 수 있습니다.
A.3.4. 여러 CA에서 서명한 인증서 링크 복사링크가 클립보드에 복사되었습니다!
CA 인증서는 다른 CA에서 서명할 수 있습니다. 예를 들어, Progress Software의 재무 부서에 대한 CA에서 애플리케이션 인증서를 서명할 수 있으며, CA는 자체 서명된 상용 CA에 의해 서명됩니다.
그림 A.2. “Certificate Chain of Depth 3” 이 인증서 체인의 모양을 보여줍니다.
그림 A.2. Certificate Chain of Depth 3
A.3.5. 신뢰할 수 있는 CA 링크 복사링크가 클립보드에 복사되었습니다!
A.4. HTTPS 인증서에 대한 특수 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
A.4.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
HTTPS 사양에서는 HTTPS 클라이언트가 서버의 ID를 확인할 수 있어야 합니다. 이는 X.509 인증서를 생성하는 방법에 잠재적으로 영향을 미칠 수 있습니다. 서버 ID를 확인하는 메커니즘은 클라이언트 유형에 따라 다릅니다. 일부 클라이언트는 신뢰할 수 있는 특정 CA에서 서명한 서버 인증서만 수락하여 서버 ID를 확인할 수 있습니다. 또한 클라이언트는 서버 인증서의 콘텐츠를 검사하고 특정 제약 조건을 충족하는 인증서만 허용할 수 있습니다.
애플리케이션별 메커니즘이 없는 경우 HTTPS 사양은 서버 ID를 확인하기 위해 HTTPS URL 무결성 검사 라는 일반 메커니즘을 정의합니다. 이는 웹 브라우저에서 사용하는 표준 메커니즘입니다.
A.4.2. HTTPS URL 무결성 검사 링크 복사링크가 클립보드에 복사되었습니다!
URL 무결성 검사의 기본 개념은 서버 인증서의 ID가 서버 호스트 이름과 일치해야 한다는 것입니다. 이 무결성 검사는 HTTPS에 대한 X.509 인증서를 생성하는 방법에 중요한 영향을 미칩니다. 인증서 ID(일반적으로 인증서 제목 DN의 일반 이름)는 HTTPS 서버가 배포된 호스트 이름과 일치해야 합니다.
URL 무결성 검사는 중간자 공격을 방지하기 위해 설계되었습니다.
A.4.3. reference 링크 복사링크가 클립보드에 복사되었습니다!
HTTPS URL 무결성 검사는 http://www.ietf.org/rfc/rfc2818.txt 의 IETF(Internet Engineering Task Force)에서 게시한 RFC 2818에 의해 지정됩니다.
A.4.4. 인증서 ID를 지정하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
URL 무결성 검사에 사용되는 인증서 ID는 다음 방법 중 하나로 지정할 수 있습니다.
A.4.5. commonName 사용 링크 복사링크가 클립보드에 복사되었습니다!
URL 무결성 검사를 위해 인증서 ID를 지정하는 일반적인 방법은 인증서의 제목 DN에서 CN(일반 이름)을 사용하는 것입니다.
예를 들어 서버가 다음 URL에서 보안 TLS 연결을 지원하는 경우 다음을 수행합니다.
https://www.redhat.com/secure
https://www.redhat.com/secure
해당 서버 인증서에는 다음과 같은 제목 DN이 있습니다.
C=IE,ST=Co. Dublin,L=Dublin,O=RedHat, OU=System,CN=www.redhat.com
C=IE,ST=Co. Dublin,L=Dublin,O=RedHat,
OU=System,CN=www.redhat.com
여기서 CN이 호스트 이름인 www.redhat.com
로 설정되어 있습니다.
새 인증서에서 제목 DN을 설정하는 방법에 대한 자세한 내용은 A.5절. “자체 인증서 생성” 을 참조하십시오.
A.4.6. subjectAltName 사용(multi-homed 호스트) 링크 복사링크가 클립보드에 복사되었습니다!
인증서 ID에 제목 DN의 일반 이름을 사용하면 한 번에 하나의 호스트 이름만 지정할 수 있는 단점이 있습니다. 그러나 다중 홈 호스트에 인증서를 배포하는 경우 다중 홈 호스트 이름과 함께 인증서를 사용하도록 허용하는 것이 좋습니다. 이 경우 여러 대체 ID가 있는 인증서를 정의해야 하며 subjectAltName
인증서 확장만 사용할 수 있습니다.
예를 들어 다음 호스트 이름 중 하나에 대한 연결을 지원하는 다중 홈 호스트가 있는 경우 다음을 수행합니다.
www.redhat.com www.jboss.org
www.redhat.com
www.jboss.org
그런 다음 이러한 DNS 호스트 이름을 모두 명시적으로 나열하는 subjectAltName
을 정의할 수 있습니다. openssl
유틸리티를 사용하여 인증서를 생성하는 경우 openssl.cnf
구성 파일의 관련 행을 편집하여 다음과 같이 subjectAltName
확장 값을 지정합니다.
subjectAltName=DNS:www.redhat.com,DNS:www.jboss.org
subjectAltName=DNS:www.redhat.com,DNS:www.jboss.org
여기서 HTTPS 프로토콜은 subjectAltName
에 나열된 DNS 호스트 이름 중 하나와 서버 호스트 이름과 일치합니다( subjectAltName
이 일반 이름보다 우선함).
HTTPS 프로토콜은 호스트 이름에 와일드카드 문자 \*
도 지원합니다. 예를 들어 다음과 같이 subjectAltName
을 정의할 수 있습니다.
subjectAltName=DNS:*.jboss.org
subjectAltName=DNS:*.jboss.org
이 인증서 ID는 도메인 jboss.org 의 세 가지 구성 요소 호스트 이름과 일치합니다.
도메인 이름 앞에 와일드카드 문자를 절대 사용하지 않아야 합니다. 도메인 이름 앞에 있는 점 . .
구분 기호를 입력하는 것을 잊어버려서 실수로 이 작업을 수행하지 않아야 합니다. 예를 들어 *jboss.org
를 지정한 경우 인증서가 *임표 jboss
로 끝나는 *임의* 도메인에서 사용할 수 있습니다.
A.5. 자체 인증서 생성 링크 복사링크가 클립보드에 복사되었습니다!
초록
이 장에서는 자체 CA(인증 기관)를 설정하고 이 CA를 사용하여 자체 인증서를 생성하고 서명하는 기술 및 절차를 설명합니다.
자체 인증서를 생성하고 관리하려면 보안에 대한 전문 지식이 필요합니다. 이 장에서 설명하는 절차는 데모 및 테스트 환경을 위해 자체 인증서를 생성하는 데 편리할 수 있지만 프로덕션 환경에서 이러한 인증서를 사용하지 않는 것이 좋습니다.
A.5.1. OpenSSL을 설치합니다. 링크 복사링크가 클립보드에 복사되었습니다!
A.5.1.1. RHEL 및 Fedora 플랫폼에 OpenSSL 설치 링크 복사링크가 클립보드에 복사되었습니다!
RHEL(Red Hat Enterprise Linux) 5 및 6 및 Fedora 플랫폼에서 RPM 패키지로 사용할 수 있습니다. OpenSSL을 설치하려면 다음 명령(관리자 권한으로 실행)을 입력합니다.
yum install openssl
yum install openssl
A.5.1.2. 소스 코드 배포 링크 복사링크가 클립보드에 복사되었습니다!
OpenSSL의 소스 배포는 http://www.openssl.org/docs 에서 사용할 수 있습니다. OpenSSL 프로젝트는 소스 코드 배포 만 제공합니다. OpenSSL 웹 사이트에서 OpenSSL 유틸리티의 바이너리 설치를 다운로드할 수 없습니다.
A.5.2. 개인 인증 기관 설정 링크 복사링크가 클립보드에 복사되었습니다!
A.5.2.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
개인 CA를 사용하도록 선택하는 경우 애플리케이션에서 사용할 고유 인증서를 생성해야 합니다. OpenSSL 프로젝트는 개인 CA를 설정하고, 서명된 인증서를 생성하고, Java 키 저장소에 CA를 추가하기 위한 무료 명령줄 유틸리티를 제공합니다.
프로덕션 환경에 맞는 개인 CA를 설정하려면 높은 수준의 전문 지식이 필요하며 외부 위협으로부터 인증서 저장소를 보호하려면 높은 수준의 전문 지식을 수행해야 합니다.
A.5.2.2. 개인 인증 기관을 설정하는 단계 링크 복사링크가 클립보드에 복사되었습니다!
자체 개인 인증 기관을 설정하려면 다음을 수행합니다.
다음과 같이 CA의 디렉터리 구조를 생성합니다.
X509CA/demoCA X509CA/demoCA/private X509CA/demoCA/certs X509CA/demoCA/newcerts X509CA/demoCA/crl
X509CA/demoCA X509CA/demoCA/private X509CA/demoCA/certs X509CA/demoCA/newcerts X509CA/demoCA/crl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 텍스트 편집기를 사용하여
X509CA/openssl.cfg
파일을 생성하고 이 파일에 다음 내용을 추가합니다.예 A.1. OpenSSL 설정
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요위의
openssl.cfg
구성 파일은 데모로만 제공됩니다. 프로덕션 환경에서 이 구성 파일은 높은 수준의 보안 전문 지식을 갖춘 엔지니어가 신중하게 작성하고 진화하는 보안 위협으로부터 보호하기 위해 적극적으로 유지되어야 합니다.초기 콘텐츠
01
(0)이 있어야 하는demoCA/serial
파일을 초기화합니다. 다음 명령을 실행합니다.echo 01 > demoCA/serial
echo 01 > demoCA/serial
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 처음에 완전히 비어 있어야 하는
demoCA/index.txt
를 초기화합니다. 다음 명령을 실행합니다.touch demoCA/index.txt
touch demoCA/index.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령을 사용하여 자체 서명된 새 CA 인증서 및 개인 키를 생성합니다.
openssl req -x509 -new -config openssl.cfg -days 365 -out demoCA/cacert.pem -keyout demoCA/private/cakey.pem
openssl req -x509 -new -config openssl.cfg -days 365 -out demoCA/cacert.pem -keyout demoCA/private/cakey.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예 A.2. “CA 인증서 생성” 에 표시된 대로 CA 개인 키 및 CA 고유 이름의 세부 정보를 입력하라는 메시지가 표시됩니다.
예 A.2. CA 인증서 생성
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고CA의 보안은 이 단계에서 사용되는 개인 키 파일의 보안 및 개인 키 전달 구문에 따라 달라집니다.
CA 인증서 및 개인 키,
cacert.pem
및cakey.pem
의 파일 이름과 위치가openssl.cfg
에 지정된 값과 동일한지 확인해야 합니다.
A.5.3. CA 신뢰 저장소 파일 만들기 링크 복사링크가 클립보드에 복사되었습니다!
A.5.3.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
서버 ID를 확인하려면 일반적으로 SSL/TLS 연결의 클라이언트 측에 신뢰 저장소 파일이 필요합니다. 신뢰 저장소 파일을 사용하여 디지털 서명을 확인할 수도 있습니다(예: 신뢰 저장소 파일에서 신뢰할 수 있는 인증서 중 하나에 해당하는 개인 키를 사용하여 서명이 생성되었는지 확인).
A.5.3.2. CA 신뢰 저장소를 생성하는 단계 링크 복사링크가 클립보드에 복사되었습니다!
신뢰 저장소 파일에 CA 인증서 중 하나를 추가하려면 다음을 수행합니다.
배포하려는 신뢰할 수 있는 CA 인증서 컬렉션을 어셈블합니다.
신뢰할 수 있는 CA 인증서는 공용 CA 또는 개인 CA에서 가져올 수 있습니다. 신뢰할 수 있는 CA 인증서는 Java
키 저장소
유틸리티와 호환되는 모든 형식(예: PEM 형식)일 수 있습니다. 필요한 것은 모두 인증서 자체입니다. 개인 키와 암호가 필요하지 않습니다.keytool -import
명령을 사용하여 신뢰 저장소에 CA 인증서를 추가합니다.다음 명령을 입력하여 PEM 형식의 CA 인증서
cacert.pem
을 JKS 신뢰 저장소에 추가합니다.keytool -import -file cacert.pem -alias CAAlias -keystore truststore.ts -storepass StorePass
keytool -import -file cacert.pem -alias CAAlias -keystore truststore.ts -storepass StorePass
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서
truststore.ts
는 CA 인증서가 포함된 키 저장소 파일입니다. 이 파일이 없으면keytool
명령에서 해당 파일을 생성합니다.CAAlias
는 가져온 CA 인증서의 편리한 식별자이며StorePass
는 키 저장소 파일에 액세스하는 데 필요한 암호입니다.- 이전 단계를 반복하여 모든 CA 인증서를 신뢰 저장소에 추가합니다.
A.5.4. 새 인증서 생성 및 서명 링크 복사링크가 클립보드에 복사되었습니다!
A.5.4.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
인증서가 실제 환경에서 유용하려면 인증서의 진위 여부를 나타내는 CA로 서명해야 합니다. 단일 CA 인증서를 사용하여 대규모 인증서 컬렉션을 확인할 수 있기 때문에 인증서 확인을 위한 확장 가능한 솔루션이 용이해집니다.
A.5.4.2. 새 인증서를 생성하고 서명하는 단계 링크 복사링크가 클립보드에 복사되었습니다!
자체 개인 CA를 사용하여 새 인증서를 생성하고 서명하려면 다음 단계를 수행합니다.
다음과 같이
keytool -genkeypair
명령을 사용하여 인증서 및 개인 키 쌍을 생성합니다.keytool -genkeypair -keyalg RSA -dname "CN=Alice, OU=Engineering, O=Red Hat, ST=Dublin, C=IE" -validity 365 -alias alice -keypass KeyPass -keystore alice.ks -storepass StorePass
keytool -genkeypair -keyalg RSA -dname "CN=Alice, OU=Engineering, O=Red Hat, ST=Dublin, C=IE" -validity 365 -alias alice -keypass KeyPass -keystore alice.ks -storepass StorePass
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령을 실행하기 전에 지정된 키 저장소인
alice.ks
가 존재하지 않기 때문에 새 키 저장소를 암시적으로 생성하고 암호를StorePass
로 설정합니다.-dname
및-validity
플래그는 새로 생성된 X.509 인증서의 내용을 정의합니다.참고인증서의 Distinguished Name(
-dname
매개변수를 통해)을 지정할 때openssl.cfg
파일에 지정된 정책 제약 조건을 관찰해야 합니다. 이러한 정책 제약 조건이 거부되지 않으면 CA(다음 단계에서)를 사용하여 인증서에 서명할 수 없습니다.참고-keyalg RSA
옵션(또는 유사한 강도의 키 알고리즘)을 사용하여 키 쌍을 생성하는 것이 중요합니다. 기본 키 알고리즘은 DSA 암호화 및 SHA-1 서명의 조합을 사용합니다. 그러나 SHA-1 알고리즘은 더 이상 안전하지 않으며 최신 웹 브라우저에서 SHA-1을 사용하여 서명된 인증서를 거부합니다. RSA 키 알고리즘을 선택할 때keytool
유틸리티는 대신 SHA-2 알고리즘을 사용합니다.keystore -certreq
명령을 사용하여 인증서 서명 요청을 생성합니다.alice.ks
인증서에 대한 새 인증서 서명 요청을 생성하고 다음과 같이alice_csr.pem
파일로 내보냅니다.keytool -certreq -alias alice -file alice_csr.pem -keypass KeyPass -keystore alice.ks -storepass StorePass
keytool -certreq -alias alice -file alice_csr.pem -keypass KeyPass -keystore alice.ks -storepass StorePass
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openssl ca
명령을 사용하여 CSR에 서명합니다.다음과 같이 개인 CA를 사용하여 Alice 인증서의 CSR에 서명합니다.
openssl ca -config openssl.cfg -days 365 -in alice_csr.pem -out alice_signed.pem
openssl ca -config openssl.cfg -days 365 -in alice_csr.pem -out alice_signed.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CA를 생성할 때 사용한 CA 개인 키 전달 문구를 입력하라는 메시지가 표시됩니다( “개인 인증 기관을 설정하는 단계”에서).
openssl ca
명령에 대한 자세한 내용은 http://www.openssl.org/docs/apps/ca.html# 을 참조하십시오.-outform
옵션을 PEM으로 설정하여openssl x509
명령을 사용하여 서명된 인증서를PEM
으로만 포맷으로 변환합니다. 다음 명령을 실행합니다.openssl x509 -in alice_signed.pem -out alice_signed.pem -outform PEM
openssl x509 -in alice_signed.pem -out alice_signed.pem -outform PEM
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CA 인증서 파일과 변환된 서명된 인증서 파일을 연결하여 인증서 체인을 형성합니다. 예를 들어 Linux 및 UNIX 플랫폼에서 다음과 같이 CA 인증서 파일과 서명된 Alice 인증서인
alice_signed.pem
을 연결할 수 있습니다.cat demoCA/cacert.pem alice_signed.pem > alice.chain
cat demoCA/cacert.pem alice_signed.pem > alice.chain
Copy to Clipboard Copied! Toggle word wrap Toggle overflow keytool -import
명령을 사용하여 새 인증서의 전체 인증서 체인을 Java 키 저장소로 가져옵니다. 다음 명령을 실행합니다.keytool -import -file alice.chain -keypass KeyPass -keystore alice.ks -storepass StorePass
keytool -import -file alice.chain -keypass KeyPass -keystore alice.ks -storepass StorePass
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
부록 B. ASN.1 및 Distinguished Names 링크 복사링크가 클립보드에 복사되었습니다!
초록
OSI Abstract Syntax Notation One (ASN.1) 및 X.500 중단된 이름은 X.509 인증서 및 LDAP 디렉토리를 정의하는 보안 표준에서 중요한 역할을 합니다.
B.1. ASN.1 링크 복사링크가 클립보드에 복사되었습니다!
B.1.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
Abstract Syntax Notation One (ASN.1)은 초기 Cryostat의 OSI 표준 본문에 의해 정의되어 특정 머신 하드웨어 또는 프로그래밍 언어와 독립적인 데이터 유형 및 구조를 정의하는 방법을 제공합니다. 여러 가지 면에서 ASN.1은 플랫폼 독립적인 데이터 유형을 정의하는 데 관련된 OMG의 IDL 및 WSDL과 같은 최신 인터페이스 정의 언어의 포크로 간주될 수 있습니다.
ASN.1은 표준 정의(예: SNMP, X.509 및 LDAP)에 널리 사용되므로 중요합니다. 특히 ASN.1은 보안 표준 분야에서 유비쿼터스입니다. X.509 인증서 및 고유 이름의 공식 정의는 ASN.1 구문을 사용하여 설명합니다. 이러한 보안 표준을 사용하려면 ASN.1 구문에 대한 자세한 지식이 필요하지 않지만 ASN.1은 대부분의 보안 관련 데이터 유형의 기본 정의에 사용됩니다.
B.1.2. BER 링크 복사링크가 클립보드에 복사되었습니다!
OSI의 BER(Basic Encoding Rules)는 ASN.1 데이터 유형을 일련의 옥텟(이진 표현)으로 변환하는 방법을 정의합니다. 따라서 ASN.1과 관련하여 BER가 수행하는 역할은 OMG IDL과 관련하여 GIOP가 플레이한 역할과 유사합니다.
B.1.3. DER 링크 복사링크가 클립보드에 복사되었습니다!
OSI의 Distinguished Encoding Rules (DER)는 BER의 특징입니다. DER는 인코딩이 고유한지 확인하기 위한 추가 규칙(BER 인코딩이 아님)으로 구성됩니다.
B.1.4. 참고 자료 링크 복사링크가 클립보드에 복사되었습니다!
ASN.1에 대한 자세한 내용은 다음 표준 문서에서 확인할 수 있습니다.
- ASN.1은 X.208에 정의되어 있습니다.
- BER는 X.209에 정의되어 있습니다.
B.2. 고유 이름 링크 복사링크가 클립보드에 복사되었습니다!
B.2.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
고유 이름(DN)은 X.500 디렉터리 구조의 기본 키로 정의됩니다. 그러나 DN은 일반적인 목적 식별자로 다른 많은 컨텍스트에서 사용되었습니다. Apache CXF에서는 다음과 같은 컨텍스트에서 DN이 발생합니다.
- X.509 인증서(예: 인증서의 DN 중 하나는 인증서 소유자(보안 주체))를 식별합니다.
- LDAP-DN은 LDAP 디렉터리 트리에서 오브젝트를 찾는 데 사용됩니다.
B.2.2. DN의 문자열 표현 링크 복사링크가 클립보드에 복사되었습니다!
DN은 ASN.1에서 공식적으로 정의되지만 DN의 UTF-8 문자열 표현을 정의하는 LDAP 표준도 있습니다( RFC 2253
참조). 문자열 표현에서는 DN 구조를 설명하기 위한 편리한 기반을 제공합니다.
DN의 문자열 표현에서는 DER로 인코딩된 DN을 고유하게 표현하지 않습니다. 따라서 문자열 형식에서 DER 형식으로 다시 변환되는 DN이 항상 원래 DER 인코딩을 복구하지는 않습니다.
B.2.3. DN 문자열 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 문자열은 DN의 일반적인 예입니다.
C=US,O=IONA Technologies,OU=Engineering,CN=A. N. Other
C=US,O=IONA Technologies,OU=Engineering,CN=A. N. Other
B.2.4. DN 문자열 구조 링크 복사링크가 클립보드에 복사되었습니다!
DN 문자열은 다음 기본 요소에서 빌드됩니다.
B.2.5. OID 링크 복사링크가 클립보드에 복사되었습니다!
OID(OBJECT IDENTIFIER)는 ASN.1에서 문법 구조를 고유하게 식별하는 바이트 시퀀스입니다.
B.2.6. 특성 유형 링크 복사링크가 클립보드에 복사되었습니다!
DN에 표시될 수 있는 다양한 특성 유형은 이론적으로 공개되지만 실제로는 특성 유형의 작은 하위 집합만 사용됩니다. 표 B.1. “일반적으로 사용되는 속성 유형” 발생할 가능성이 가장 큰 특성 유형을 표시합니다.
문자열 표현 | X.500 속성 유형 |
---|---|
데이터 크기 | 동등한 OID |
C | countryName |
2 | 2.5.4.6 |
O | organizationName |
1…64 | 2.5.4.10 |
OU | organizationalUnitName |
1…64 | 2.5.4.11 |
CN | commonName |
1…64 | 2.5.4.3 |
ST | stateOrProvinceName |
1…64 | 2.5.4.8 |
L | localityName |
1…64 | 2.5.4.7 |
STREET | streetAddress |
DC | domainComponent |
UID | userid |
B.2.7. AVA 링크 복사링크가 클립보드에 복사되었습니다!
특성 값 어설션 (AVA)은 특성 값을 특성 유형에 할당합니다. 문자열 표현에는 다음과 같은 구문이 있습니다.
<attr-type>=<attr-value>
<attr-type>=<attr-value>
예를 들면 다음과 같습니다.
CN=A. N. Other
CN=A. N. Other
또는 동등한 OID를 사용하여 문자열 표현에서 특성 유형을 식별할 수 있습니다( 표 B.1. “일반적으로 사용되는 속성 유형” 참조). 예를 들면 다음과 같습니다.
2.5.4.3=A. N. Other
2.5.4.3=A. N. Other
B.2.8. RDN 링크 복사링크가 클립보드에 복사되었습니다!
상대 고유 이름 (RDN)은 DN의 단일 노드(문자열 표현에 쉼표 사이에 표시되는 비트)를 나타냅니다. 기술적으로 RDN에는 두 개 이상의 AVA가 포함될 수 있습니다(상정적으로 AVAs 세트로 정의됨). 그러나 실제로 이것은 거의 발생하지 않습니다. 문자열 표현에서 RDN에는 다음과 같은 구문이 있습니다.
<attr-type>=<attr-value>[+<attr-type>=<attr-value> ...]
<attr-type>=<attr-value>[+<attr-type>=<attr-value> ...]
다음은 다중 값 RDN의 예는 다음과 같습니다.
OU=Eng1+OU=Eng2+OU=Eng3
OU=Eng1+OU=Eng2+OU=Eng3
다음은 단일 값 RDN의 예입니다.
OU=Engineering
OU=Engineering