8 min read

acme.sh로 무료 와일드카드 SSL 인증서 발급 및 갱신

이 포스트에는 acme.sh 파일을 통해 인증서를 발급받는 방법에 대해 알아본다.

일반적으로 단일 ssl인증서는 돈을 주고 살만하지만 와일드카드 인증서는 상당히 비싸다.

현재 블로그를 포스팅하는 이 도메인도 동일한 방법을 사용하여 인증서를 발급 및 갱신을 한다.


사용 가능 조건

1.	.sh 파일이 실행 가능(맥, 리눅스, 유닉스 등)
2.	인터넷이 사용 가능 환경
3.	도메인 소유

3번 같은 경우는 무료 도메인을 발급받는 사이트가 몇군데 있으니 잘 이용하면된다.


1. acme.sh 파일 구하기

acme.sh github에 있는 파일을 다운받아 설치없이 그대로 사용가능하게 쓸것이다.

git clone으로 다운로드
# git 패키지가 설치되어 있어야 한다.
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh

curl로 다운로드
# curl 패키지가 설치되어 있어야 한다.
curl -O https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh\?raw\=true && mv acme.sh\?raw\=true acme.sh

2. 인증서 발급 요청

acme.sh파일을 통해서 --dns 옵션을 이용한 인증을 받을 것이다.

아래는 명령어다.

./acme.sh --issue --force --dns -d "<도메인 주소>" -d "*.<도메인 주소>" --yes-I-know-dns-manual-mode-enough-go-ahead-please --email <이메일 주소>

예제 명령어는 아래를 참고하면된다.

./acme.sh --issue --force --dns -d "eocis.app" -d "*.eocis.app" --yes-I-know-dns-manual-mode-enough-go-ahead-please --email rolestack@gmail.com

명령이 수행이되면 아래와같이 결과가 나올 것이다.

	1   [2022년 3월 16일 수요일 14시 10분 56초 KST] Using CA: https://acme.zerossl.com/v2/DV90
	2   [2022년 3월 16일 수요일 14시 10분 56초 KST] No EAB credentials found for ZeroSSL, let's get one
	3   [2022년 3월 16일 수요일 14시 10분 58초 KST] Registering account: https://acme.zerossl.com/v2/DV90
	4   [2022년 3월 16일 수요일 14시 11분 07초 KST] Registered
	5   [2022년 3월 16일 수요일 14시 11분 07초 KST] ACCOUNT_THUMBPRINT='5gXVLNWL2YhQ5sUYviKdfAGjH5s0dFWYRRqfp5uTob8'
	6   [2022년 3월 16일 수요일 14시 11분 07초 KST] Creating domain key
	7   [2022년 3월 16일 수요일 14시 11분 07초 KST] The domain key is here: /Users/echo/.acme.sh/eocis.app/eocis.app.key
	8   [2022년 3월 16일 수요일 14시 11분 07초 KST] Multi domain='DNS:eocis.app,DNS:*.eocis.app'
	9   [2022년 3월 16일 수요일 14시 11분 07초 KST] Getting domain auth token for each domain
	10  [2022년 3월 16일 수요일 14시 11분 21초 KST] Getting webroot for domain='eocis.app'
	11  [2022년 3월 16일 수요일 14시 11분 21초 KST] Getting webroot for domain='*.eocis.app'
	12  [2022년 3월 16일 수요일 14시 11분 21초 KST] Add the following TXT record:
	13  [2022년 3월 16일 수요일 14시 11분 21초 KST] Domain: '_acme-challenge.eocis.app'
	14  [2022년 3월 16일 수요일 14시 11분 21초 KST] TXT value: 'UVKUnkfGiirSzO58ytth-5ufZnCicPr1xOuT0m2AB9U'
	15  [2022년 3월 16일 수요일 14시 11분 21초 KST] Please be aware that you prepend _acme-challenge. before your domain
	16  [2022년 3월 16일 수요일 14시 11분 21초 KST] so the resulting subdomain will be: _acme-challenge.eocis.app
	17  [2022년 3월 16일 수요일 14시 11분 21초 KST] Add the following TXT record:
	18  [2022년 3월 16일 수요일 14시 11분 21초 KST] Domain: '_acme-challenge.eocis.app'
	19  [2022년 3월 16일 수요일 14시 11분 21초 KST] TXT value: 'iL5-ELNT2nsBviH--0H4jyY4zyVd1rU0NZwiljnXN8Y'
	20  [2022년 3월 16일 수요일 14시 11분 21초 KST] Please be aware that you prepend _acme-challenge. before your domain
	21  [2022년 3월 16일 수요일 14시 11분 21초 KST] so the resulting subdomain will be: _acme-challenge.eocis.app
	22  [2022년 3월 16일 수요일 14시 11분 21초 KST] Please add the TXT records to the domains, and re-run with --renew.
	23  [2022년 3월 16일 수요일 14시 11분 21초 KST] Please add '--debug' or '--log' to check more details.
	24  [2022년 3월 16일 수요일 14시 11분 21초 KST] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

14, 19번 줄을 확인하면된다.
저 값을 DNS TXT Record로 삽입할 것이다.

이제 DNS 레코드를 수정할 일이 남았다.


3. DNS Record 수정

이 과정은 실제 도메인 소유의 여부를 판단하기 때문에 소유한 도메인 레코드 값을 직접 바꿀 수 있어야한다.
이 예제에서는 Google Domain을 이용하여 레코드 값을 삽입한다.

위와 같이 도메인 설정 사이트가 달라도 무조건적으로 편집이 가능한 레코드 편집화면이다.

호스트 이름으로는 아까 2번에서 실행한 결과의 12번 줄의 값을 위와 같이 넣으면 되고
13번 19번은 값값 데이터 값으로 넣어주면 된다.
유형은 TXT이다.


4. 인증서 발급

데이터 입력을 완료하고 저장을 하고난뒤 아래 명령어를 입력하면된다.

# 아까 명령어세서 'issue' 부분이 'renew'로 바뀐것 뿐이다.
./acme.sh --renew --force --dns -d eocis.app -d "*.eocis.app"  --yes-I-know-dns-manual-mode-enough-go-ahead-please --email rolestack@gmail.com

위 명령어를 수행하면 아래와 같이 결과가 출력된다.

[2022년 3월 16일 수요일 15시 57분 27초 KST] Renew: 'eocis.app'
[2022년 3월 16일 수요일 15시 57분 32초 KST] Using CA: https://acme.zerossl.com/v2/DV90
[2022년 3월 16일 수요일 15시 57분 32초 KST] Multi domain='DNS:eocis.app,DNS:*.eocis.app'
[2022년 3월 16일 수요일 15시 57분 32초 KST] Getting domain auth token for each domain
[2022년 3월 16일 수요일 15시 57분 32초 KST] Verifying: eocis.app
[2022년 3월 16일 수요일 15시 57분 50초 KST] Processing, The CA is processing your order, please just wait. (1/30)
[2022년 3월 16일 수요일 15시 57분 58초 KST] Success
[2022년 3월 16일 수요일 15시 57분 58초 KST] Verifying: *.eocis.app
[2022년 3월 16일 수요일 15시 58분 03초 KST] Processing, The CA is processing your order, please just wait. (1/30)
[2022년 3월 16일 수요일 15시 58분 13초 KST] Success
[2022년 3월 16일 수요일 15시 58분 13초 KST] Verify finished, start to sign.
[2022년 3월 16일 수요일 15시 58분 13초 KST] Lets finalize the order.
[2022년 3월 16일 수요일 15시 58분 13초 KST] Le_OrderFinalize='https://acme.zerossl.com/v2/DV90/order/185ECXMGEDmXdNNS3sZNzA/finalize'
[2022년 3월 16일 수요일 15시 58분 21초 KST] Order status is processing, lets sleep and retry.
[2022년 3월 16일 수요일 15시 58분 21초 KST] Retry after: 15
[2022년 3월 16일 수요일 15시 58분 37초 KST] Polling order status: https://acme.zerossl.com/v2/DV90/order/185ECXMGEDmXdNNS3sZNzA
[2022년 3월 16일 수요일 15시 58분 44초 KST] Downloading cert.
[2022년 3월 16일 수요일 15시 58분 44초 KST] Le_LinkCert='https://acme.zerossl.com/v2/DV90/cert/vmgdRYtAT3gZyq1nKoxfEg'
[2022년 3월 16일 수요일 15시 58분 50초 KST] Cert success.
-----BEGIN CERTIFICATE-----
MIIGbTCCBFWgAwIBAgIRAMl/7a0zXo+fPRRak+kISHUwDQYJKoZIhvcNAQEMBQAw
SzELMAkGA1UEBhMCQVQxEDAOBgNVBAoTB1plcm9TU0wxKjAoBgNVBAMTIVplcm9T
U0wgUlNB------<데이터 보호로 지운 부분>-----jAzMTYwMDAwMDBaFw0yMjA2MTQyMzU5NTlaMBQxEjAQBgNVBAMTCWVvY2lzLmNvbTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAK4V4+SzSFCQTn9FrQ7NK0cqtZgGzH/bKevQvUXp
OFu69Nj99gaXLmhahjI6lrR33BEV3GRcm122B5jADehZV87WrDHYKKrQ9CuYGLHI
B1H3eRidBShAk6cO------<데이터 보호로 지운 부분>-----+KSs0nuAnPzGLC5wk54+m4zYo4E4ZSgT9jmo6xspiOzonez7i3YS7ZNyr58Xv3X+GnWd+SI7NaOQiFjk
rodQgcJeMS/wtZkTUvasbuHrfLjrhRxTTS+3HV4fDtzyfr7n6Y+oCScU0fGc1HQv
xbjc4cd2JRyzRWIKlbMZn3/E4GkDjrvv0xkWfakDzdyVIHUCAwEAAaOCAoEwggJ9
MB8GA1UdI------<데이터 보호로 지운 부분>-------dDgQWBBQB4TRrV/K/CtUKr9ZP4twusNIfjzAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAd
BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwSQYDVR0gBEIwQDA0BgsrBgEE
AbIxAQICTjAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAI
BgZngQwBAgEwgYgGCCsGAQUFBwEBBHwwejBLBggrBgEFBQcwAoY/aHR0cDovL3pl
cm9zc2------<데이터 보호로 지운 부분>------Eb21haW5TZWN1cmVTaXRlQ0EuY3J0MCsGCCsGAQUFBzABhh9odHRwOi8vemVyb3NzbC5vY3NwLnNlY3RpZ28u
Y29tMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHUARqVV63X6kSAwtaKJafTzfREs
QXS+/Um4havy/HD+bUcAAAF/kYU/JwAABAMARjBEAiBG/wkkiCZLrxBqVFENcl9z
zoo23rr10Ca8AoBcFyHjQAIgBV0nD/jMieTQeAXrnh28WTOofynWMx6ZM53GZxMm
jLQAdgBByMqx3yJGShDGoToJQodeTjG------<데이터 보호로 지운 부분>-----gAAAX+RhT8pAAAEAwBHMEUCIQCPQz874pKHrwB2EDD6IzhCQ8qi4kzuKpyoT3YcHtQfrQIgNaQiu+bp
1R6t4VkYKhMXojgJmF+r4K/BTxqIQBV5dYUwIQYDVR0RBBowGIIJZW9jaXMuY29t
ggsqLmVvY2lzLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAEM1pCuYaZcWYUuYI9PlC
cG9ekq2+------<데이터 보호로 지운 부분>-----fjqYqFjF2UIQ6liQJXa+WqZApBBA+uvtfEx1qLtU5OFxOBJjbvuzDxztpa10XejGP52impqQzuhU4eaf8ylepRcTO5sKvGNt
QSdFyDLr5tUAE/mpcA1Ad+o0AxydCjqwUQIbIqYxzSPcxpm67ljTcGl5CvEYMV16
C9UB+KIGtDkYYU6a/7LSRjzrq2bCPz6NfbzgH/yPv+zNLEogJedXrQE90wpfI18j
bVvHV+qNXnz2DXeJpaTqT1Dwd9s+PMEEwLGWwQJ3pxhaPl6DwlapDXNza8TTV1aV
fEVoveyx039Sma4SWcE0AGKVTUg5HNIyc1yybyYamIemWnrVUL2zcQfaosQKNPWL
nXjrLCJdN5n09rBCjSEuwnQt/rLqSDftS39eJNPo3KMPMhNKidtq5jrsf4rQtyc6
qK99e5tcEP2G1Q2MZzSbK5AfHqjwGI3Aund79kIHf8wVN60CQ9RyJwbu82dWQLal
lb1D/IDOOVyrz------<데이터 보호로 지운 부분>-----6K5B+gGkUb+xSlmomda0/dUQXZ0QPtmOZ4gZkXWkrjs70Nyv7nD2gTi4nOf2PpzanUVduAPYXRkhgie/cntlMlxj7/STb
SCiSK98WDkKDXC1MVHr2tq0=
-----END CERTIFICATE-----
[2022년 3월 16일 수요일 15시 58분 50초 KST] Your cert is in: /Users/echo/.acme.sh/eocis.app/eocis.app.cer
[2022년 3월 16일 수요일 15시 58분 50초 KST] Your cert key is in: /Users/echo/.acme.sh/eocis.app/eocis.app.key
[2022년 3월 16일 수요일 15시 58분 50초 KST] The intermediate CA cert is in: /Users/echo/.acme.sh/eocis.app/ca.cer
[2022년 3월 16일 수요일 15시 58분 50초 KST] And the full chain certs is there: /Users/echo/.acme.sh/eocis.app/fullchain.cer

맨 아래 출력된 4줄의 결과값은 인증서 파일이 존재하는 위치이다.
(기본값은 홈 디렉터리 아래 .acme.sh 디렉터리에 있다.)

이제 이 파일들을 적절히 사용하면된다.