본문 바로가기

TechLog

django 개발 서버에서 https 연결 사용하기

원문 링크 : http://www.ianlewis.org/en/testing-https-djangos-development-server


원래 django 개발 서버에서는 HTTPS를 지원하지 않기 때문에 실제 운영되는 서버에서처럼 HTTPS django 응용 프로그램을 테스트하려면 어려움이 따른다. 두 개의 개발 서버 인스턴스를 사용하면(하나는 http, 또 하나는 https를 지원하도록) 이러한 어려움을 피할 수 있다. django 개발 서버가 HTTPS를 지원하도록 하기 위해, stunnel이라는 도구를 사용하여 SSL 터널을 생성할 수 있다.

먼저 openssl과 stunnel을 설치하자. (http://www.stunnel.org/ 사이트 참고)

그런 다음에는 openssl 도구를 사용해 stunnel에 사용할 pem 파일을 생성한다.
openssl req -new -days 365 -nodes -out newreq.pem -keyout /etc/stunnel/stunnel.pem

stunnel에 사용할 설정 파일(dev_https라는 이름으로 저장했다고 가정하자)을 만든다. "accept" 항목에는 클라이언트 입장에서 연결되는 HTTPS 포트를 적는다. "connect" 항목에는 HTTPS를 사용할 실제 개발 서버의 포트를 적는다. (첨언하자면, 아래 설정에서 실제 개발 서버는 8003 포트로 구동하는 것이다)

pid =

[https]
accept=8002
connect=8003

stunnel 데몬을 실행한다.

stunnel dev_http

그리고 HTTPS에 사용할 django 개발 서버 인스턴스를 시작한다. HTTPS=on 환경 변수를 주면 request.is_secure() 함수가 True를 올바로 리턴할 것이다.

HTTPS=on python manage.py runserver 8003

그런 다음 HTTP에 사용할 django 개발 서버를 시작한다.

python manage.py runserver 8001

이제 http://localhost:8001https://localhost:8002 주소를 사용해서 django 어플리케이션을 테스트할 수 있다.



 * p.s:
케냘의 경우(맥 환경이다)에는 실제 pem 파일 만으로는 서비스가 불가능했다.
테스트 인증서를 따로 만들고, 설정 파일(dev_https 파일)에 cert/key 항목을 추가하여
해당 항목에 .crt/.key 파일의 경로를 각각 지정해 주면 된다.

* 테스트 인증 생성 방법은 다음 URL 참고(openssl 유틸리티를 사용하므로, linux 환경에서 작업해야 한다) :
http://www.akadia.com/services/ssh_test_certificate.html