Nginx SSL 인증

요한·2025년 9월 10일
0

SSL/TLS인증

https 접속을 하기 위한 인증

http 와 https 차이점

http(Hypertext Transfer Protocol)

네트워크 통신 모델의 애플리케이션 계층 프로토콜로, 웹에서 데이터를 주고받는 기본 규약이다.
클라이언트는 서버에 GET, POST, PATCH, DELETE 등 다양한 메서드로 요청을 보내며, 이때 요청과 응답은 평문(plain text) 으로 전달된다. 따라서 제3자가 네트워크를 엿보면 요청 URL, 헤더, 본문 내용까지 그대로 볼 수 있다.
요청의 결과는 200 OK, 404 Not Found, 301 Redirect 같은 상태 코드로 표현된다.

https(Hypertext Transfer Protocol secury)

HTTP 위에 TLS/SSL 계층을 덧붙여 보안을 강화한 프로토콜이다.
HTTP가 평문으로 데이터를 주고받는 반면, HTTPS는 암호화된 통신 채널을 통해 데이터를 주고받아 기밀성(Encryption), 무결성(Integrity), 인증(Authentication) 을 보장한다.
또한 최신 HTTPS는 보통 HTTP/2나 HTTP/3와 결합되어, 텍스트 대신 바이너리 형식으로 데이터를 교환하여 전송 효율성능까지 개선한다.
즉, HTTPS는 단순히 데이터를 주고받는 것뿐만 아니라, 통신 과정에서 SSL 인증서를 통해 서버의 신원을 확인하고, 중간자 공격이나 데이터 탈취를 막아 안전한 웹 환경을 제공한다.


왜 ? ? ? https 를 사용해야하나 ?

보안

  • HTTP 평문 전송이라 도청·위변조 위험 있음.

  • HTTPS 모든 데이터를 암호화해 신용카드·개인정보 같은 민감한 정보 보호에 안전.

신뢰

  • 검색엔진은 HTTPS 사이트를 더 신뢰해 검색 순위(SEO) 에서 유리함.

  • 브라우저도 HTTPS에 🔒 아이콘을 표시해서 사용자 신뢰도를 높여줌.

성능 & 분석

  • HTTPS는 HTTP/2, HTTP/3와 함께 더 빠르게 동작함.

  • 또한 트래픽 출처(추천 링크, 광고, 소셜 미디어 등)를 정확히 분석할 수 있어 마케팅/SEO에 중요.

SEO 최적화.. 중요하죠 검색엔진에 상단에 출력해야 하니깐요.
네이버 서치 어드바이저 등 공식 문서 확인했던게...

자 자 설명은 그만하고

Nginx SSL 인증

HTTP-01 챌린지.

  1. 클라이언트(certbot)가 토큰 파일 생성

  2. Nginx/Apache가 해당 파일을 서비스

  3. Let’s Encrypt 서버가 http://도메인/.well-known/acme-challenge/토큰 요청

  4. 파일이 정상 응답되면 도메인 소유권 인증 완료 → SSL 인증서 발급


ubuntu 18 버전 이상시 python3 로 대체 되었습니다. 이거 꼭 버전 확인해주세요

certbot

https://certbot.eff.org/

현재 certbot 에서 snap 이랑 pip 방식만 권장하고있어 apt 는 공식문서에 없었습니다. apt 방식이면 글 참고 해주세요!

install
$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx

인증서 생성
$ sudo certbot --nginx -d example.com -d www.example.com

두 도메인 관련 nginx 추가 되었는데 방식이 맘에안들어서 조금 수정하겠습니다.

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.com www.example.com;
    
    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name example.com www.example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;   # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;     # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf;                       # managed by Certbot
    
    location / {
        proxy_pass http://127.0.0.1:3000;  #proxy_server
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   						$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host  $host;
        proxy_set_header X-Forwarded-Port  443;

        proxy_redirect http:// https://;
        proxy_buffering off;
    }

}

참고 글 https://nginxstore.com/blog/nginx/lets-encrypt-%EC%9D%B8%EC%A6%9D%EC%84%9C%EB%A1%9C-nginx-ssl-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0/

글 읽어주셔서 감사합니다

profile
코드 깍는 개발자 kangyohan.dev.0421@gmail.com

0개의 댓글