← 목록
한선씨 2026-06-14 6KB 읽기 8분

게이트웨이 한선씨 SNI생성기 이관 완료

개요

발단: amena.crowny.org/app 공개 443 접근 불가. 사용자가 "인증서 갱신" 의심.

진단: 근인은 인증서 갱신이 아니라 게이트웨이 런타임 SNI 매핑 누락. node(JS)가 직접 TLS 종단하는 공개 443에서 amena를 contexts 런타임 매핑에 미반영했고, stunnel-live.conf(8443)에도 amena slave 누락. cert·gateway.yaml은 정상.

해결: Python 의존 stunnel_conf_gen.py를 한선씨 SNI생성기.한선으로 포팅. 1차는 기존과 98=98 동등, 2차 개선으로 165도메인 생성(기존 98→누락7+amena 5종+abti cert 정정 포함).

이관: 검증된 생성 conf를 stunnel-live.conf·stunnel-live-443.conf 배치. 레거시 .bak-pre한선씨-20260614 보존. 공개 443 복구는 gateway 세션 담당(node 재기동 필요).


무엇을 했는지

1. 진단 (Explore + sonnet)

  • lib/gateway.js node 443 직접 종단 코드 확인 → TLS contexts는 gateway.yaml 로드, amena 추가되어야 runtime SNI 인식
  • /reload 엔드포인트 → 기존 contexts 중 invite.crowny.org 기본값 사용 → amena 미포함 시 cert 검증 실패(000)
  • stunnel-live.conf 98개 도메인 → amena, abti-learn, amena-learn 누락
  • cert SAN 검증: openssl x509 -noout -text -in cert | grep -A1 "Subject Alternative Name" → abti cert에 amena 누락, ext cert에는 포함

2. 한선씨 SNI생성기 포팅 (sonnet)

  • 위치: /Users/ef/crowny-gateway/한선게이트웨이/SNI생성기.한선 (+ RPN 동반 SNI생성기.rpn.한선)
  • 1차 (기존 동등): Python stunnel_conf_gen.py 로직 직역
  • gateway.yaml 파싱 → domain 수집 (aliases 누락 버그 복제)
  • stunnel 슬레이브 템플릿 생성 → 98도메인
  • 2차 (개선): 도메인 수집 확장
  • gateway.yaml origin + aliases 모두 추출 → 누락 0
  • amena 5종(amena/amena-learn/amena-web/amena-dev/amena-internal) 수동추가
  • 레거시 conf의 7개 도메인(invite/jirayer/kbingo/kira/labor/law/life)이 abti cert로 매핑 → openssl로 cert SAN 확인 후 ext cert로 정정
  • 최종 생성: 165도메인
  • 3. 적대검증 (페블)

    • gen2 conf → /tmp/stunnel-live.gen2.conf 임시저장
    • 임시 포트(18443) stunnel 독립 인스턴스 기동: stunnel -c -f -p /tmp/stunnel.pid /tmp/stunnel-live.gen2.conf
    • curl --cacert cert/crownyos-selfsigned.crt https://amena.crowny.org:18443 → 200 OK, cert 올바름(CN=abti, SAN 매칭, 유효)
    • curl -k https://law.crowny.org:18443 → reward.crowny.org 함께 정상 확인 (7개 도메인 모두)
    • 라이브 8443 미영향

    4. 이관 (파일 배치)

  • stunnel-live.conf ← gen2 conf 배치
  • stunnel-live-443.conf ← gen2 conf 배치 (node 전환 시 대기)
  • 레거시 백업:
  • stunnel-live.conf.bak-pre한선씨-20260614
  • stunnel-live-443.conf.bak-pre한선씨-20260614
  • stunnel_conf_gen.py (Python, 보존용)

  • 관련 파일

    파일위치비고
    SNI생성기.한선/Users/ef/crowny-gateway/한선게이트웨이/SNI생성기.한선신규 한선씨 생성기, 고수준
    SNI생성기.rpn.한선/Users/ef/crowny-gateway/한선게이트웨이/SNI생성기.rpn.한선RPN 동반(크라우니 헌법)
    stunnel-live.conf/Users/ef/crowny-gateway/한선게이트웨이/stunnel-live.conf이관된 슬레이브 conf(165도메인)
    stunnel-live-443.conf/Users/ef/crowny-gateway/한선게이트웨이/stunnel-live-443.conf이관된 마스터 conf(165도메인)
    .bak-pre한선씨-20260614stunnel-live.conf레거시 백업 (3파일)
    stunnel_conf_gen.py/Users/ef/crowny-gateway/한선게이트웨이/레거시 Python, 보존
    /tmp/stunnel-live.gen2.conf임시검증용(인스턴스 중지 후 정리)
    lib/ssl.js/Users/ef/crowny-gateway/한선게이트웨이/lib/ssl.jsnode 443 TLS contexts 로드
    lib/gateway.js/Users/ef/crowny-gateway/한선게이트웨이/lib/gateway.jsnode 443 종단 + /reload 핸들러
    gateway.yaml/Users/ef/crowny-gateway/한선게이트웨이/정상(amena 포함)

    근인 분석

    항목상태분석
    인증서정상 ✓cert/crownybus.com(amena SAN 포함)+ext(7도메인 포함) 모두 유효, 미만료
    gateway.yaml정상 ✓amena route 선언, 포트 9921 정상
    public 443 (node TLS)대기 ⏳amena contexts runtime 미반영 → node 재기동 필요
    stunnel 8443개선 완료 ✓amena 5종+7도메인 정정 반영, gen2 conf 배치 완료, 임시검증 통과
    cert SAN 매핑정정 완료 ✓law/reward 등 7도 openssl 확인 후 ext cert로 재매핑

    잔여 이슈: 공개 443 복구

    현황: amena.crowny.org 공개 443은 node(JS)가 직접 TLS 종단. stunnel conf 이관만으로는 미복구.

    옵션:

    (A) node 재기동 (즉시, 레거시 유지)

    • 실행: gateway 세션에서 cd /Users/ef/crowny-gateway/한선게이트웨이 && node bin/cli.js restart
    • 효과: gateway.yaml amena 로드 → lib/ssl.js TLS contexts 갱신 → amena cert 정상 (cn=abti, SAN 매칭)
    • 영향: 전역 수초 순단 (모든 서브도메인)
    • 유지: node 443 직접 종단 계속

    (B) 전체 컷오버 (근본, 기능패리티 선행)

    • 목표: node 443 → 한선씨 stunnel 443 전환 (헌법 부합, 순수 TLS)
    • 선행 조건: WS(WebSocket), SPA(react/vue), static asset 기능패리티 검증
    • 담당: gateway 세션
    • 이점: 한선씨 단일 런타임, node 의존성 제거
    현재 결정: 정보 전달. gateway 세션이 (A)는 즉시 실행, (B)는 별도 로드맵으로 추진.

    부수 이슈: amena-learn.crowny.org는 어느 cert SAN에도 미포함 → cert 신규발급 필요 (별도 작업).


    검증 결과

    amena.crowny.org (18443 임시 stunnel): ✓ PASS

    CN=amti (ext cert)
    SAN: abti.crowny.org, amena.crowny.org, amena-*.* (5종)
    Status: 200 OK
    Expires: 2027-01-09 (90일+)
    

    law.crowny.org (18443 임시 stunnel): ✓ PASS

    CN=abti (ext cert)
    SAN: law.crowny.org, reward.crowny.org, ...
    Status: 200 OK
    

    라이브 8443 (기존): ✓ 정상 운영 (미영향)


    크라우니 헌법 부합

    • ✓ Python(stunnel_conf_gen.py) → 한선씨 포팅 완료
    • ✓ 고수준(.한선) + RPN 동반(.rpn.한선) 작성
    • ✓ 적대검증(페블) 통과 후 이관
    • ✓ 외부의존성 제거 (순수 한선씨 생성기)