소개
acme.sh는 순수한 유닉스 셸 스크립트로 작성된 ACME 프로토콜 클라이언트입니다. Let's Encrypt, ZeroSSL 등 다양한 인증서 발급 기관(CA)을 지원하여 SSL/TLS 인증서를 자동으로 발급하고 갱신하는 데 사용됩니다. Python 같은 외부 의존성 없이 Bash, dash, sh 환경에서 동작하며, 서버 관리자에게 간편한 인증서 자동화 솔루션을 제공합니다.
상세정보
ACME 프로토콜 완전 지원
ACME 프로토콜을 완전히 구현하여 인증서 발급, 갱신, 설치 과정을 자동화합니다. ECDSA 인증서, SAN(Side-Alternative Name) 인증서, 와일드카드 인증서를 지원합니다.
다양한 검증 모드 지원
- Webroot 모드: 기존 웹 루트 디렉토리를 사용합니다.
- Standalone 모드: 포트 80에서 내장 웹서버를 실행합니다.
- Standalone TLS-ALPN 모드: 포트 443에서 내장 웹서버를 실행합니다.
- Apache/Nginx 모드: 웹 서버를 직접 사용하여 도메인 검증을 수행합니다.
- DNS 모드: DNS TXT 레코드를 사용하여 도메인 검증을 수행합니다.
- DNS Alias 모드: DNS 별칭을 사용한 검증을 지원합니다.
- Stateless 모드: 상태 없는 검증을 지원합니다.
자동 DNS API 통합
대부분의 DNS 제공업체 API를 지원하여 수동 작업 없이 인증서를 자동으로 발급할 수 있습니다.
다양한 인증서 발급 기관(CA) 지원
- ZeroSSL.com CA (기본값)
- Letsencrypt.org CA
- SSL.com CA
- Google.com Public CA
- Actalis.com CA
- 모든 RFC8555 호환 CA
자동 갱신 및 업그레이드
설치 시 cron 작업이 자동으로 설정되어 인증서를 30일마다 자동 갱신합니다. ACME Renewal Information (ARI) RFC 9773를 지원하여 인증서 갱신 타이밍을 CA가 제안하는 대로 자동 조정합니다. 자체 업그레이드 기능을 통해 최신 코드로 업데이트할 수 있습니다.
온라인 설치
다음 명령어를 실행하여 온라인으로 설치할 수 있습니다:
curl https://get.acme.sh | sh -s [email protected]
또는:
wget -O – https://get.acme.sh | sh -s [email protected]
Git에서 설치
프로젝트를 클론하고 설치를 실행합니다:
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh –install -m [email protected]
설치 시 루트 권한이 필요하지 않지만, 루트 권한으로 설치하는 것이 권장됩니다.
설치 프로세스
설치 프로그램은 세 가지 작업을 수행합니다:
- acme.sh를 사용자의 홈 디렉토리(~/.acme.sh/)에 복사합니다. 모든 인증서도 이 폴더에 저장됩니다.
- acme.sh=~/.acme.sh/acme.sh 별칭을 생성합니다.
- 인증서가 필요할 때 자동으로 갱신하는 일일 cron 작업을 생성합니다.
설치 후 현재 터미널을 닫고 다시 열어야 별칭이 적용됩니다.
인증서 발급 예시
단일 도메인 인증서를 발급하려면 다음 명령어를 사용합니다:
acme.sh –issue -d example.com -w /home/wwwroot/example.com
여러 도메인을 포함한 인증서를 발급하려면:
acme.sh –issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com
웹 루트 폴더에 쓰기 접근 권한이 있어야 합니다.
인증서 설치 (Apache/Nginx)
인증서를 생성한 후 Apache/Nginx 서버에 설치합니다:
acme.sh –install-cert -d example.com –cert-file /path/to/certfile/in/apache/cert.pem –key-file /path/to/keyfile/in/apache/key.pem –fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem –reloadcmd “service apache2 force-reload”
Nginx의 경우:
acme.sh –install-cert -d example.com –key-file /path/to/keyfile/in/nginx/key.pem –fullchain-file /path/to/fullchain/nginx/cert.pem –reloadcmd “service nginx force-reload”
reloadcmd 매개변수가 중요합니다. 올바른 reloadcmd가 없으면 갱신된 인증서가 서버에 반영되지 않을 수 있습니다.
인증서 갱신
모든 인증서는 30일마다 자동으로 갱신되거나, CA의 ARI(Auto-Renewal Information)가 지정하는 시간에 더 일찍 갱신됩니다. 수동으로 갱신하려면:
acme.sh –renew -d example.com –force
ECC 인증서의 경우:
acme.sh –renew -d example.com –force –ecc
인증서 유형 선택
–keylength 매개변수로 다양한 키 유형을 선택할 수 있습니다:
- ec-256: ECDSA P-256 (기본값)
- ec-384: ECDSA P-384
- 2048: RSA 2048비트
- 4096: RSA 4096비트
예시: acme.sh –issue -w /home/wwwroot/example.com -d example.com –keylength ec-384
업그레이드
최신 버전으로 업그레이드하려면:
acme.sh –upgrade
자동 업그레이드를 활성화하려면:
acme.sh –upgrade –auto-upgrade
acme.sh는 무료인가요?
네, acme.sh는 GPL-3.0 라이선스로 배포되는 오픈소스 소프트웨어입니다. Let’s Encrypt와 같은 무료 인증서 발급 기관과 함께 사용하면 SSL/TLS 인증서를 무료로 발급하고 관리할 수 있습니다.
Windows에서 사용할 수 있나요?
네, Windows에서 사용할 수 있지만 Cygwin 환경이 필요합니다. Cygwin에 curl, openssl, crontab이 포함되어야 합니다.
Python이 필요한가요?
아니요, acme.sh는 Python이나 기타 외부 의존성 없이 순수 셸 스크립트로 작성되어 Bash, dash, sh 환경에서 동작합니다.
인증서는 자동으로 갱신되나요?
네, 설치 시 cron 작업이 자동으로 설정되어 인증서를 30일마다 자동 갱신합니다. 또한 ACME Renewal Information (ARI) RFC 9773를 지원하여 CA가 제안하는 시간에 자동으로 갱신합니다.
시스템 요구사항
Python 의존성 없음. Windows 사용 시 Cygwin 환경이 필요하며, curl, openssl, crontab이 포함되어야 합니다.


