728x90
업무 중 apache에 SSL인증을 해야할 일이 생겨서 알아보았다.
API를 아파치를 통해서 호출하게 만들었는데 보안때문에 SSL을 해야했다.
API는 Django로 만들었다. 이 상황 기준으로 적은 것이니 참고만 하길 바란다.
일단 기본적으로 개발버전에서만 가능한 인증서이다. 만약 서비스를 위한 배포라면 인증서를 사서 적용하면 될 것이다.
인증서 생성
- OpenSSL 설치
sudo apt install openssl
- 인증서 생성
- 개인키 (private key) 생성
openssl genrsa -des3 -out server.key 2048
Enter pass phrase for server.key : (개인키 암호 입력)
- CSR(Certificate Sinning Request) 인증요청서 생성
openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key : (이전에 입력한 개인키 암호 입력)
이후 추가로 입력하는 부분은 알아서 입력
Common Name (e.g. server FQDN or YOUR name) []: 이 부분은 신경써야함
도메인을 Apache 설정할때 ServerName과 같은걸로 설정
- 개인키 password 제거
- 개인키의 패스워드가 있다면, 아파치 구동 시 마다 입력해야하기 때문에 편의상 제거
- 제거해도 SSL 기능은 정상적으로 작동
sudo cp server.key server.key.backup
sudo openssl rsa -in server.key.backup -out server.key
Enter pass phrase for server.key : (개인키 암호 입력)
- 자체서명 인증서 생성
- server.key + server.csr 을 이용하여 인증서 요청
- 기본포맷: PEM(base64 encoding)
- 기간은 7300일(20년)으로 설정
sudo openssl x509 -req -days 7300 -in server.csr -signkey server.key -out server.crt
- 인증서 확인
ls -l server*
openssl x509 -in server.crt -text
- 인증서 위치 이동
sudo mkdir /etc/apache2/ssl
sudo mv server.* /etc/apache2/ssl/
Apache2 설정 (Ubuntu 22.04 환경 기준)
- 필요 패키지 설치
sudo apt-get install apache2 -y
sudo apt-get install libapache2-mod-wsgi-py3 -y
- SSL 모듈 활성화
sudo a2enmod ssl
sudo a2enmod rewrite
- conf 파일 수정
- /etc/apache2/site-available/default-ssl.conf
# 아래의 내용 주석 해제 및 수정
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
- /etc/apache2/site-available/000-default.conf
vim 000-default.conf
# <VirtualHost *:80> 안에 추가
# 80으로 온 요청을 https (443포트)로 리다이렉트 해줌
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
#</VirtualHost> 밑에 새로운 VirtualHost 추가
<VirtualHost *:443>
ServerName [CSR 생성할 때 적은 Common Name]
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
<Directory [Django 프로젝트 경로]>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess [위에 적은 ServerName] python-path=[python 환경의 /lib/python3.10/site-packages]
WSGIProcessGroup [위에 적은 ServerName]
WSGIScriptAlias / [Django 프로젝트 폴더 안의 /wsgi.py 경로] process-group=[위에 적은 ServerName]
</VirtualHost>
- default-ssl.conf enable
sudo a2ensite default-ssl.conf
'개발 지식 > 리눅스' 카테고리의 다른 글
[Ubuntu] vsftpd 설정, 포트 여러개 사용방법 (0) | 2024.01.17 |
---|---|
[Ubuntu] 간단한 SSH 설정방법 (0) | 2024.01.17 |
[Ubuntu] 계정 추가,제거, 디렉토리 설정 등등 (0) | 2024.01.17 |
[Jetson] Serial 번호 확인 방법 (0) | 2024.01.16 |
[Ubuntu] VNC 화면공유 설정 (0) | 2024.01.14 |