Oracle

게시글 보기
작성자 유건데이타 등록일 2015-08-14
제목 SSL을 사용한 Net8 TCP/IP
8.1.6 에서부터는 SSL을 사용한 Net8 TCP/IP 구현이 가능하다.



* NET8 TCP/IP VIA SSL 환경설정

Net8에서 SSL을 사용하기 위해서는 먼저 SSL 인증서가 필요하며, 그 다음으로
SSL관련 Net8 환경설정을 하면 된다. 데이타베이스 설정도 있으나, 반드시
필요한 것은 아니다.


1. CA (Certificate Authority)로 부터 SSL 인증서 발급받기

Oracle Wallet Manager (owm)을 사용해서 ITU X.509 V3 기반의 인증서를 생성해
CA에게 보내야한다. CA로부터 받은 인증서도 Wallet Manager를 사용하여 저장하게
된다.

1.1 OWM (Wallet Manager)을 OS 상에서 실행한다.

UNIX: $ORACLE_HOME/bin/owm

WINNT: Start -> Programs -> Oracle -> Network Administration -> Wallet Manager

OWM: Wallet -> New -> create the user's default directory에서 Yes 선택
-> Password 입력 -> create a certificate request 에서 Yes 선택

1.2 PKCS#10 인증서 요청서 생성

인증서 요청시 사용되는 이름은 DN (distinguished name)이라 불리며, 필수 항목
은 'Common Name' 과 'Country' 이다. DN 은 Enterprise User Security feature
을 사용할 경우 Enterprise Security Manager 에서 사용된다.

예) Common Name = csupport
Organization = oss
Company = oracle
Country = Germany

요청의 포맷은 다름과 같다.

CN=csupport, OU=oss, O=oracle, C=DE

키의 길이는 CA에서 지원되는 범위에서 선택한다. 키길이가 길수록 보안성은
높아진다. (예 key size = 512 bits).


인증서 요청서는 아래와 같이 시작과 끝을 나타내는 코드로 묶이게 된다.

"-----BEGIN NEW CERTIFICATE REQUEST-----"

"-----END NEW CERTIFICATE REQUEST-----".

인증서 요청서가 생성되면, 파일로 저장을 하거나 Cut & Paste 해서 CA에
보내면 된다.

이를 접수한 CA는 다음 코드로 시작과 끝을 묶어서 인증서를 발급한다.

"-----BEGIN CERTIFICATE-----"

"-----END CERTIFICATE-----".

1.3 Import User Certificate

OWM: Operations -> Import User Certificate -> Select the import method ->
인증서를 Paste 하거나 인증서 파일을 선택한다.

만약 작업 도중 아래의 메세지를 만난게 된다면,

'User certificate import has failed because the CA certificate doesn't exists.
Do you want to import CA certificate now?'

이것은 Wallet Manager가 인증서를 발급한 CA를 신뢰할 수 없기 때문이며,
이 경우에는 CA의 인증서가 필요하다. CA의 Trusted Certificate을 받은 후
Operations -> Import Trusted Certificate -> 인증서 붙여넣기 또는 파일을
선택하면 된다.


1.4 Wallet 저장하기

OWM: Wallet -> Auto Login을 enabled 시킨다.
Wallet -> Wallet을 시스템 디폴트로 저장한다.

Wallet 디렉토리는

UNIX: /etc/ORACLE/WALLETS/

WINNT: \winnt\profiles\\ORACLE\WALLETS

이렇게 하면 2개의 파일이 생성된다.

ewallet.der <- 인증서
cwallet.sso <- Wallet이 오픈되면 생성되는 파일

Wallet이 clesed되면 (cwallet.sso 파일이 삭제됨) SSL을 사용할 수 없다.

1.5 Wallet 사용하기

오라클은 wallet을 열고 닫을 수 있는 2개의 툴이 있다.

1.5.1 Wallet 매니저

Open Wallet: Wallet -> select Auto Login -> Save In System Default -> Exit
Close Wallet: Wallet -> deselect Auto Login -> Save In System Default -> Close
-> Exit

1.5.2 Enterprise Login Assistant

UNIX: $ORACLE_HOME/bin/elogin

WINNT: Start -> Programs -> Oracle -> Network Administration -> Enterprise
Login Assistant

Open Wallet: AutoLogin -> Logout -> red light

Close Wallet: AutoLogin -> Login -> Enter Wallet Password -> green light

1.6 Net8에서 SSL을 사용하고자 하는 모든 OS 유저들에게 1.1에서 1.5단계의 작업을
해주어야 해당 유저가 이 기능 사용이 가능하다.

2. Net8 TCP/IP with SSL 환경 설정

Net8 Configuration Assistant 를 상ㅇ해서 Net8 클라이언트와 서버의 환경을
설정한다.

참고 문서로는 Oracle Advanced Security Administrator's Guide가 있다.
이 문서에 보면 프로토콜 타입을 TCPS로 SSL을 사용한 TCP/IP 의 Net 8 환경
설정을 볼 수 있다.

자세한 사항을 아래를 참고할 것.

2.1 SSL 사용을 위한 클라이언트 환경 설정:

SQLNET.ORA:

SSL_CIPHER_SUITES= (SSL_RSA_EXPORT_WITH_RC4_40_MD5)
# 인크립션 타입 설정. Optional 항목
# 클라이언트와 서버의 핸드쉐이크 과정에서 가능한 가장 보안성이 높은
# 암호화 방법 선택

OSS.SOURCE.MY_WALLET =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = c:\winnt\profiles\csupport\ORACLE\WALLETS)
)
)
# 모든 유저는 자신의 Wallet을 사용한다. 이 항목은 필수 항목이며,
# TNS_ADMIN 환경변수를 참고 한다.

SSL_CLIENT_AUTHENTICATION = TRUE
# 클라이언트 인증을 한다. 디폴트가 True 이다.

SQLNET.AUTHENTICATION_SERVICES = (BEQ,TCPS)
# TCPS가 SSL 연결에서 Authentication 서비스를 enable 시킨다.

NAMES.DIRECTORY_PATH= (TNSNAMES)

SQLNET.CRYPTO_SEED = 4fhfguweotcadsfdsafjkdsfqp5f201p45mxskdlfdasf

TNSNAMES.ORA

O8IV2_SSL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCPS)(HOST = server)(PORT = 2484))
)
(CONNECT_DATA =
(SERVICE_NAME = o8iv2)
)
)
# TCPS 는 NET8 SSL 에서 필수 항목이다.
# 2484 포트가 NET8 SSL 연결에서 레커멘드되는 포트이고,
# 서버측 환경과 맞아야 한다.

2.2 Server configuration for SSL:

SQLNET.ORA

SSL_CIPHER_SUITES= (SSL_RSA_EXPORT_WITH_RC4_40_MD5)

OSS.SOURCE.MY_WALLET =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /etc/ORACLE/WALLETS/oracle8i)
)
)
# Wallet의 설치된 디렉토리. 이 예제는 Unix인 경우이다.

SSL_CLIENT_AUTHENTICATION = TRUE
# 서버가 클라이언트 인증을 시행한다.

NAMES.DIRECTORY_PATH= (TNSNAMES)

SQLNET.CRYPTO_SEED = sdkflk46709lkfjw039436gjotu456gjlkfjw40935i09


LISTENER.ORA

OSS.SOURCE.MY_WALLET =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /etc/ORACLE/WALLETS/oracle8i)
)
)
# 리스너는 OS 상에 같은 유저로 실행되면 데이타베이스와 같은 Wallet을
# 사용한다.

SSL_CLIENT_AUTHENTICATION = FALSE
# 리스너는 클라이언트 인증을 하지 않는다. 데이타베이스 인스턴스에서
# 실행되기 때문이다.

LISTENER_SSL=
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = server)(PORT = 2484))
)
)
# 2484 포트를 Net8 SSL 로 사용한다.
# ( 문서에 포트 사용에 관한 설명이 있으므로 참고할 것)


3. 데이타베이스

경우에 따라서 MTS와 SSL user 사용할 수도 있다.

3.1 MTS (optional)

MTS 에서 SSL 커넥션을 사용하고자 할 경우에는 아래와 같이 init.ora 에
환경 설정시 프로토콜을 TCPS 로 하면 된다.

mts_dispatchers = "(protocol=TCPS)(DISP=2)"

3.2 SSL 유저 생성 (optional)

데이타베이스에 SSL 유저를 위한 스키마 생성한다.
SSL 만을 사용하더라도 데이타베이스 스키마에 접속시 패스워드에 암호화된
추가 데이타를 사용함으로 반드시 사용해야 할 필요는 없다. 그러나,
데이타베이스에 SSL 인증을 사용할 수 있다. 이 경우에는 Wallet을 사용하여
데이타베이스 스키마가 글로벌로 되어 있어야 한다.

create user csupport identified globally as
'cn=csupport, ou=oss, o=oracle, c=DE';

grant connect, resource to csupport;
Comment
등록된 코멘트가 없습니다.