프로젝트 소개

Boulder는 ACME 기반 인증 기관(CA)의 구현체이며, Let's Encrypt를 운영하는 소프트웨어입니다. ACME 프로토콜을 통해 CA는 인증서 신청자가 실제로 식별자를 제어하는지 자동으로 검증할 수 있고, 가입자는 자신이 제어하는 식별자에 대한 인증서를 발급·폐기할 수 있습니다. 아키텍처 Boulder는 보안 컨텍스트에 따라 분리된 구성 요소로 나뉩니다: - Web Front Ends (API 버전별로 하나씩) - Registration Authority - Validation Authority - Certificate Authority - Storage Authority - Publisher - CRL Updater Web Front End, Validation Authority, CRL Storer, Publisher는 인터넷 접근이 필요하므로 침해 위험이 더 큽니다. Registration Authority는 인터넷 연결 없이 동작할 수 있지만 Web Front End와 Validation Authority와 통신합니다. Certificate Authority는 Registration Authority로부터만 지시를 받습니다. 모든 구성 요소는 영속성을 위해 Storage Authority를 사용하며, 이는 MariaDB로 뒷받침됩니다. 구성 요소는 gRPC로 통신하며, 원격 구성 요소는 클라이언트/서버 쌍으로 인스턴스화되는데, 클라이언트는 해당 구성 요소의 Go 인터페이스를 구현하고 서버는 실제 로직을 보유합니다. 내부적으로 시스템은 ACME 리소스에 직접 대응하는 다섯 가지 객체 유형을 중심으로 구성됩니다: accounts, authorizations, challenges, orders, certificates. ACME 클라이언트의 요청은 새 객체를 생성하고 기존 객체를 수정하며, Storage Authority는 현재 객체 집합의 영속적 복사본을 유지합니다. 개발 환경 설정 Boulder는 Dockerfile을 제공하며 Docker Compose를 사용해 모든 의존성을 설치·구성합니다. 이는 유지관리자들이 개발과 실험을 위해 권장하는 실행 방식이며, 프로덕션 환경으로는 명백히 적합하지 않습니다. 프로젝트는 ACME 클라이언트 개발자들의 지속적 통합과 빠른 실험을 위해 Boulder의 축소판인 Pebble을 제안합니다. 일반적인 워크플로: - 저장소를 클론하고 Docker Engine 1.13.0+ 및 Docker Compose 1.10.0+가 설치되어 있는지 확인합니다. Docker 호스트에는 최소 2GB의 RAM이 권장됩니다. - 표준 린트, 단위 및 통합 테스트 모음은 ./t.sh로 실행합니다. 단위 테스트는 ./t.sh -u, 통합 테스트는 ./t.sh -i, 미래 상태를 나타내는 "config-next" 구성은 ./tn.sh로 실행합니다. - docker compose run bsetup을 한 번 실행해 test/certs에 인증서를 작성한 다음, docker compose up으로 Boulder를 시작합니다. - docker-compose.yml은 체크아웃을 /boulder에 마운트하므로 호스트에서의 편집이 컨테이너에 즉시 반영됩니다. 기본적으로 Boulder는 모든 호스트 이름을 127.0.0.1로 해석하는 가짜 DNS 리졸버를 사용하며, 이는 컨테이너 내부의 통합 테스트에 적합합니다. 호스트 기반 클라이언트가 Boulder와 통신하도록 하려면 호스트의 Docker IP를 찾아 FAKE_DNS 환경 변수를 그에 맞게 설정합니다. 그러면 스텁 리졸버(sd-test-srv)가 모든 A 쿼리에 해당 주소로 응답합니다. 호스트 기반 방화벽은 Docker 인스턴스가 필요한 검증 포트에서 호스트로 연결하는 것을 허용해야 합니다. ACME 클라이언트와 함께 작업하기 개발 환경이 실행 중이면 ACME 엔드포인트가 호스트에 http://localhost:4001/directory (ACME v2, HTTP) 및 https://localhost:4431/directory (ACME v2, HTTPS)로 노출됩니다. HTTPS 엔드포인트를 사용하려면 test/certs/ipki/minica.pem CA 인증서를 포함한 트러스트스토어로 클라이언트를 구성해야 합니다. 가짜 리졸버가 모든 쿼리에 127.0.0.1을 반환하므로, 어떤 도메인이든 localhost로 해석되는 것처럼 인증서를 발급할 수 있습니다. FAKE_DNS를 변경하면 반환 주소가 바뀌며, 흔히 ACME 클라이언트를 실행하는 호스트 머신으로 설정됩니다. README에는 사용자 정의 SERVER 환경 변수와 --standalone 옵션을 사용해 로컬 Boulder에 대해 Certbot을 실행하는 방법이 나와 있습니다. 프로덕션 관련 참고 사항 프로젝트는 Boulder가 Let's Encrypt를 위해 맞춤 제작되었으며 Web PKI와 CA/Browser Forum 기준 요구사항을 지원하기 위한 용도로만 의도되었다고 밝힙니다. 또한 프로덕션용으로 Boulder를 평가하는 조직에 종종 적합하지 않으며, ACME 도메인 인가가 없는 중앙 관리형 PKI가 보통 더 나은 선택이라고 언급합니다. 필요한 작업과 보안 고려사항을 설명하는 배포 및 구현 가이드가 제공됩니다. Docker 기반 개발 환경은 프로덕션에 명백히 적합하지 않습니다. 공개적으로 사용 가능한 개인 키 자료를 사용하고, 디버그 포트를 노출하며, 구성 요소 장애에 취약하기 때문입니다. 지원과 개발은 Let's Encrypt의 사명을 우선시하므로, 일선 목표에서 크게 벗어난 요청에 대한 신속한 지원이나 풀 리퀘스트는 받아들여지지 않을 수 있습니다. 기여 및 라이선스 기여 지침, 코드 리뷰 프로세스, 행동 강령 및 기타 팁은 CONTRIBUTING.md에 있습니다. 커뮤니티 행동 강령은 Let's Encrypt 커뮤니티 포럼에서 참조됩니다. 프로젝트는 Mozilla Public License 2.0에 따라 라이선스가 부여됩니다.