
웹 서비스 개발 – 웹 서비스 보안 – HTTPS 구성과 인증서 발급
안녕하세요, 웹 보안에 관심 있는 개발자 여러분! 😊
오늘은 안전한 웹 서비스의 출발점인 HTTPS 구성 방법과 SSL/TLS 인증서 발급 과정을
하나하나 친절하게 알려드릴게요.
요즘은 사용자가 웹사이트를 방문할 때 자물쇠 아이콘이 없는 것만으로도 불신을 갖게 되죠.
특히, 크롬 브라우저는 HTTP 사이트에 “주의 요함” 문구까지 표시하니까요! 😱
그렇다면 내 사이트에 HTTPS를 적용하려면 어떻게 해야 할까요?
오늘 바로 그것을 함께 해봅시다!
1. HTTPS란 무엇인가요?
- HTTPS는 **HTTP + TLS(또는 SSL)**의 조합입니다.
- 데이터를 보내고 받을 때 암호화, 무결성, 인증이 보장되는 프로토콜이죠.
📦 예를 들어,
http://example.com → 암호화 없음 → 해커에게 평문 노출 위험
https://example.com → 암호화 통신 → 안심하고 데이터 송수신 가능
2. HTTPS를 구성하기 위한 준비물 체크리스트 ✅
항목 | 설명 |
---|---|
도메인 | 인증서가 적용될 도메인 주소 |
웹 서버 | Apache, Nginx 등 |
공인 IP 또는 외부에서 접근 가능한 서버 | 인증서 발급 시 인증 필요 |
SSL/TLS 인증서 | CA에서 발급 받은 파일 (보통 PEM 형식) |
인증서 설치 권한 | 서버의 설정 파일을 수정할 수 있어야 함 |
3. 인증서 발급 방법 3가지 소개
1️⃣ 무료 인증서 – Let’s Encrypt
- 전 세계에서 가장 많이 쓰이는 무료 SSL 인증서
- 자동 갱신 가능, 신뢰성 높음
- CLI 툴
certbot
으로 간편하게 발급
2️⃣ 유료 인증서 – Comodo, DigiCert, GlobalSign 등
- 기업 신원 확인, 와일드카드 지원, 보증 범위 넓음
- 인증서 파일은 메일로 제공되며 직접 설치
3️⃣ 자체 서명 인증서 (Self-Signed)
- 테스트 환경이나 내부망에서만 사용
- 브라우저에서 “신뢰할 수 없음” 경고 표시됨
4. Let’s Encrypt로 인증서 발급하기 (무료)
🐧 Ubuntu 기준 (Apache 웹 서버)
sudo apt update
sudo apt install certbot python3-certbot-apache
인증서 발급 명령어
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
🔄 발급 후 자동으로 Apache 설정까지 마쳐줍니다!
🧩 Nginx 웹 서버일 경우
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
🔁 자동 갱신 설정 확인
sudo systemctl list-timers
# 또는
sudo certbot renew --dry-run
Let’s Encrypt 인증서는 90일 유효이므로 반드시 자동 갱신 필요!
5. 유료 인증서 설치 방법 (수동 설치)
발급받은 파일 예시
yourdomain.crt
: 인증서 파일yourdomain.key
: 개인 키 파일ca_bundle.crt
: 체인 인증서 (중간 인증기관 포함)
Nginx 설정 예시
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/ssl/certs/yourdomain.crt;
ssl_certificate_key /etc/ssl/private/yourdomain.key;
ssl_trusted_certificate /etc/ssl/certs/ca_bundle.crt;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /var/www/html;
index index.html;
}
}
Apache 설정 예시
<VirtualHost *:443>
ServerName yourdomain.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/yourdomain.crt
SSLCertificateKeyFile /etc/ssl/private/yourdomain.key
SSLCertificateChainFile /etc/ssl/certs/ca_bundle.crt
</VirtualHost>
6. HTTPS 강제 리디렉션 설정
모든 사용자가 HTTPS로 접속하게 하려면 아래 설정도 필요해요!
Nginx에서 HTTP → HTTPS 리디렉션
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
Apache .htaccess
설정
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
7. 인증서 적용 확인 방법
- 브라우저 주소창에서 🔒 자물쇠 아이콘 확인
- SSL Labs에서 테스트
- 터미널로 확인:
openssl s_client -connect yourdomain.com:443
8. 인증서 발급 시 주의할 점 📌
항목 | 주의사항 |
---|---|
도메인 오타 | 발급은 됐는데 적용이 안 되는 경우 대부분 오타 |
방화벽 설정 | 80/443 포트가 열려 있어야 인증 가능 |
인증기관 신뢰 여부 | 사설 인증서는 브라우저에서 경고 발생 |
인증서 만료 알림 설정 | Let’s Encrypt는 특히 주기적인 확인 필수 |
서브도메인 처리 | www 포함 여부, 와일드카드 인증서 사용 여부 고려 |
9. HTTPS 도입 후의 변화
항목 | HTTPS 적용 전 | HTTPS 적용 후 |
---|---|---|
주소창 표시 | http\:// | https\:// + 🔒 |
개인정보 보호 | 없음 | ✅ 암호화 전송 |
검색엔진 노출 | 일반 수준 | SEO 점수 향상 |
사용자 신뢰도 | 낮음 | ✅ 신뢰도 상승 |
로그인/결제 안정성 | 취약 | ✅ 보안 강화 |
마무리하며 😊
이제 여러분도 내 사이트에 HTTPS를 적용할 수 있는 실력을 갖추셨어요!
인증서 발급부터 설치, 자동 갱신, 리디렉션까지 제대로 설정해두면
사이트 신뢰도와 검색 엔진 점수까지 두 마리 토끼를 다 잡을 수 있답니다!
다음 시간에는 혼합 콘텐츠(Mixed Content) 에러 해결법이나
HSTS 정책을 적용해서 HTTPS를 강제하는 방법도 함께 다뤄볼게요.
궁금한 점은 언제든 댓글로 남겨주세요!
안전한 웹서비스 운영, 함께 만들어가요 💪
감사합니다 🙌