1. SSL 인증서 설치 전 준비사항
SSL 인증서를 적용하려면 먼저 서버 환경을 확인하고, 필요한 도구를 준비해야 합니다.
🔹 지원되는 웹 서버 확인
- Apache
- Nginx
- IIS(Windows Server)
🔹 운영체제 확인
- Ubuntu, CentOS, Debian 등 리눅스 기반 서버
- Windows Server
🔹 도메인과 웹사이트 준비
SSL 인증서는 특정 도메인에 적용되므로, 도메인이 설정된 상태여야 합니다.
2. SSL 인증서 발급 방법 (Let's Encrypt 기준)
Let's Encrypt는 무료로 SSL 인증서를 제공하는 서비스이며, Certbot을 사용하여 간편하게 설치할 수 있습니다.
🔹 Certbot 설치 및 실행
Ubuntu & Debian (Apache 서버 기준)
sudo apt update
sudo apt install certbot python3-certbot-apache
sudo certbot --apache
Ubuntu & Debian (Nginx 서버 기준)
sudo apt update
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
CentOS (Apache 서버 기준)
sudo yum install epel-release
sudo yum install certbot python-certbot-apache
sudo certbot --apache
Certbot을 실행하면 몇 가지 질문이 나오고, 설정이 완료되면 SSL이 적용된 HTTPS로 웹사이트가 동작합니다.
3. SSL 인증서 수동 설치 방법
Let's Encrypt를 사용하지 않고, 유료 인증서를 직접 설치하는 경우 수동 설정이 필요합니다.
🔹 SSL 인증서 요청 (CSR 파일 생성)
openssl req -new -newkey rsa:2048 -nodes -keyout mydomain.key -out mydomain.csr
위 명령어를 실행하면 .key(개인 키)와 .csr(인증서 요청 파일)이 생성됩니다. .csr 파일을 SSL 인증 기관(CA)에 제출하면 .crt(인증서 파일)를 발급받을 수 있습니다.
🔹 Apache에 SSL 인증서 적용
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
SSLCertificateChainFile /etc/ssl/certs/ca_bundle.crt
</VirtualHost>
설정을 적용한 후 Apache를 재시작합니다.
sudo systemctl restart apache2
🔹 Nginx에 SSL 인증서 적용
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
}
설정을 적용한 후 Nginx를 재시작합니다.
sudo systemctl restart nginx
4. SSL 인증서 자동 갱신 설정
Let's Encrypt의 인증서는 90일마다 갱신해야 합니다. 자동 갱신을 설정하려면 아래 명령어를 사용하세요.
sudo certbot renew --dry-run
또는 크론 작업을 추가하여 자동 갱신을 설정할 수 있습니다.
sudo crontab -e
그리고 아래와 같이 추가합니다.
0 3 * * * /usr/bin/certbot renew --quiet
이제 매일 새벽 3시에 SSL 인증서 갱신이 자동으로 실행됩니다.
5. SSL 적용 후 필수 설정
✅ HTTPS 리디렉션 설정
HTTP 트래픽을 자동으로 HTTPS로 리디렉션하는 것이 중요합니다.
Apache 설정 파일 수정
ServerName example.com
Redirect permanent / https://example.com/
Nginx 설정 파일 수정
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
✅ HSTS(HTTP Strict Transport Security) 적용
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
이 설정을 적용하면 브라우저가 HTTP 대신 HTTPS로 강제 연결하도록 설정됩니다.
✅ Mixed Content 오류 해결
웹사이트에서 HTTP 리소스를 불러오면 보안 경고가 발생할 수 있습니다. 모든 CSS, JS, 이미지 링크를 HTTPS로 수정해야 합니다.
6. SSL 적용 후 발생할 수 있는 문제 및 해결 방법
🔹 문제 1: 브라우저에서 '안전하지 않음' 경고가 표시됨 ✔ 해결 방법: https://www.ssllabs.com/ssltest/에서 SSL 구성을 점검하고, 유효한 인증서인지 확인
🔹 문제 2: Mixed Content 오류 발생 ✔ 해결 방법: 웹사이트의 모든 리소스(이미지, CSS, JS 등)를 HTTPS로 변경
🔹 문제 3: SSL 인증서 갱신 실패 ✔ 해결 방법: Certbot 자동 갱신 설정 확인 (sudo certbot renew --dry-run 실행)
7. Q&A (자주 묻는 질문)
❓ Q1. 무료 SSL과 유료 SSL의 차이는?
➡ 무료 SSL은 도메인 검증(DV)만 가능하지만, 유료 SSL(OV, EV)은 기업 검증이 포함되어 보안 신뢰도가 높습니다.
❓ Q2. SSL을 적용하면 속도가 느려지나요?
➡ 최신 TLS 1.3을 사용하면 속도 저하 없이 보안을 유지할 수 있습니다.
❓ Q3. 인증서 적용 후에도 '안전하지 않음'이 뜨는 이유는?
➡ Mixed Content 오류가 원인일 가능성이 높으며, 모든 HTTP 링크를 HTTPS로 변경해야 합니다.
'네트워크 & 웹 보안' 카테고리의 다른 글
아무것도 믿지마라! 제로트러스트 보안/기업을 위한 실전 가이드 (1) | 2025.02.27 |
---|---|
SSL 인증서 + CDN 적용 시 주의할점! (Akamai, Cloudflare 등) (7) | 2025.02.25 |
로그 분석을 활용한 보안 이벤트 대응 웹사이트 SQL공격 탐지 (0) | 2025.02.24 |
클라우드 보안의 모든것 : AWS, Azure, Linode(Akamai) 비교 (0) | 2025.02.23 |
SSL이란 무엇인가? 초보자를 위한 쉬운 설명 (0) | 2025.02.21 |