OPEN HYPER STEP
← 목록으로 (stack-analysis)
STACK-ANALYSIS · 101 / 120
stack-analysis
CHAPTER 101 / 120
읽기 약 2
FUNCTION

HTTPS + TLS 1.3 완전 이해


핵심 개념

인증서·핸드셰이크·HSTS·Mixed Content — 안전한 통신 기반.

본문

TLS 1.3 핸드셰이크 (1-RTT)

📋 코드 (16줄)
[1] Client Hello
- 지원 cipher suites
- key share (ECDHE)
- TLS version

[2] Server Hello
- 선택된 cipher
- 서버 인증서
- key share

[3] Application Data
- 즉시 암호화된 통신


→ 1-RTT (TLS 1.2는 2-RTT)
→ 0-RTT 가능 (재연결 시)

인증서 (Let's Encrypt)

📋 코드 (13줄)
무료 + 자동:
- Vercel: 자동
- Cloudflare: Universal SSL
- Let's Encrypt + certbot (자체)


certbot:
sudo certbot --nginx -d example.com -d www.example.com
# → 90일 자동 갱신


와일드카드:
certbot certonly --manual --preferred-challenges dns -d "*.example.com"

HSTS (HTTPS 강제)

TYPESCRIPT📋 코드 (19줄)
// next.config.js
module.exports = {
  async headers() {
    return [{
      source: '/(.*)',
      headers: [
        {
          key: 'Strict-Transport-Security',
          value: 'max-age=63072000; includeSubDomains; preload',
        },
      ],
    }];
  },
};


// HSTS Preload
// https://hstspreload.org 등록
// → 브라우저 영구 HTTPS 강제 (제거 불가)

Mixed Content 검출

📋 코드 (14줄)
HTTPS 페이지에서 HTTP 리소스 로드:
- 이미지 → 브라우저 자동 차단 (또는 경고)
- script/css → 완전 차단


검증:
1. https://www.whynopadlock.com 검사
2. 브라우저 콘솔 — Mixed Content 경고
3. CSP report-uri로 자동 수집


// CSP로 자동 차단
Content-Security-Policy: upgrade-insecure-requests
// → http:// → https:// 자동 변환

TLS 1.3 강제

NGINX📋 코드 (10줄)
# nginx
server {
  ssl_protocols TLSv1.3 TLSv1.2;  # TLS 1.0/1.1 제거
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384';
  ssl_prefer_server_ciphers on;

  # OCSP Stapling
  ssl_stapling on;
  ssl_stapling_verify on;
}

인증서 모니터링

TYPESCRIPT📋 코드 (25줄)
// 만료 30일 전 알림
import tls from 'tls';

async function checkCertExpiry(host: string) {
  return new Promise<Date>((resolve, reject) => {
    const socket = tls.connect({
      host,
      port: 443,
      servername: host,
    }, () => {
      const cert = socket.getPeerCertificate();
      socket.end();
      resolve(new Date(cert.valid_to));
    });
    socket.on('error', reject);
  });
}


// 매일 체크
const expiry = await checkCertExpiry('example.com');
const daysLeft = (expiry.getTime() - Date.now()) / 86400000;
if (daysLeft < 30) {
  await alertOps(`Cert expiring in ${daysLeft} days`);
}

다음 챕터

CH.102 "인증 아키텍처: Session vs JWT vs OAuth2".


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 코드의 HTTPS TLS 부분을 분석해서
실전 분석 + 개선 우선순위를 알려줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

HTTPS TLS 관련 베스트 프랙티스 5가지를
비교 분석해서 패턴 추출를 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 프로젝트 전체에서 HTTPS TLS
최적화 가능 위치를 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 한국 시장의 HTTPS TLS
트렌드를 솔직히 알려줘.

⭐ 이것만 기억하세요
HTTPS + TLS 1.3 완전 이해 이 3가지만 확실히 잡으세요
1.TLS 1.3 + Let's Encrypt = 무료 + 자동 + 빠름
2.HSTS + Preload = 브라우저 강제 HTTPS
3.Mixed Content는 upgrade-insecure-requests로 자동 처리


공유하기
진행도 101 / 120