보안이란 데이터를 보호하는 것이며 데이터를 저장하거나 전송할 때 해당 데이터에 대한 인증 되지않은 액세스나 손상을 방지하는 방법입니다. Application Server에는 J2EE 표준을 기반으로 하는 확장 가능한 동적 보안 구조가 있습니다. 내장된 보안 기능에는 암호화 도구 인증 및 권한 부여 공개 키 인프라가 포함됩니다. Application Server는 시스템이나 사용자에 대한 잠재적인 위험 없이 응용 프로그램을 안전하게 실행할 수 있는 샌드 박스를 사용하는 Java 보안 모델에 구축되어 있습니다. 이 장은 다음 내용으로 구성되어 있습니다.
대개, 다음과 같은 두 종류의 응용 프로그램 보안이 있습니다.
프로그래밍 방식의 보안의 경우 개발자가 작성한 응용 프로그램 코드에서 보안 작업을 처리합니다. 관리자는 이 메커니즘에 대한 제어 권한이 없습니다. 일반적으로, J2EE 컨테이너를 통해 구성을 관리하는 대신 응용 프로그램에 보안 구성을 하드 코드하기 때문에 프로그래밍 방식의 보안을 권장하지 않습니다.
선언적 보안의 경우 컨테이너(Application Server)가 응용 프로그램의 배포 설명자를 통해 보안을 처리합니다. 배포 설명자를 직접 편집하거나 deploytool 같은 도구를 사용하여 선언적 보안을 제어할 수 있습니다. 응용 프로그램을 개발한 후 배포 설명자를 변경할 수 있기 때문에 선언적 보안을 사용하면 더 많은 유연성이 훨씬 더 허용됩니다.
응용 프로그램 보안 외에 Application Server 시스템의 모든 응용 프로그램에 영향을 미치는 시스템 보안도 있습니다.
프로그래밍 방식의 보안은 응용 프로그램 개발자가 제어하므로 이 문서에서 설명하지 않습니다. 선언적 보안의 경우 덜 제어되므로 이 문서에서 가끔 다룹니다. 이 문서는 기본적으로 시스템 관리자를 대상으로 하므로 시스템 보안에 대해 중점적으로 설명합니다.
Application Server에서는 보안을 관리하기 위한 다음 도구를 제공합니다.
관리 콘솔은 전체 서버의 보안을 구성하고 사용자 그룹 및 영역을 관리하며 시스템 차원의 다른 보안 작업을 수행하기 위해 사용하는 브라우저 기반의 도구입니다. 관리 콘솔에 대한 일반적인 정보는 관리 도구를 참조하십시오. 관리 콘솔에서 수행할 수 있는 보안 작업에 대한 개요는 관리 콘솔을 사용하여 보안 관리를 참조하십시오.
asadmin은 관리 콘솔과 동일한 많은 작업을 수행하는 명령줄 도구입니다. 관리 콘솔로 수행할 수 없는 일부 작업은 asadmin으로 수행할 수 있습니다. 명령 프롬프트나 스크립트에서 asadmin 명령을 수행하여 반복적인 작업을 자동화할 수 있습니다. asadmin에 대한 일반적인 정보는 관리 도구를 참조하십시오.
deploytool은 그래픽 패키지 및 배포 도구로, 개별 응용 프로그램의 보안을 제어하기 위해 응용 프로그램 배포 설명자를 편집하는 데 사용합니다. deploytool은 응용 프로그램 개발자를 대상으로 하기 때문에 이 설명서에서는 자세히 설명하지 않습니다. deploytool 사용에 대한 자세한 내용은 도구의 온라인 도움말과 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html에 있는 J2EE 1.4 Tutorial을 참조하십시오.
Java 2 Platform, Standard Edition(J2SE)에서는 보안을 관리하기 위한 다음 두 가지 도구를 제공합니다.
keytool은 디지털 인증서와 키 쌍을 관리하기 위한 명령줄 유틸리티입니다. keytool을 사용하여 certificate 영역의 사용자를 관리합니다.
policytool은 시스템 차원의 Java 보안 정책을 관리하기 위한 그래픽 유틸리티입니다. 관리자는 policytool을 사용할 필요가 거의 없습니다.
keytool, policytool 및 다른 Java 보안 도구 사용에 대한 자세한 내용은 http://java.sun.com/j2se/1.4.2/docs/tooldocs/tools.html#security에 있는 Java 2 SDK Tools and Utilities를 참조하십시오.
Enterprise Edition의 경우 NSS(Network Security Services)를 구현하는 다른 두 개의 도구를 보안 관리에 사용할 수 있습니다. NSS에 대한 자세한 내용을 보려면 http://www.mozilla.org/projects/security/pki/nss/로 이동하십시오. 보안 관리 도구는 다음과 같습니다.
certutil은 인증서 및 키 데이터베이스를 관리하기 위한 명령줄 유틸리티입니다.
pk12util은 인증서/키 데이터베이스와 PKCS12 형식의 파일 간에 키와 인증서를 내보내고 가져오기 위해 사용하는 명령줄 유틸리티입니다.
certutil, pk12util 및 다른 NSS 보안 도구 사용에 대한 자세한 내용은 http://www.mozilla.org/projects/security/pki/nss/tools에 있는 NSS Security Tools를 참조하십시오.
Application Server의 이번 릴리스에서 특정 도메인에 대한 사양을 포함하는 domain.xml 파일에는 기본적으로 Sun Java System 메시지 대기열 브로커의 비밀번호가 일반 텍스트로 포함되어 있습니다. 이 비밀번호를 포함하는 domain.xml 파일의 요소는 jms-host 요소의 admin-password 속성입니다. 설치 시, 이 비밀번호를 변경할 수 없기 때문에 보안에 큰 영향을 미치지 않습니다.
그러나 관리 콘솔을 사용하여 사용자와 자원을 추가하고 이 사용자와 자원에 비밀번호를 지정합니다. 예를 들어, 데이터베이스에 액세스하기 위한 비밀번호처럼 이 비밀번호 중 일부는 domain.xml 파일에 일반 텍스트로 기록됩니다. 이 비밀번호를 domain.xml 파일에 일반 텍스트로 기록하면 보안 위험이 있을 수 있습니다. 다음 절차를 수행하여 admin-password 속성이나 데이터베이스 비밀번호를 포함하여 domain.xml의 비밀번호를 암호화할 수 있습니다.
domain.xml 파일이 있는 디렉토리(기본적으로 domain-dir/config)에서 다음의 asadmin 명령을 실행합니다.
asadmin create-password-alias --user admin alias-name |
예를 들면 다음과 같습니다.
asadmin create-password-alias --user admin jms-password |
비밀번호 프롬프트(이 경우 admin)가 표시됩니다. 자세한 내용은 create-password-alias, list-password-aliases, delete-password-alias 명령에 대한 설명서 페이지를 참조하십시오.
domain.xml의 비밀번호를 제거하고 바꿉니다. asadmin set 명령을 사용하여 이를 수행합니다. 다음은 이러한 용도로 set 명령을 사용하는 예입니다.
asadmin set --user admin server.jms-service.jms-host. default_JMS_host.admin-password=${ALIAS=jms-password} |
관련 도메인을 위해 Application Server를 다시 시작합니다.
일부 파일에는 파일 시스템 권한을 사용하여 보호해야 하는 암호화된 비밀번호가 포함되어 있습니다. 이 파일에는 다음 내용이 포함되어 있습니다.
domain-dir/master-password
이 파일에는 암호화된 마스터 비밀번호가 포함되어 있고 파일 시스템 권한 600을 사용하여 이 파일을 보호해야 합니다.
--passwordfile 인수를 사용하는 인수로 asadmin에 전달하기 위해 만든 모든 비밀번호 파일은 파일 시스템 권한 600을 사용하여 보호해야 합니다.
마스터 비밀번호(MP)는 전체적으로 공유하는 비밀번호입니다. 마스터 비밀번호는 인증에 사용되지 않고 네트워크를 통해 전송되지 않습니다. 이 비밀번호는 전체적인 보안의 억제 지점입니다. 필요할 경우 수동으로 입력하도록 선택하거나 파일에 숨길 수 있습니다. 비밀번호는 시스템에서 가장 중요한 데이터입니다. 이 파일을 제거하여 MP 요구를 강제로 실행할 수 있습니다. 마스터 비밀번호를 변경한 경우 마스터 비밀번호 키 저장소에 다시 저장됩니다.
도메인의 Application Server를 중지합니다. asadmin change-master-password 명령을 사용하여 이전 비밀번호와 새 비밀번호에 대한 메시지를 표시한 다음 모든 하위 종속 항목을 다시 암호화합니다. 예를 들면 다음과 같습니다.
asadmin change-master-password> Please enter the master password> Please enter the new master password> Please enter the the new master password again> |
Application Server를 다시 시작합니다.
이 때 실행 중인 서버 인스턴스를 시작해서는 안되며, 해당 노드의 SMP 에이전트가 변경될 때까지 실행 중인 서버 인스턴스를 다시 시작해서는 안 됩니다. SMP를 변경하기 전에 서버 인스턴스를 다시 시작한 경우 서버 인스턴스가 시작되지 않습니다.
노드 에이전트 및 관련된 서버를 한 번에 하나씩 중지합니다. asadmin change-master-password 명령을 다시 실행한 다음 노드 에이전트 및 관련된 서버를 다시 시작합니다.
모든 노드 에이전트를 주소 지정할 때까지 다음 노드 에이전트를 계속합니다. 이런 방법으로 변경 사항 롤백이 수행됩니다.
관리 비밀번호 암호화는 비밀번호 보안 관리에 설명되어 있습니다. 관리 비밀번호를 암호화할 것을 강력하게 권장합니다. 암호화하기 전에 관리 비밀번호를 변경하려면 asadmin set 명령을 사용합니다. 다음은 이러한 용도로 set 명령을 사용하는 예입니다.
asadmin set --user admin server.jms-service.jms-host.default_JMS_host.admin-password=new_pwd |
다음 절차와 같이 관리 콘솔를 사용하여 관리 비밀번호를 변경할 수도 있습니다.
관리 콘솔 트리 구성 요소에서 구성 노드를 확장합니다.
구성할 인스턴스를 선택합니다.
보안 노드를 확장합니다.
영역 노드를 확장합니다.
admin-realm 노드를 선택합니다.
영역 편집 페이지에서 사용자 관리 버튼을 누릅니다.
admin이라는 사용자를 선택합니다.
새로운 비밀번호를 입력하고 비밀번호를 확인합니다.
저장을 눌러 저장하거나 닫기를 눌러 저장하지 않고 닫습니다.
다음 항목에 보안 책임이 지정됩니다.
응용 프로그램 개발자의 책임은 다음과 같습니다.
응용 프로그램 구성 요소에 대한 역할 및 역할 기반 액세스 제한 사항 지정
응용 프로그램의 인증 방법 정의 및 보안을 설정할 응용 프로그램의 부분 지정
응용 프로그램 개발자는 deploytool 같은 도구를 사용하여 응용 프로그램 배포 설명자를 편집할 수 있습니다. 이 보안 작업에 대해서는 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html에서 볼 수 있는 J2EE 1.4 Tutorial의 Security 장에 자세히 설명되어 있습니다.
응용 프로그램 배포자의 책임은 다음과 같습니다.
사용자나 그룹 또는 둘 다를 보안 역할에 매핑
특정 배포 시나리오의 요구 사항에 맞게 구성 요소 메소드에 액세스하는 데 필요한 권한 조정
응용 프로그램 배포자는 deploytool 같은 도구를 사용하여 응용 프로그램 배포 설명자를 편집할 수 있습니다. 이 보안 작업에 대해서는 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html에서 볼 수 있는 J2EE 1.4 Tutorial의 Security 장에 자세히 설명되어 있습니다.
시스템 관리자의 책임은 다음과 같습니다.
보안 영역 구성
사용자 계정 및 그룹 관리
감사 로그 관리
서버 인증서 관리 및 서버의 SSL(Secure Socket Layer) 사용 구성
커넥터 연결 풀에 대한 보안 맵, 추가 JACC 공급자 등과 같은 시스템 차원의 다양한 다른 보안 기능 처리
시스템 관리자는 관리 콘솔을 사용하여 서버 보안 설정을 관리하고 certutil을 사용하여 인증서를 관리합니다. 이 문서는 기본적으로 시스템 관리자를 대상으로 합니다.