OpenERP 서버에서 Apache로 SSL 설정 (Ubuntu 10.04)
목표 및 개요
이 문서는 Ubuntu 10.04 LTS Server에서 실행 중인 새 OpenERP 서버에 SSL 암호화 접근을 제공하는 현재의 방법을 설명합니다. Apache를 리버스 프록시로 사용해 웹(HTTP) 트래픽과 WebDAV/CalDAV 트래픽을 SSL에서 종료(termination)합니다. GTK 데스크톱 클라이언트는 OpenERP 서버의 XMLRPC-SSL 포트로 직접 암호화된 연결을 맺습니다.
중요: 이 가이드에서는 자체 서명(self-signed) 인증서를 사용합니다. 자체 서명의 장단점 논의와 공개 CA 사용 방법은 이 문서 범위를 벗어납니다.
Note: Debian/Ubuntu 계열에서 Apache 패키징과 설정 방식은 다른 배포판과 차이가 있으므로, 서버에 있는 /usr/share/doc/apache2.2-common/README.Debian.gz 문서를 참고하세요.
사전 조건
- Ubuntu 10.04 LTS Server에 root 또는 sudo 권한이 있는 계정
- OpenERP(Server) 및 OpenERP-Web(웹 클라이언트)이 설치되어 있고 기본 포트에서 동작 중(예: XMLRPC 8069, 웹클라이언트 8080)
- Apache2를 설치하고 모듈을 활성화할 수 있는 권한
- openssl 명령 사용 가능
중요: 운영 환경에서는 자체 서명 대신 신뢰 가능한 CA에서 발급된 인증서를 사용하는 것을 권장합니다.
단계 요약
- Apache 및 필요한 모듈 설치
- 인증서와 키 생성(자체 서명)
- Apache에 가상호스트(SSL) 구성 파일 생성
- OpenERP 서버 및 웹클라이언트 설정 변경하여 내부 바인딩으로 제한
- 서비스 재시작 후 동작 확인
Step 11.1. Apache 및 필요 모듈 설치
서버에 다음 명령으로 apache2를 설치합니다:
sudo apt-get install apache2
그다음 SSL과 프록시 관련 모듈(mod_ssl은 Ubuntu에서 ssl로 제공), mod_proxy, mod_proxy_http, mod_headers, (선택) mod_rewrite 등을 활성화합니다:
sudo a2enmod ssl proxy_http headers rewrite
이제 SSL 인증서와 키를 생성하겠습니다.
Step 11.2. 인증서 및 키 생성
임시 디렉터리에서 파일을 생성한 뒤 최종 위치로 이동하는 방식을 사용합니다(처음 cd는 홈 디렉터리로 이동하기 위함입니다).
cd
mkdir temp
cd temp
새 개인키를 생성합니다. 이 과정에서 passphrase(암호문구)를 입력하라는 프롬프트가 뜹니다:
openssl genrsa -des3 -out server.pkey 1024
서버가 부팅할 때마다 passphrase를 입력하고 싶지 않다면 키에서 passphrase를 제거합니다:
openssl rsa -in server.pkey -out server.key
다음으로 CSR(Signing Request)을 만듭니다. 이 요청서에는 최종 인증서에 들어갈 정보가 포함됩니다:
openssl req -new -key server.key -out server.csr
여러 항목을 묻는 프롬프트가 표시됩니다. 일부는 비워둘 수 있고, 기본값을 사용하거나 ‘.’를 입력해 필드를 비워둘 수 있습니다. 예시:
- Country Name (2 letter code) [AU]:
- State or Province Name (full name) [Some-State]:
- Locality Name (eg, city) []:
- Organization Name (eg, company) [Internet Widgits Pty Ltd]:
- Organizational Unit Name (eg, section) []:
- Common Name (eg, YOUR name) []: <– 중요: 이 값은 인증서의 CN으로, 공개 도메인 또는 서버 IP를 입력
- Email Address []:
- A challenge password []:
- An optional company name []:
마지막으로 자체 서명 인증서를 생성합니다(유효기간 예: 365일):
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
작업 디렉터리에서 실제로 필요한 파일은 server.key(개인키)와 server.crt(인증서)입니다. 소유권과 권한을 안전하게 설정합니다:
sudo chown openerp:root server.crt server.key
sudo chmod 640 server.crt server.key
적절한 위치에 디렉터리를 만들고 파일을 옮깁니다:
sudo mkdir /etc/ssl/openerp
sudo chown openerp:root /etc/ssl/openerp
sudo chmod 710 /etc/ssl/openerp
sudo mv server.crt server.key /etc/ssl/openerp/
이제 Apache에 인증서·키 경로를 알려줄 준비가 되었습니다.
중요: 개인키(server.key)는 최소 권한(읽기 권한을 갖는 사용자 제한 등)으로 관리하세요. 키 노출은 즉시 보안 사고로 이어집니다.
Step 11.3. Apache 사이트 구성 파일 생성
새 VirtualHost 구성 파일을 생성합니다:
sudo nano /etc/apache2/sites-available/openerp-ssl
다음과 같은 내용을 넣습니다:
SSLEngine on
SSLCertificateFile /etc/ssl/openerp/server.crt
SSLCertificateKeyFile /etc/ssl/openerp/server.key
ProxyRequests Off
Order deny,allow
Allow from all
ProxyVia On
ProxyPass /webdav/ http://127.0.0.1:8069/webdav/
ProxyPassReverse /webdav/
Order Deny,Allow
Allow from all
Satisfy Any
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse /
RequestHeader set "X-Forwarded-Proto" "https"
# Fix IE problem (httpapache proxy dav error 408/409)
SetEnv proxy-nokeepalive 1
설명:
- /webdav/ 요청은 OpenERP의 XMLRPC(WebDAV) 포트(예: 8069)로 전달합니다.
- /(루트) 요청은 웹 클라이언트(예: 8080)로 전달합니다.
- 순서가 중요합니다. /가 /webdav/보다 먼저 나오면 WebDAV 요청이 제대로 매칭되지 않을 수 있습니다.
사이트를 활성화합니다:
sudo a2ensite openerp-ssl
선택적으로 비암호화(HTTP) 요청을 HTTPS로 리디렉션하려면 /etc/apache2/sites-available/default 파일(또는 적절한 non-ssl 사이트 파일)에 mod_rewrite 규칙을 추가합니다:
RewriteEngine on
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
Step 11.4. OpenERP 서버 및 웹 클라이언트 설정 변경
외부에서 비암호화 서비스가 접근되지 않도록 OpenERP 서버와 웹 클라이언트를 로컬(Localhost)로 바인딩합니다. 그리고 XMLRPC-SSL이 사용할 키와 인증서 경로를 지정합니다.
서버 설정 파일 편집:
sudo nano /etc/openerp-server.conf
다음 설정을 적용합니다:
xmlrpc = True
xmlrpc_interface = 127.0.0.1
xmlrpc_port = 8069
netrpc = True
netrpc_interface = 127.0.0.1
netrpc_port = 8070
xmlrpcs = True
xmlrpcs_interface =
xmlrpcs_port = 8071
secure_pkey_file = /etc/ssl/openerp/server.key
secure_cert_file = /etc/ssl/openerp/server.crt
WebDAV/CalDAV 접근을 사용하려면 파일 하단에 다음을 추가합니다:
[webdav]
enable = True
vdir = webdav
웹 클라이언트 설정 파일 편집:
sudo nano /etc/openerp-web.conf
다음과 같이 수정해 웹 클라이언트도 로컬에서만 수신하도록 합니다(문법과 따옴표는 ASCII 표준 따옴표로 사용):
# Some server parameters that you may want to tweak
server.socket_host = "127.0.0.1"
# Set to True if you are deploying your App behind a proxy
# e.g. Apache using mod_proxy
tools.proxy.on = True
# If your proxy does not add the X-Forwarded-Host header, set
# the following to the public host url.
tools.proxy.base = 'https://your-ip-or-domain'
# Set to false to disable CSRF checks
tools.csrf.on = False
주의: tools.proxy.base에는 외부에서 접근할 공개 도메인 또는 공용 IP를 넣으세요.
Step 11.5. 동작 확인
변경 사항을 적용하려면 서비스를 재시작합니다:
sudo service openerp-server restart
sudo service openerp-web restart
sudo service apache2 restart
검증 포인트:
- 웹 클라이언트는 포트 8080으로 직접 접근하면 안 됩니다(예: http://your-ip:8080 은 차단되어야 함).
- GTK 클라이언트는 NetRPC(8070) 또는 XMLRPC(8069) 비암호화 포트로 연결되어서는 안 됩니다.
- 웹 브라우저에서 https://your-ip-or-domain 로 접속하면 OpenERP 웹 인터페이스가 표시되어야 합니다.
- GTK 클라이언트(데스크톱)에서는 포트 8071을 사용하고 프로토콜로 XMLRPC(Secure)를 선택해야 합니다.
CalDAV 캘린더 URL 예시:
https://your-ip-or-domain/webdav/DB_NAME/calendars/users/USERNAME/c/CALENDAR_NAME
문제 해결 팁
- 브라우저에서 자체 서명 인증서 경고가 뜨면 인증서가 신뢰된 CA에 의해 발급되지 않았기 때문입니다(예상 동작).
- 403/404/502 에러: Apache 로그(/var/log/apache2/error.log)와 OpenERP 로그를 확인하세요.
- ProxyPass 설정에서 경로 순서가 중요합니다. /가 먼저 나오면 /webdav/ 규칙이 무시됩니다.
추가 자료: 역할 기반 체크리스트
시스템 관리자 체크리스트:
- Apache와 필요한 모듈 설치 및 활성화
- 인증서와 개인키 생성 및 보안 권한 설정
- /etc/ssl/openerp 디렉터리 권한 확인
- Apache 가상호스트 SSL 구성 적용 및 사이트 활성화
- 방화벽(port) 규칙: 443 허용, 8080/8069 등 내부 포트는 로컬 바인딩으로 외부 차단
- 서비스 재시작 및 로그 확인
응용 개발자/운영팀 체크리스트:
- tools.proxy.base와 X-Forwarded-* 헤더 의존성 점검
- CSRF 설정과 리버스 프록시 관련 보안 정책 검토
- WebDAV 기능이 필요한지 여부 확인 및 vdir 설정
사용자 안내(간단 문구):
- 외부 접속 URL: https://your-ip-or-domain
- GTK 클라이언트: 서버 포트 8071, XMLRPC(secure) 선택
보안 하드닝 권장 사항
- 자체 서명 인증서는 테스트/내부 환경에 적합하며, 운영 환경에서는 공인 CA 또는 Let’s Encrypt 같은 ACME 기반 인증서를 사용하세요.
- TLS 프로토콜과 사이퍼 설정을 강화하세요(불필요한 오래된 프로토콜 비활성화). Apache의 SSLProtocol/SSLCipherSuite 지침을 따릅니다.
- 개인키 접근 권한을 최소화하고, 키가 유출되면 즉시 인증서 재발급/교체하세요.
- 정기적으로 패치 적용 및 로그 모니터링을 수행하세요.
1줄 용어집
- SSL/TLS: 네트워크 통신의 암호화 계층
- Apache: 널리 사용되는 HTTP 서버 소프트웨어
- WebDAV/CalDAV: 웹 기반 파일/캘린더 접근을 위한 프로토콜
- XMLRPC: 원격 프로시저 호출을 위한 XML 기반 프로토콜
수용 기준
- HTTPS(443)를 통해 OpenERP 웹 UI에 정상 접근 가능
- 비암호화 포트(8080, 8069, 8070)는 외부에서 접근 불가
- GTK 클라이언트가 XMLRPC-SSL(포트 8071)로 접속 가능
- WebDAV(사용 시)가 https를 통해 정상 동작
테스트 케이스(간단)
- TC1: https://your-ip-or-domain 접속 → 웹 로그인 페이지 표시
- TC2: http://your-ip-or-domain:8080 접속 → 접속 차단 또는 연결 실패
- TC3: GTK 클라이언트로 포트 8071(XMLRPC-SSL) 접속 → 정상 로그인 가능
- TC4: WebDAV 캘린더 URL 접속 → 캘린더 항목 조회 가능(설정한 경우)
결정 흐름(간단)
다음 Mermaid 다이어그램은 WebDAV를 활성화할지 결정하는 흐름입니다:
flowchart TD
A[WebDAV/CalDAV 필요?] -->|예| B[OpenERP webdav 섹션 활성화]
A -->|아니오| C[WebDAV 설정 제거]
B --> D[Apache에서 /webdav/ 프록시 설정 추가]
C --> D
D --> E[전체 테스트 및 검증]
마이그레이션/버전 참고
- 이 가이드는 Ubuntu 10.04과 해당 시절 OpenERP 구조(서버/웹 분리)를 기반으로 합니다. 최신 배포판과 OpenERP(또는 Odoo) 버전에서는 패키지명, 설정 경로, 기본 포트, 모듈 이름 등이 달라질 수 있습니다.
- 최신 Ubuntu/데비안에서는 systemd 사용, Apache 구성 위치 및 모듈 동작이 달라질 수 있으니 배포판 문서를 참고하세요.
요약
- Apache를 리버스 프록시로 사용해 SSL 종료를 구성하면 OpenERP의 여러 인터페이스를 HTTPS로 안전하게 노출할 수 있습니다.
- 자체 서명 인증서는 내부/테스트용으로 적합하지만 운영 환경에서는 공인된 CA 인증서를 권장합니다.
- OpenERP 및 웹 클라이언트를 로컬 바인딩하여 비암호화 포트를 외부에서 차단해야 합니다.
중요: 이 문서는 구현 예시를 제공하며, 실제 운영 환경에서는 추가적인 보안 검토(예: TLS 설정, HSTS, 인증서 관리 등)가 필요합니다.
저는 이 방법이 도움이 되었으면 합니다. 개선 의견이나 질문이 있으면 알려 주세요.