Sun Java 로고     이전      목차      색인      다음     

Sun 로고
Sun Java System Message Queue 3 2005Q4 관리 설명서 

7장
보안 관리

관리자는 사용자 인증에 사용할 사용자 저장소를 구성하고 액세스 제어를 정의하며 클라이언트 브로커 통신을 암호화하는 SSL(Secure Socket Layer) 연결 서비스를 구성하고 브로커를 시작할 때 사용할 비밀번호 파일을 설정합니다.

이 장은 다음 내용으로 구성되어 있습니다.


사용자 인증

사용자가 브로커에 연결하려고 시도하면 브로커는 제공된 아이디와 비밀번호를 검사하여 사용자를 인증합니다. 아이디와 비밀번호가 각 브로커가 참조하도록 구성된 브로커별 사용자 저장소의 아이디 및 비밀번호와 일치하면 브로커는 연결을 허용합니다.

사용자 저장소에서 사용자 목록, 해당 그룹, 비밀번호를 관리해야 합니다. 브로커 인스턴스마다 다른 사용자 저장소를 사용할 수 있습니다. 이 절에서는 이러한 저장소를 만들고 채우고 관리하는 방법에 대해 설명합니다.

저장소 유형은 다음 중 하나가 될 수 있습니다.

플랫 파일 사용자 저장소 사용

Message Queue에서는 플랫 파일 사용자 저장소와 플랫 파일 사용자 저장소를 채우고 관리할 때 사용할 수 있는 명령줄 도구인 사용자 관리자 유틸리티(imqusermgr)를 제공합니다. 다음 절에서는 플랫 파일 사용자 저장소에 대해 설명하고 사용자 관리자 유틸리티를 사용하여 해당 저장소를 채우고 관리하는 방법을 설명합니다.

사용자 저장소 만들기

플랫 파일 사용자 저장소는 인스턴스마다 다릅니다. 기본 사용자 저장소(passwd)는 사용자가 시작하는 각 브로커 인스턴스에 대해 자동으로 만들어집니다. 이 사용자 저장소는 저장소와 연관된 브로커 인스턴스의 이름으로 식별되는 디렉토리에 저장됩니다(부록 A, "플랫폼별 Message Queue 데이터의 위치" 참조).

?instances/instanceName/etc/passwd

저장소는 이 두 항목을 사용하여 만들어집니다. 표 7-1의 각 행은 하나의 항목을 나타냅니다.

표 7-1 사용자 저장소 초기 항목 

사용자 아이디

비밀번호

그룹

상태

admin

admin

admin

active

guest

guest

anonymous

active

이러한 초기 항목을 사용하면 관리자가 개입하지 않아도 설치 후 바로 Message Queue 브로커를 사용할 수 있습니다.

다음 절에서는 플랫 파일 사용자 저장소를 채우고 관리하는 방법을 설명합니다.

사용자 관리자 유틸리티

Message Queue 사용자 관리자 유틸리티(imqusermgr)를 사용하면 플랫 파일 사용자 저장소를 편집하거나 채울 수 있습니다. 이 절에서는 사용자 관리자 유틸리티에 대해 소개합니다. 다음 절에서는 imqusermgr 하위 명령을 사용하여 특정 작업을 수행하는 방법에 대해 설명합니다.

imqusermgr 명령에 대한 자세한 내용은 13장, "명령줄 참조"를 참조하십시오.

사용자 관리자를 사용하기 전에 주의해야 할 사항은 다음과 같습니다.

하위 명령

imqusermgr 명령에는 add, delete, list 및 update 하위 명령이 있습니다.

명령 옵션

표 7-2에는 imqusermgr 명령 옵션이 나열되어 있습니다.

표 7-2 imqusermgr 옵션  

옵션

설명

-a activeState

사용자 상태의 활성화 여부를 지정합니다(true/false). true 값은 활성화 상태를 나타내며 기본값입니다.

-f

사용자의 확인 없이 작업을 수행합니다.

-h

사용 도움말을 표시합니다. 명령줄에 있는 명령은 실행되지 않습니다.

-i instanceName

명령이 적용될 브로커 인스턴스 이름을 지정합니다. 지정하지 않으면 기본 인스턴스 이름 imqbroker인 것으로 가정합니다.

-p passwd

사용자의 비밀번호를 지정합니다.

-g group

사용자 그룹을 지정합니다. 유효한 값에는 admin, user, anonymous가 있습니다.

-s

자동 모드를 설정합니다.

-u userName

사용자 아이디를 지정합니다.

-v

버전 정보를 표시합니다. 명령줄에 있는 명령은 실행되지 않습니다.

그룹

브로커 인스턴스의 사용자 저장소에 사용자 항목을 추가할 때, 사전 정의된 admin, user, anonymous의 세 가지 그룹 중 하나를 지정할 수 있습니다. 그룹을 지정하지 않으면 기본 그룹인 user가 할당됩니다. 그룹은 다음과 같이 할당해야 합니다.

사용자의 그룹을 변경하려면 사용자 항목을 삭제한 다음 해당 사용자에 다른 항목을 추가하여 새 그룹을 지정해야 합니다.

시스템에서 생성한 그룹의 경우 이름을 변경하거나 삭제할 수 없습니다. 또한 새 그룹을 만들 수도 없습니다. 하지만 해당 그룹의 구성원이 수행할 수 있는 작업을 정의하는 액세스 규칙을 지정할 수 있습니다. 자세한 내용은 사용자 권한 부여: 액세스 제어 등록 정보 파일을 참조하십시오.

사용자 상태

사용자를 저장소에 추가하면 그 사용자는 기본적으로 활성 상태가 됩니다. 사용자를 비활성 상태로 만들려면 update 명령을 사용해야 합니다. 예를 들어, 다음 명령은 사용자 JoeD를 비활성 상태로 만듭니다.

imqusermgr update -u JoeD -a false

비활성 상태인 사용자의 항목은 저장소에 보존되지만, 비활성 상태인 사용자가 새 연결을 열 수는 없습니다. 사용자가 비활성 상태일 때 같은 이름을 가진 다른 사용자를 추가하면 작업이 실패합니다. 비활성 사용자 항목을 삭제하거나, 새 사용자의 이름을 변경하거나, 새 사용자에게 다른 이름을 사용해야 합니다. 그러면 중복되는 사용자 아이디를 추가하지 않게 됩니다.

사용자 아이디 및 비밀번호 형식

사용자 아이디와 비밀번호는 다음과 같은 지침을 따라야 합니다.

사용자 저장소 채우기 및 관리

저장소에 사용자를 추가하려면 add 하위 명령을 사용합니다. 예를 들어, 다음 명령은 기본 브로커 인스턴스 사용자 저장소에 비밀번호가 sesame인 사용자 Katharine을 추가합니다.

imqusermgr add -u Katharine -p sesame -g user

저장소에서 사용자를 삭제하려면 delete 하위 명령을 사용합니다. 예를 들어, 다음 명령은 Bob이라는 사용자를 삭제합니다.

imqusermgr delete -u Bob

사용자의 비밀번호 또는 상태를 변경하려면 update 하위 명령을 사용합니다. 예를 들어, 다음 명령은 Katharine의 비밀번호를 aladdin으로 변경합니다.

imqusermgr update -u Katharine -p aladdin

하나 이상의 사용자에 대한 정보를 나열하려면 list 명령을 사용합니다. 다음 명령은 isa라는 사용자에 대한 정보를 표시합니다.

imqusermgr list -u isa

% imqusermgr list -u isa

User repository for broker instance: imqbroker

----------------------------------

User Name    Group    Active State

----------------------------------

isa          admin    true

다음 명령은 모든 사용자에 대한 정보를 나열합니다.

imqusermgr list

% imqusermgr list

User repository for broker instance: imqbroker

--------------------------------------

User Name        Group     Active State

--------------------------------------

admin        admin         true

guest        anonymous     true

isa          admin         true

testuser1    user          true

testuser2    user          true

testuser3    user          true

testuser4    user          false

testuser5    user          false

기본 관리자 비밀번호 변경

보안을 위해 admin의 기본 비밀번호를 자신만 아는 값으로 변경해야 합니다. 다음 명령은 mybroker 브로커 인스턴스의 기본 관리자 비밀번호를 admin에서 grandpoobah로 변경합니다.

imqusermgr update mybroker -u admin -p grandpoobah

브로커 인스턴스가 실행 중일 때 명령줄 도구 중 하나를 실행하여 이러한 변경 사항의 적용 여부를 빠르게 확인할 수 있습니다. 예를 들어, 다음 명령은 비밀번호를 묻습니다.

imqcmd list svc mybroker -u admin

새 비밀번호(grandpoobah)가 올바르게 작동해야 하고 이전 비밀번호는 실패해야 합니다.

비밀번호를 변경한 후에 관리 콘솔을 포함한 Message Queue 관리 도구를 사용하려면 새 비밀번호를 입력해야 합니다.

사용자 저장소에 LDAP 서버 사용

사용자 저장소에 LDAP 서버를 사용하려면 다음 작업을 수행합니다.

인스턴스 구성 파일 편집

브로커가 디렉토리 서버를 사용하게 하려면 브로커 인스턴스 구성 파일 config.properties에서 특정 등록 정보의 값을 설정해야 합니다. 이 등록 정보를 사용하면 사용자가 브로커 인스턴스에 연결하거나 메시징 작업을 수행하려 할 때마다 브로커 인스턴스가 LDAP 서버로부터 사용자 및 그룹에 대한 정보를 쿼리할 수 있습니다.

인스턴스 구성 파일은 브로커 인스턴스 디렉토리 아래의 디렉토리에 있습니다. 경로 형식은 다음과 같습니다.

/instances/instanceName/props/config.properties

운영 체제별 인스턴스 디렉토리 위치에 대한 자세한 내용은 부록 A, "플랫폼별 Message Queue 데이터의 위치"를 참조하십시오.

▶ LDAP 서버를 사용하도록 구성 파일을 편집하는 방법
  1. 다음 등록 정보를 설정하여 LDAP 사용자 저장소를 사용하고 있음을 지정합니다.
  2. imq.authentication.basic.user_repository=ldap

  3. imq.authentication.type 등록 정보를 설정하여 클라이언트에서 브로커로 전달되는 비밀번호를 인코딩하는 데 base-64(basic)를 사용할지 또는 MD5(digest)를 사용할지 여부를 결정합니다. 사용자 저장소에 LDAP 디렉토리를 사용하는 경우에는 인증 유형을 basic으로 설정해야 합니다. 예를 들면 다음과 같습니다.
  4. imq.authentication.type=basic

  5. LDAP 액세스를 제어하는 브로커 등록 정보도 설정해야 합니다. 이러한 등록 정보는 브로커의 인스턴스 구성 파일에 저장됩니다. 등록 정보는 보안 서비스에서 설명되고 보안 등록 정보에 요약되어 있습니다.
  6. Message Queue는 JNDI API를 사용하여 LDAP 디렉토리 서버와 통신합니다. 이러한 등록 정보에 참조되는 구문과 용어에 대한 자세한 내용은 JNDI 설명서를 참조하십시오. Message Queue에서는 Sun JNDI LDAP 공급자를 사용하며 단순 인증을 사용합니다.

    Message Queue에서는 LDAP 인증 페일오버를 지원하므로 인증을 시도할 LDAP 디렉토리 서버 목록을 지정할 수 있습니다(자세한 내용은 imq.user.repos.ldap.server 등록 정보 참조).

    LDAP 사용자 저장소 관련 등록 정보를 설정하는 방법은 브로커의 config.properties 파일을 참조하십시오.

  7. 필요한 경우에는 액세스 제어 등록 정보 파일에서 사용자/그룹과 규칙을 편집해야 합니다. 액세스 제어 등록 정보 파일 사용에 대한 자세한 내용은 사용자 권한 부여: 액세스 제어 등록 정보 파일을 참조하십시오.
  8. 연결 인증 및 그룹 검색 중 브로커가 SSL을 통해 LDAP 디렉토리 서버와 통신하도록 하려면 LDAP 서버에서 SSL을 활성화한 후 브로커 구성 파일에서 다음 등록 정보를 설정해야 합니다.
    • LDAP 서버가 SSL 통신에 사용하는 포트를 지정합니다. 예를 들면 다음과 같습니다.
    • imq.user_repository.ldap.server=myhost:7878

    • 브로커 등록정보 imq.user_repository.ldap.ssl.enabled를 true로 설정합니다.

      여러 LDAP 디렉토리 서버를 사용하는 경우 ldap://를 사용하여 각 디렉토리 서버를 추가로 지정합니다. 예를 들면 다음과 같습니다.

      imq.user_repository.ldap.server=myHost:7878 ldap://otherHost:7878

      추가된 각 디렉토리 서버를 공백으로 구분합니다. 목록의 모든 디렉토리 서버는 기타 LDAP 관련 등록 정보에 대해 동일한 값을 사용해야 합니다.

관리자에 대한 액세스 제어 설정

관리 사용자를 만들려면 액세스 제어 등록 정보 파일을 사용하여 ADMIN 연결을 생성할 수 있는 사용자와 그룹을 지정합니다. 이러한 사용자와 그룹을 LDAP 디렉토리에서 사전 정의해야 합니다.

ADMIN 연결을 만들 수 있는 모든 사용자나 그룹은 관리 명령을 실행할 수 있습니다.

▶ 관리 사용자 설정 방법
  1. 브로커 등록 정보 imq.accesscontrol.enabled를 true(기본값)로 설정하여 액세스 제어 파일 사용을 가능하게 합니다.
  2. imq.accesscontrol.enabled 등록 정보는 액세스 제어 파일을 사용 가능하게 합니다.

  3. 액세스 제어 파일 accesscontrol.properties를 엽니다. 파일 위치는 부록 A, "플랫폼별 Message Queue 데이터의 위치"에 나와 있습니다.
  4. 파일에는 다음과 같은 항목이 포함되어 있습니다.

    service connection access control
    ##################################
    connection.NORMAL.allow.user=*
    connection.ADMIN.allow.group=admin

    나열된 항목은 예입니다. admin 그룹은 파일 기반 사용자 저장소에 있지만 기본적으로 LDAP 디렉토리에는 없습니다. LDAP 디렉토리에 정의된 그룹의 이름을 Message Queue 관리자 권한을 부여할 그룹 이름으로 대체해야 합니다.

  5. 사용자에게 Message Queue 관리자 권한을 부여하려면 다음과 같이 사용자 아이디를 입력합니다.
  6. connection.ADMIN.allow.user=userName[[,userName2]]

  7. 그룹에 Message Queue 관리자 권한을 부여하려면 다음과 같이 그룹 아이디를 입력합니다.
  8. connection.ADMIN.allow.group=groupName[[,groupName2]]


사용자 권한 부여: 액세스 제어 등록 정보 파일

액세스 제어 등록 정보 파일(ACL 파일)에는 사용자와 사용자 그룹이 수행할 수 있는 작업을 지정하는 규칙이 포함되어 있습니다. ACL 파일을 편집하여 이런 작업을 특정 사용자 및 그룹으로 제한합니다. 브로커 인스턴스마다 다른 ACL 파일을 사용할 수 있습니다.

ACL 파일은 사용자 정보가 플랫 파일 사용자 저장소에 있는지 또는 LDAP 사용자 저장소에 있는지 여부와 상관 없이 모두 사용할 수 있습니다. 브로커는 클라이언트 응용 프로그램이 다음 작업 중 하나를 수행할 때 ACL 파일을 확인합니다.

브로커는 ACL 파일을 확인하여 작업 수행 권한을 요청을 생성한 사용자에게 부여할지 해당 사용자가 속하는 그룹에 부여할지를 결정합니다.

ACL 파일을 편집한 경우 브로커가 다음에 파일을 검사하여 권한 부여를 확인할 때 새로운 설정이 적용됩니다. 파일을 편집한 후 브로커를 다시 시작할 필요가 없습니다.

액세스 제어 등록 정보 파일 작성

ACL 파일은 인스턴스에 고유합니다. 브로커 인스턴스를 시작할 때마다 기본 파일 accesscontrol.properties가 인스턴스 디렉토리에 생성됩니다. 파일에 대한 경로 형식은 다음과 같습니다(부록 A, "플랫폼별 Message Queue 데이터의 위치" 참조).

?instances/brokerInstanceName/etc/accesscontrol.properties

ACL 파일은 Java 등록 정보 파일과 같은 형식으로 구성됩니다. 먼저 파일 버전을 정의하는 것으로 시작하여 다음 세 개 섹션에서 액세스 제어 규칙을 지정합니다.

version 등록 정보는 ACL 등록 정보 파일의 버전을 정의하며 이 항목은 변경할 수 없습니다.

version=JMQFileAccessControlModel/100

액세스 규칙의 기본 구문, 권한을 계산하는 방법 및 ACL 파일에서 액세스 제어를 지정하는 세 개 섹션에 대한 설명이 아래에 나와 있습니다.

액세스 규칙 구문

ACL 등록 정보 파일에서 액세스 제어는 물리적 대상 및 연결 서비스와 같이 보호된 자원에 대해 특정 사용자 또는 그룹이 갖는 액세스 권한을 정의합니다. 액세스 제어는 규칙 또는 규칙 집합으로 표현되며 각 규칙은 Java 등록 정보로 표시됩니다.

이 규칙의 기본 구문은 다음과 같습니다.

resourceType.resourceVariant.operation.access.principalType=principals

표 7-3에서는 구문 규칙의 요소에 대해 설명합니다.

표 7-3 액세스 규칙의 구문 요소 

요소

설명

resourceType

connection, queue 또는 topic 중 하나입니다.

resourceVariant

resourceType에서 지정한 유형의 인스턴스입니다. 예를 들면 myQueue가 있습니다. 와일드카드 문자(*)를 사용하여 모든 연결 서비스 유형 또는 모든 물리적 대상을 나타낼 수 있습니다.

operation

값은 표현할 액세스 규칙의 종류에 따라 달라집니다.

access

allow 또는 deny 중 하나입니다.

principalType

user 또는 group 중 하나입니다. 자세한 내용은 그룹을 참조하십시오.

principals

규칙의 왼쪽에 지정한 액세스를 갖는 사람입니다. principalType이 user이면 개별 사용자 또는 사용자 목록(쉼표로 구분)이 될 수 있고, principalType이 group이면 한 그룹 또는 그룹 목록(쉼표로 구분)이 될 수 있습니다. 와일드카드 문자(*)를 사용하여 모든 사용자 또는 모든 그룹을 나타낼 수 있습니다.

다음은 액세스 규칙의 몇 가지 예입니다.

사용 권한 계산 방법

파일에 여러 액세스 규칙이 있는 경우 사용 권한은 다음과 같이 계산됩니다.

연결 서비스에 대한 액세스 제어

ACL 등록 정보 파일의 연결 액세스 제어 섹션에는 브로커의 연결 서비스에 대한 액세스 제어 규칙이 있습니다. 연결 액세스 제어 규칙의 구문은 다음과 같습니다.

connection.resourceVariant.access.principalType=principals

resourceVariant에 정의할 수 있는 값은 NORMAL과 ADMIN 두 가지입니다. 이러한 사전 정의된 값은 사용자가 액세스 권한을 부여할 수 있는 유일한 연결 서비스 유형입니다.

기본 ACL 등록 정보 파일은 모든 사용자에게 NORMAL 연결 서비스에 대한 액세스 권한을 부여하고 admin 그룹에 속하는 사용자에게는 ADMIN 연결 서비스에 대한 액세스 권한을 부여합니다.

connection.NORMAL.allow.user=*

connection.ADMIN.allow.group=admin

파일 기반 사용자 저장소를 사용하는 경우 기본 그룹 admin이 사용자 관리자 유틸리티를 통해 만들어집니다. LDAP 사용자 저장소를 사용하는 경우 다음 중 하나를 수행하여 기본 ACL 등록 정보 파일을 사용할 수 있습니다.

연결 액세스 권한을 제한할 수 있습니다. 예를 들어, 다음 규칙에서는 NORMAL에 대한 Bob의 액세스를 거부하지만 다른 모든 사람은 허용합니다.

connection.NORMAL.deny.user=Bob

connection.NORMAL.allow.user=*

별표(*) 문자를 사용해서 인증된 모든 사용자 또는 그룹을 지정할 수 있습니다.

ACL 등록 정보 파일을 사용하여 ADMIN 연결에 대한 액세스 권한을 부여하는 방법은 파일 기반 사용자 저장소와 LDAP 사용자 저장소에서 다음과 같이 다릅니다.

물리적 대상에 대한 액세스 제어

액세스 제어 등록 정보 파일의 대상 액세스 제어 섹션에는 물리적 대상 기반 액세스 제어 규칙이 있습니다. 이 규칙은 누가(사용자/그룹) 어디에서(물리적 대상) 무엇을(작업) 할 수 있는지 결정합니다. 이 규칙으로 규제되는 액세스 유형에는 대기열로 메시지 전송, 주제에 메시지 게시, 대기열에서 메시지 수신, 주제에 가입, 대기열에서 메시지 찾아보기가 포함됩니다.

기본적으로 모든 사용자 또는 그룹은 모든 물리적 대상에 대해 모든 유형의 액세스 권한을 갖습니다. 특정 대상 액세스 규칙을 추가하거나 기본 규칙을 편집할 수 있습니다. 이 절의 나머지 부분에서는 규칙을 직접 작성하기 위해 알아야 하는 물리적 대상 액세스 규칙의 구문에 대해 설명합니다.

대상 규칙의 구문은 다음과 같습니다.

resourceType.resourceVariant.operation.access.principalType=principals

표 7-4에서는 이러한 요소에 대해 설명합니다.

표 7-4 물리적 대상 액세스 제어 규칙의 요소 

구성 요소

설명

resourceType

queue 또는 topic일 수 있습니다.

resourceVariant

물리적 대상 이름 또는 모든 대기열이나 모든 주제를 나타내는 모든 물리적 대상(*)입니다.

operation

produce, consume 또는 browse 중 하나일 수 있습니다.

access

allow 또는 deny일 수 있습니다.

principalType

user 또는 group일 수 있습니다.

하나 이상의 사용자 또는 하나 이상의 그룹에 액세스를 허용할 수 있습니다.

다음 예에서는 다양한 종류의 물리적 대상 액세스 제어 규칙을 보여줍니다.

자동 작성 물리적 대상에 대한 액세스 제어

ACL 등록 정보 파일의 마지막 섹션에는 브로커에서 물리적 대상을 자동 작성하는 사용자 또는 그룹을 지정하는 액세스 규칙이 있습니다.

사용자가 아직 존재하지 않는 물리적 대상에서 생성자 또는 사용자를 만든 경우 브로커의 자동 작성 등록 정보가 활성화되어 있으면 브로커가 해당 대상을 만듭니다.

기본적으로 모든 사용자 또는 그룹은 브로커가 물리적 대상을 자동 작성하도록 할 수 있습니다. 이 권한은 다음과 같은 규칙으로 지정합니다.

queue.create.allow.user=*

topic.create.allow.user=*

ACL 파일을 편집하여 이 유형의 액세스를 제한할 수도 있습니다.

물리적 대상 자동 작성 액세스 규칙의 일반 구문은 다음과 같습니다.

resourceType.create.access.principalType=principals

여기서 resourceType은 queue 또는 topic입니다.

예를 들어, 다음 규칙은 브로커가 Snoopy를 제외한 모든 사람에 대해 주제 대상을 자동 작성하도록 허용합니다.

topic.create.allow.user=*

topic.create.deny.user=Snoopy

물리적 대상 자동 작성 규칙의 효과와 물리적 대상 액세스 규칙의 효과 사이에 모순이 없도록 해야 합니다. 예를 들어, 1) 어떤 사용자도 대상으로 메시지를 보낼 수 없도록 대상 액세스 규칙을 변경했는데 2) 대상의 자동 작성은 허용했다면, 브로커는 물리적 대상이 없는 경우 물리적 대상을 만들기는 하지만 메시지를 그 물리적 대상으로 전달하지는 않습니다.


SSL 기반 서비스 작업

SSL(Secure Socket Layer) 표준을 기반으로 하는 연결 서비스에서는 클라이언트와 브로커가 주고 받는 암호화된 메시지를 보냅니다. 이 절에서는 SSL 기반 연결 서비스 설정 방법에 대해 설명합니다.

Message Queue는 SSL(Secure Socket Layer) 표준을 기반으로 하는 다음과 같은 연결 서비스를 지원합니다.

이러한 연결 서비스를 사용하면 클라이언트와 브로커가 주고 받는 메시지를 암호화할 수 있습니다. Message Queue는 자체 서명된 서버 인증서나 서명된 인증서를 기반으로 SSL 암호화를 지원합니다.

SSL 기반 연결 서비스를 사용하려면 키 도구 유틸리티(imqkeytool)를 사용하여 개인 키/공용 키 쌍을 생성합니다. 이 유틸리티는 브로커에 대해 연결을 요청하는 모든 클라이언트로 전달되는 자체 서명된 인증서에 공용 키를 포함합니다. 그러면 클라이언트에서 이 인증서를 사용하여 암호화된 연결을 설정합니다.

Message Queue의 SSL 기반 연결 서비스가 개념은 비슷하지만, 설정 방법에는 몇 가지 차이점이 있습니다.

이 절의 나머지 부분에서는 TCP/IP를 통해 보안 연결을 설정하는 방법에 대해 설명합니다.

HTTP를 통한 SSL 기반 연결 서비스(httpsjms)를 사용하면 클라이언트와 브로커가 HTTPS 터널 서블릿을 통해 보안 연결을 설정할 수 있습니다. HTTP를 통한 보안 연결 설정에 관한 자세한 내용은 부록 C, "HTTP/HTTPS 지원"을 참조하십시오.

TCP/IP에 대한 보안 연결 서비스

다음 SSL 기반 연결 서비스는 TCP/IP를 통해 직접 보안 연결을 제공합니다.

자체 서명된 인증서 사용 구성

이 절에서는 자체 서명된 인증서를 사용하여 SSL 기반 서비스를 설정하는 방법을 설명합니다.

인증 수준을 강화하려면 인증 기관이 확인한 서명된 인증서를 사용할 수 있습니다. 이 절의 단계를 수행한 다음 서명된 인증서 사용 구성으로 이동하여 추가 단계를 수행하십시오.

▶ SSL 기반 연결 서비스를 설정하는 방법
  1. 자체 서명된 인증서를 생성합니다.
  2. 브로커에서 ssljms, ssladmin 또는 cluster 연결 서비스를 활성화합니다.
  3. 브로커를 시작합니다.
  4. 클라이언트를 구성하고 실행합니다(ssljms 연결 서비스에만 적용).

ssljms와 ssladmin 연결 서비스를 설정하는 절차는 단계 4의 클라이언트 구성 및 실행을 제외하면 서로 같습니다.

각 단계에 대해서는 뒤에서 자세히 설명합니다.

단계 1. 자체 서명된 인증서 생성

자체 서명된 인증서를 사용한 Message Queue SSL 지원은 클라이언트가 알려지고 신뢰할 수 있는 서버와 통신한다는 가정 하에 전송 데이터를 보호하기 위한 것입니다.

키 도구 유틸리티를 실행하여 브로커에 자체 서명된 인증서를 생성합니다. Unix®시스템에서 키 저장소를 만들 권한을 가지려면 키 도구를 수퍼유저(root)로 실행해야 할 수도 있습니다.

ssljms, ssladmin 또는 cluster 연결 서비스에 동일한 인증서를 사용할 수 있습니다.

명령 프롬프트에서 다음을 입력합니다.

imqkeytool -broker

유틸리티가 키 저장소 비밀번호를 묻습니다.

Generating keystore for the broker...
Enter keystore password:

그런 다음 유틸리티가 인증서를 소유하는 브로커를 식별하기 위해 정보를 묻는 메시지를 표시합니다. 입력한 정보를 기반으로 X.500 고유 이름이 생성됩니다. 다음 표에서는 프롬프트를 나열 및 설명하고 각 프롬프트에 대한 예를 제공합니다. 값은 대소문자가 구분되며 공백을 포함할 수 있습니다.

표 7-5 자체 서명된 인증서에 필요한 고유 이름 정보 

프롬프트

설명

예

성과 이름은 무엇입니까?

X.500 commonName(CN). 브로커를 실행하는 서버의 정규화된 이름을 입력합니다.

myhost.sun.com

조직 단위의 이름은 무엇입니까?

X.500 organizationalUnit(OU). 부서 이름을 입력합니다.

purchasing

조직의 이름은 무엇입니까?

X.500 organizationName(ON). 회사, 정부 기관 등과 같이 더 큰 조직의 이름을 입력합니다.

My Company, Inc.

구/군/시 이름은 무엇입니까?

X.500 localityName(L).

San Francisco

시/도 이름은 무엇입니까?

X.500 stateName(ST). 약어를 사용하지 않고 시/도의 전체 이름을 입력합니다.

California

이 단위에 대한 두 글자 국가 코드는 무엇입니까?

X.500 country(C).

US

정보 입력이 끝나면 키 도구에서 확인을 위해 해당 정보를 표시합니다. 예를 들면 다음과 같습니다.

Is CN=mqserver.sun.com, OU=purchasing, O=My Company, Inc., L=San Francisco, ST=California, C=US correct?

값을 다시 입력하려면 기본값을 적용하거나 no를 입력합니다. 현재 값을 적용하고 계속하려면 yes를 입력합니다. 확인이 끝난 후 키 쌍이 생성되는 동안 키 도구가 일시 중지됩니다.

그런 다음, 키 도구는 특정 키 쌍을 잠글 비밀번호(키 비밀번호)를 묻습니다. 키 비밀번호 및 키 저장소 비밀번호와 동일한 비밀번호를 사용하려면 이 프롬프트에서 Return 키를 누릅니다.


주

입력한 비밀번호를 기억해 두십시오. 브로커를 시작할 때 이 비밀번호를 입력해야 브로커가 키 저장소를 열 수 있습니다. 비밀번호 파일에 키 저장소 비밀번호를 저장할 수 있습니다(비밀번호 파일 사용 참조).


imqkeytool 명령에서 JDK keytool 유틸리티를 실행하여 자체 서명된 인증서를 생성한 다음, 생성된 인증서를 부록 A, "플랫폼별 Message Queue 데이터의 위치"에 표시된 대로 해당 운영 체제의 디렉토리에 있는 Message Queue의 키 저장소에 넣습니다.

키 저장소의 형식은 JDK1.2 keytool 유틸리티에서 지원하는 것과 같습니다.

Message Queue 키 저장소에 대해 구성 가능한 등록 정보는 다음과 같습니다.

특정 문제를 해결하기 위해 키 쌍을 다시 생성해야 할 수도 있습니다. 예를 들면 다음과 같습니다.

▶ 키 쌍을 다시 생성하는 방법
  1. 부록 A, "플랫폼별 Message Queue 데이터의 위치"에 나와 있는 위치에 있는 브로커의 키 저장소를 제거합니다.
  2. imqkeytool을 다시 실행하여 단계 1. 자체 서명된 인증서 생성의 설명과 같이 키 쌍을 생성합니다.

단계 2. 브로커에서 SSL 기반 서비스 활성화

브로커에서 SSL 기반 서비스를 활성화하려면 imq.service.activelist 등록 정보에 ssljms 또는 ssladmin을 추가해야 합니다.


주

SSL 기반 클러스터 연결 서비스는 imq.service.activelist 등록 정보 대신 imq.cluster.transport 등록 정보를 사용하여 활성화합니다. 브로커 간 보안 연결을 참조하십시오.


▶ 브로커에서 SSL 기반 서비스를 활성화하는 방법
  1. 브로커의 인스턴스 구성 파일을 엽니다.
  2. 인스턴스 구성 파일은 구성 파일이 연관된 브로커 인스턴스의 이름(instanceName)으로 식별되는 디렉토리에 있습니다(부록 A, "플랫폼별 Message Queue 데이터의 위치" 참조).

    /instances/instanceName/props/config.properties

  3. imq.service.activelist 등록 정보에 항목을 추가하고(항목이 아직 없는 경우) 목록에 SSL 기반 서비스를 포함시킵니다.
  4. 기본적으로 이 등록 정보에는 jms 및 admin 연결 서비스가 포함됩니다. 활성화할 서비스에 따라 ssljms 및/또는 ssladmin 연결 서비스를 추가해야 합니다.

    imq.service.activelist=jms,admin,ssljms,ssladmin

단계 3. 브로커 시작

브로커를 시작하고 키 저장소 비밀번호를 제공합니다. 비밀번호는 다음 중 한 가지 방법으로 제공할 수 있습니다.

SSL을 사용하는 브로커나 클라이언트를 시작할 때 몇 초간 CPU 사이클을 과도하게 사용하는 경우가 있을 수 있습니다. 이것은 Message Queue에서 SSL 구현에 JSSE(Java Secure Socket Extension)를 사용하기 때문입니다. JSSE에서는 java.security.SecureRandom을 사용하여 난수를 생성합니다. 이 방법은 초기 난수 시드를 만드는 동안 상당한 시간을 소비하기 때문에 CPU 사용량이 많아지게 됩니다. 시드를 만들고 나면 CPU 수준이 정상으로 돌아갑니다.

단계 4. SSL기반 클라이언트 구성 및 실행

마지막으로 보안 연결 서비스를 사용하도록 클라이언트를 구성합니다. TCP/IP를 통한 보안 연결 시나리오의 유형은 다음 두 가지입니다.

다음 절에서 이 두 가지에 대해 별도로 설명합니다.

ssljms를 사용하는 응용 프로그램 클라이언트

클라이언트의 클래스 경로에 필요한 JSSE(Secure Socket Extension) .jar 파일이 있는지 확인하고 ssljms 연결 서비스를 사용하도록 지정해야 합니다.

  1. 클라이언트에서 (JSSE 및 JNDI 지원이 기본적으로 제공되는) J2SDK1.4를 사용하지 않는 경우에는 클라이언트의 클래스 경로에 다음 .jar 파일이 있는지 확인합니다.
  2. jsse.jar, jnet.jar, jcert.jar, jndi.jar

  3. 클라이언트의 클래스 경로에 다음 Message Queue .jar 파일이 있는지 확인합니다.
  4. imq.jar, jms.jar

  5. 클라이언트를 시작하고 브로커의 ssljms 서비스에 연결합니다. 이 작업을 수행하는 방법 중 하나는 다음과 같은 명령을 입력하는 것입니다.
  6. java -DimqConnectionType=TLS clientAppName

    imqConnectionType을 설정하면 연결에서 SSL을 사용하게 됩니다.

    클라이언트 응용프로그램에서의 ssljms 연결 서비스 사용에 대한 자세한 내용은 Java 클라이언트용 Message Queue 개발 안내서의 관리 객체 사용에 대한 장을 참조하십시오.

ssladmin을 사용하는 관리 클라이언트(imqcmd)

imqcmd를 사용할 때 -secure 옵션을 포함하면 보안 관리 연결을 설정할 수 있습니다. 예를 들면 다음과 같습니다.

imqcmd list svc -b hostName:portNumber -u adminName -secure

여기서 adminName은 Message Queue 사용자 저장소에 유효한 항목이고 이 명령은 비밀번호를 묻는 프롬프트를 표시합니다(플랫 파일 저장소를 사용하는 경우 기본 관리자 비밀번호 변경 참조).

연결 서비스를 나열하는 것은 ssladmin 서비스가 실행 중이며 다음 출력과 같이 보안 관리 연결을 성공적으로 설정할 수 있다는 것을 보여주는 방법입니다.

Listing all the services on the broker specified by:

Host                 Primary Port

localhost            7676

Service Name     Port Number       Service State

admin            33984 (dynamic)   RUNNING

httpjms          -                 UNKNOWN

httpsjms         -                 UNKNOWN

jms              33983 (dynamic)   RUNNING

ssladmin         35988 (dynamic)   RUNNING

ssljms           dynamic           UNKNOWN

Successfully listed services.

서명된 인증서 사용 구성

서명된 인증서는 자체 서명된 인증서보다 더 높은 수준의 서버 인증을 제공합니다. 서명된 인증서를 구현하려면 키 저장소에 서명된 인증서를 설치한 다음 imqbrokerd에 SSL 연결을 설정할 때 서명된 인증서를 요구하도록 Message Queue 클라이언트를 구성합니다.

서명된 인증서는 클라이언트와 브로커 간에만 구현 가능하고 동일 클러스터 내의 브로커 간에는 구현할 수 없습니다.

아래 지침에서는 자체 서명된 인증서 사용 구성에서 설명한 단계를 이미 수행한 것으로 가정합니다. 지침을 따르면 http://java.sun.com 에서 J2SE 키 도구 및 X.509 인증서에 대한 정보에 액세스하는 데 도움이 됩니다.

단계 1: 서명된 인증서 가져오기 및 설치

▶ 서명된 인증서를 가져오는 방법
  1. J2SE 키 도구를 사용하여 방금 생성한 자체 서명된 인증서에 대한 CSR(Certificate Signing Request)을 생성합니다.
  2. 예를 들면 다음과 같습니다.

    keytool -certreq -keyalg RSA -alias imq -file certreq.csr
            -keystore /etc/imq/keystore -storepass myStorePassword

    CSR은 certreq.csr 파일에서 인증서를 캡슐화합니다.

  3. 다음 중 하나의 방법으로 서명된 인증서를 생성하거나 요청합니다.
    • Thawte 또는 Verisign과 같이 공신력 있는 인증 기관(CA)에서 서명한 인증서를 가져옵니다. 이 프로세스에 대한 자세한 내용은 해당 CA의 설명서를 참조하십시오.
    • SSL 서명 소프트웨어 패키지를 사용하여 인증서에 직접 서명합니다.
    • 결과적으로 만들어지는 서명된 인증서는 ASCII 문자 시퀀스입니다. CA로부터 서명된 인증서를 받을 때 해당 인증서는 전자 메일 첨부 파일이나 메시지 텍스트로 전달될 수 있습니다.

  4. 서명된 인증서를 받은 다음 인증서를 파일에 저장합니다.
  5. 이 지침에서는 broker.cer이라는 예 이름을 사용하여 브로커 인증서를 나타냅니다.

▶ 서명된 인증서 설치 방법
  1. 다음과 같이 $JAVA_HOME/lib/security/cacerts를 검사하여 J2SE가 기본적으로 사용자 CA를 지원하는지 여부를 확인합니다.
  2. keytool -v -list -keystore $JAVA_HOME/lib/security/cacerts

    이 명령은 시스템 키 저장소에 있는 루트 CA를 나열합니다.

    해당 CA가 목록에 있는 경우 다음 단계를 건너뜁니다.

  3. 해당 CA가 J2SE에서 지원되지 않는 경우 인증 기관의 루트 인증서를 imqbrokerd 키 저장소로 가져옵니다.
  4. 예를 들면 다음과 같습니다.

    keytool -import -alias ca -file ca.cer -noprompt -trustcacerts
            -keystore /etc/imq/keystore -storepass myStorePassword

    ca.cer 값은 CA에서 가져온 CA 루트 인증서입니다.

    CA 테스트 인증서를 사용하는 경우 테스트 CA 루트 인증서를 가져와야 할 수 있습니다. CA에서 테스트 CA 루트 복사본을 가져오는 방법에 대한 지침을 제공해야 합니다.

  5. 서명된 인증서를 키 저장소로 가져와서 자체 서명된 원본 인증서를 대체합니다.
  6. 예를 들면 다음과 같습니다.

    keytool -import -alias imq -file broker.cer -noprompt -trustcacerts
            -keystore /etc/imq/keystore -storepass myStorePassword

    broker.cer 값은 CA로부터 받은 서명된 인증서가 들어 있는 파일입니다.

이제 imqbrokerd 키 저장소에 SSL 연결에 사용할 서명된 인증서가 있습니다.

단계 2: 서명된 인증서를 요구하도록 클라이언트 런타임 구성

▶ Java 클라이언트 런타임 구성 방법

기본적으로 Message Queue 클라이언트 런타임은 imqbrokerd를 신뢰하므로 제시하는 모든 인증서를 승인합니다. 이제 서명된 인증서를 요구하도록 클라이언트 런타임을 구성하고 클라이언트가 인증서를 서명한 CA를 신뢰하는지 확인합니다.

  1. 클라이언트가 imqbrokerd로부터 유효한 서명된 인증서를 요구하도록 구성하려면 클라이언트의 ConnectionFactory 객체에 대해 imqSSLIsHostTrusted 속성을 false로 설정합니다.
  2. 단계 4. SSL기반 클라이언트 구성 및 실행에서 설명한 대로 imqbrokrd에 SSL 연결을 설정해 봅니다.
  3. 브로커의 인증서가 공신력 있는 CA에 의해 서명된 경우 연결에 성공할 것이므로 다음 단계를 건너뛸 수 있습니다. 인증서 검증 오류로 인해 연결에 실패할 경우 다음 단계를 수행합니다.

  4. 다음 절에서 설명한 대로 클라이언트의 트러스트 저장소에 서명 CA의 루트 인증서를 설치합니다.

다음 세 가지 옵션으로 트러스트 저장소를 사용하여 클라이언트를 구성할 수 있습니다.

다음 절에서는 이러한 옵션을 사용하여 Verisign Test Root CA를 설치하는 방법을 예를 들어 설명합니다. 루트 CA는 testrootca.cer 파일에 포함되어 있습니다. 이 예에서는 J2SE가 /usr/j2se에 설치되어 있다고 가정합니다.

기본 시스템 cacerts 파일에 설치

이 예에서는 루트 CA를 $JAVA_HOME/usr/jre/lib/security/cacerts 파일에 설치합니다.

keytool -import -keystore /usr/j2se/jre/lib/security/cacerts
         -alias VerisignTestCA -file testrootca.cer -noprompt          -trustcacerts -storepass
myStorePassword

기본적으로 클라이언트가 이 키 저장소를 검색하기 때문에 추가 클라이언트 구성은 필요하지 않습니다.

jssecacerts에 설치

이 예에서는 루트 CA를 $JAVA_HOME/usr/jre/lib/security/jssecacerts 파일에 설치합니다.

keytool -import -keystore /usr/j2se/jre/lib/security/jssecacerts
         -alias VerisignTestCA -file testrootca.cer -noprompt
         -trustcacerts -storepass myStorePassword

기본적으로 클라이언트가 이 키 저장소를 검색하기 때문에 추가 클라이언트 구성은 필요하지 않습니다.

다른 파일에 설치

이 예에서는 루트 CA를 /home/smith/.keystore 파일에 설치합니다.

keytool -import -keystore /home/smith/.keystore
         -alias VerisignTestCA -file testrootca.cer -noprompt          -trustcacerts -storepass myStorePassword

기본적으로 클라이언트는 이 키 저장소를 검색하지 않기 때문에 클라이언트에 트러스트 저장소 위치를 제공해야 합니다. 그렇게 하려면 클라이언트가 실행된 다음 Java 시스템 등록 정보 javax.net.ssl.trustStore를 설정합니다. 예를 들면 다음과 같습니다.

javax.net.ssl.trustStore=/home/smith/.keystore


비밀번호 파일 사용

여러 가지 명령 유형에 비밀번호가 필요합니다. 표 7-6에서 첫 번째 열에는 비밀번호가 필요한 명령이 나열되고 두 번째 열에는 비밀번호가 필요한 이유가 나열됩니다.

표 7-6 비밀번호를 사용하는 명령

명령

목적

비밀번호의 목적

imqbrokerd

브로커 시작

JDBC 기반 영구 데이터 저장소, SSL 인증서 키 저장소 또는 LDAP 사용자 저장소에 액세스합니다.

imqcmd

브로커 관리

명령 사용 권한이 있는 관리 사용자를 인증합니다.

imqdbmgr

JDBC 기반 데이터 저장소 관리

데이터 저장소에 액세스합니다.

비밀번호 파일에 비밀번호를 지정하고 -passfile 옵션을 사용하여 파일의 이름을 지정할 수 있습니다. -passfile 옵션의 형식은 다음과 같습니다.

imqbrokerd -passfile myPassfile


주

이전 릴리스에서는 -p, -password, -dbpassword 및 -ldappassword 옵션을 사용하여 명령줄에서 비밀번호를 지정할 수 있었습니다. 이러한 옵션은 더 이상 사용되지 않으며 향후 릴리스에서는 제거됩니다. 현재 릴리스에서는 이러한 옵션 중 하나에 대한 명령줄의 값이 비밀번호 파일의 관련 값보다 우선합니다.


보안 문제

모니터를 다른 사람이 보고 있지 않다면 프롬프트에 응답하여 비밀번호를 대화식으로 지정하는 것이 가장 안전한 비밀번호 지정 방법입니다. 명령줄에서 비밀번호 파일을 지정할 수도 있습니다. 명령을 비대화식으로 사용할 경우 비밀번호 파일을 사용해야 합니다.

비밀번호 파일은 암호화되지 않기 때문에 사용 권한을 설정하여 인증되지 않은 액세스로부터 보호해야 합니다. 브로커를 시작하는 사용자가 파일을 볼 수 있지만 읽기 액세스만 허용하도록 사용 권한을 설정합니다.

비밀번호 파일 내용

비밀번호 파일은 일련의 등록 정보와 값이 들어 있는 간단한 텍스트 파일입니다. 각 값은 명령에 사용되는 비밀번호입니다.

비밀번호 파일에는 표 7-7에 표시된 비밀번호를 포함할 수 있습니다.

표 7-7 비밀번호 파일의 비밀번호

비밀번호

영향 받는 명령

설명

imq.imqcmd.password

imqcmd

imqcmd 명령줄에 대한 관리자 비밀번호를 지정합니다. 비밀번호는 각 명령에 대해 인증됩니다.

imq.keystore.password

imqbrokerd

SSL 기반 서비스의 키 저장소 비밀번호를 지정합니다.

imq.persist.jdbc.password

imqbrokerd

imdbmgr

필요한 경우 데이터베이스 연결을 여는 비밀번호를 지정합니다.

imq.user_repository.ldap.password

imqbrokerd

구성된 LDAP 사용자 저장소에 바인드할 수 있도록 브로커에 할당한 고유 이름에 연결되는 비밀번호를 지정합니다.

샘플 비밀번호 파일은 Message Queue 제품의 일부입니다. 샘플 파일의 위치는 부록 A, "플랫폼별 Message Queue 데이터의 위치"를 참조하십시오.


감사 로그 만들기

Message Queue는 엔터프라이즈판에서만 감사 로깅을 지원합니다. 감사 로깅이 활성화되면 Message Queue는 다음과 같은 이벤트 유형에 대한 레코드를 생성합니다.

Message Queue 브로커 로그 파일에 감사 레코드를 기록하려면 imq.audit.enabled 브로커 등록 정보를 true로 설정합니다. 로그의 모든 감사 레코드에는 AUDIT 키워드가 있습니다.



이전      목차      색인      다음     


부품 번호: 819-3563.   Copyright 2005 Sun Microsystems, Inc. 모든 권리는 저작권자의 소유입니다.