저자: 폴 웨인스테인(Paul Weinstein), 역 송종범
폴 웨스테인(Paul Weistein)은 돌아오는 6월 22일 샌디에고에서 개최될 오라일리 오픈 소스 컨벤션에서
아파치와 SSL에 대한 튜토리얼을 제공할 예정이다.
SSL(Secure Sockets Layer)은 넷스케이프 커뮤니케이션(Netscape Communication)이 개발하였으며 TLS(Transport Layer Security)는 IETF(Internet Engineering Task Force)에서 나온 SSL의 오픈 소스 표준 대안이다. SSL과 TLS는 TCP/IP에 대해 암호화와 인증을 더해주는 두 프로토콜로 이번 기사는 두 프로토콜의 작동법과 아파치가 이 두 프로토콜의 구현하는 법과 같은 기본적인 개념을 요약할 것이다. 따라서 여러분은http를 통하여 안전하게 정보를 전달하는 방법을 구현할 수 있을 것이다.
SSL과 TLS
SSL과 TLS는 두 가지 중요 사양을 갖췄다. 첫째는 암호문으로 이것은 클라이언트와 서버간의 데이터 암호화를 가능하게 한다. 둘째는 전자 서명으로 클라이언트와 서버의 인증 방법을 제공한다. SSL은 안전하고 효과적인 방법으로 정보를 암호화하기 위해 대칭(잘 알듯이 비밀키)과 비대칭(공개키) 암호문을 사용한다. 특히 공개키 암호화 기술에 기반을 둔 전자 서명은 인증을 위한 방법을 제공한다.
보안http 연결을 위한 SSL 신호변경(handshaking)에 대해 살펴보자. 우리는 암호화 및 클라이언트와 서버를 인증하기 위해서 어떻게 SSL이 암호문과 전자 서명을 사용하는지 배울 수 있을 것이다.
- 웹 클라이언트는 443(https)포트로http 연결을 하여 안전한 트랜잭션을 요청한다. 세션 및 알려진 암호문과 키 사이즈(key size) 목록을 확인하는 정보도 함께 보낸다.
- 서버는 세션 상태를 결정하기 위해 세션 정보를 사용한다. 새로운 SSL 세션이 성립하면, 서버는 미리 정해진 우선 순위 목록과 클라이언트 목록에 근거한 암호문과 키 사이즈의 목록을 되돌려준다. 또한 서버를 인증하는 전자서명을 보낸다. 서버가 전자 서명을 사용하여 자신을 인증하는 클라이언트를 요구하도록 설정되었다면 서버 역시 클라이언트로 인증 요청을 보낸다.
- 클라이언트는 전자 서명을 발급하고 서명한 인증 기관에 기반한 서버를 인증한다. 클라이언트가 인증 기관을 신뢰하면 인증서와 함께 보내진 정보는 신뢰할 수 있는 것이며 그 결과 전자 서명을 보낸 서버도 신뢰할 것이다.
- 클라이언트는 암호문과 키 사이즈를 사용하여 대칭 키를 만든다. 이런 과정을 거치고 나면 클라이언트는 공개키를 사용하여 대칭 키를 암호화 하고, 서버의 비대칭 키는 서버의 전자 서명에서 암호화된다. 서버가 클라이언트 인증을 위해 전자 서명을 요청하면 클라이언트는 서버로 암호화된 대칭키를 함께 보낸다.
- 서버가 클라이언트로부터 전자서명을 요청하면 서버는 클라이언트의 전자 서명을 발급하고 서명한 인증 기관에 근거한 인증서를 인증할 것이다. 여기서 만약 서버가 클라이언트를 인증할 수 없다면 세션은 끝난다. 서버가 클라이언트를 성공적으로 인증하거나 인증을 위해 클라이언트로부터 전자 서명을 요청하지 않으면 서버는 비대칭키를 복호화하기 위해 개인키를 사용한다.
- 클라이언트와 서버는 세션키로 알려진 또다른 대칭키를 생성하기 위하여 대칭키를 사용한다.
- 클라이언트는 서버에게 클라이언트로부터 올 모든 메시지는 세션키로 암호화될 것이라는 메시지를 보낸다. 그리고 클라이언트는 클라이언트 측 신호 변경이 완료되었음을 알리는 암호화 된 분리 메시지를 보낸다.
- 서버는 클라이언트에게 서버에서 올 모든 메시지는 세션키로 암호화될 것이라는 메시지를 보낸다. 그리고 서버는 서버측 신호변경이 완료되었음을 알리는 암호화 된 분리 메시지를 보낸다.
- SSL 신호변경이 완료되고 세션은 시작된다. 클라이언트와 서버는 주고받는 데이터를 암호화하고 복호화하며 데이터의 무결성을 확인하기 위해 세션키를 사용한다.
Apache와 SSL
Apache와 SSL을 구현한 Ben Laurie의
Apache-SSL을 소개하겠다. 아파치 코드 기반을 위한 패치 모음 중 하나인 이 패치는 아파치로 SSL을 가능하게 하는
OpenSSL 오픈 소스 공개 키 툴킷을 허용한다. 그렇지만 SSL을 구현하기 위한 가장 많이 사용되는 방법은 Ralf Engelschall의
mod_ssl이다.
mod_ssl 메소드는 아파치로 OpenSSL 인터페이스를 설정하기위해 아파치 모듈러를 이용한다.
4월 발표된 E-Soft의 Apache Module Report에 의하면 모든 아파치 설치에서 거의 1/4 가량이
mod_ssl을 사용한다고 한다. 더 높은 비율이 매겨진 아파치 모듈은
mod_php가 유일하며 40퍼센트 정도이다.
mod_ssl은 완전하게 확장 API(EAPI)를 사용하는 아파치 1.3.x에 집적되어 있으며 사용하지 않는 동안은 메모리 절약을 위해 동적 공유 오브젝트(DSO)로 로드될 수 있다. Apache를 구현한 상업용 패키지 역시 SSL을 추가하기 위해
mod_ssl에 의존한다.
SSL을 추가에
mod_ssl이 아파치 1.3.x 코드 기본로 가장 인기있는 방법이라는 사실과 더불어,
mod_ssl은 아파치 2.0에서 Apache Group이 SSL을 구현하기 위한 기본 방법으로 채택하였다. 게다가 아파치 1.3.x에서
mod_ssl은 따로 다운로드 받아서 컴파일 했지만, 아파치 2.0에서는
mod_ssl은 다운로드 받을 수 있는 아파치 소스 코드에 포함되어 있다. 따라서 아파치 2.0을 구축할 때
-enable-ssl 스위치로 가능하게 할 수 있다.
Apache와 SSL는 안전한 방법으로 전자 상거래 사이트에서 고객의 정보와 같은 특정 정보를 수집하는 웹사이트 배치 뿐만 아니라 비영리 기구의 인트라넷 같은 곳에서 정보를 제공하는 것도 가능하게 해준다.
예를 들어 신용카드로 온라인 상점에서 어떤 상품을 사려는 고객은 언제 SSL이 가능한 서버로 접속했는지를 알 수 있으며 다음과 같은 사실도 인지하고 있다.
- 온라인 상점의 서버에서 이루어진 통신은 안전하다.
- 데이터를 복호화하는 상점의 서버는 실제로 서버의 전자 서명으로 확인되고 신뢰받는 서드 파티에 의해 인증된다. 바꿔 말하면 신용 카드 정보는 고객이 신뢰하는 상품 구매를 진행하는데 사용된다.
또 다른 예로 비영리 기관의 자원봉사자가 자신의 집이나 사무실에서 인트라넷에 접속할 때로 다음과 같은 사실을 알고 있다.
- 기관의 서버에서 이루어진 통신은 안전하다.
- 복호화 끝단에 있는 서버는 실제로 기관의 서버이며, 서버에서 접근되는 정보는 유효하다.
- 복호화 끝단의 클라이언트는 실제로 자원 봉사자이며 기관에서 온라인 정보를 접근할 수 있는 허가권을 가지고 있다.
더 알아두면 유용한 정보
아파치와 SSL에 관련된 더 자세한 정보는 올 6월 개최될
오라일리 오픈소스 컨벤션에서 제공할
필자의 튜토리얼을 꼭 참고하기 바란다.
Apache 1.3.x와 2.0에 대한 추가적인 정보는
Apache Web Site에서 알 수 있다. OpenSSL 툴 킷은
Apache-SSL 사이트에 있는 오픈 소스 개발자들이 개발하고 유지한다. 아파치를 상업적으로 구현한 패키지에 대한 정보는
아파치 관련 프로젝트 페이지와
Security space의 웹서버 시장에 대한 E-soft의 다양한 리포트에서 찾을 수 있다.
폴 웨인스테인(Paul Weinstein)은 Waubonsie 컨설팅사의 수석 컨설턴트이다.