Lua-resty-auto-ssl: ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ

์— ๋งŒ๋“  2017๋…„ 10์›” 10์ผ  ยท  16์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: auto-ssl/lua-resty-auto-ssl

์•ˆ๋…•,
1์›”์— ์™€์ผ๋“œ์นด๋“œ ๋ฐœ๊ธ‰์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆด์ง€ ๊ถ๊ธˆํ•˜์‹ญ๋‹ˆ๊นŒ? ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์ด ํฐ ๋ณ€ํ™”๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

enhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ฝ”๋“œ์—์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ์ด๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ sub.domain.tld ์— ๋Œ€ํ•ด ์Šคํ† ๋ฆฌ์ง€ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋‹ค์Œ ๊ฒ€์‚ฌ๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • sub.domain.tld:latest โ€” ํ˜„์žฌ
  • *.domain.tld:latest
  • *.sub.domain.tld:latest

์ด๋Ÿฐ ์‹์œผ๋กœ ์ง€๊ธˆ์€ ์ด์ „์— ์ƒ์„ฑ๋œ ์ธ์ฆ์„œ๋งŒ ์ง€์›ํ•˜๋Š” ์™€์ผ๋“œ์นด๋“œ๋ฅผ ํ–ฅํ•œ ์ฒซ ๊ฑธ์Œ์„ ๋‚ด๋””๋Ž ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•œ ํ›„, ์šฐ๋ฆฌ๊ฐ€ ์›ํ•  ๊ฒฝ์šฐ ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ ์ƒ์„ฑ์„ ์ง€์›ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์œ„์˜ ๊ตฌํ˜„์„ ๊ธ์–ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  16 ๋Œ“๊ธ€

๋‚˜๋Š” repo ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๊ณ  ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. LE ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ์—๋Š” DNS ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋ฉฐ ํ˜„์žฌ lua-resty-auto-ssl์€ http ๊ฒ€์ฆ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

DNS ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ์™€์ผ๋“œ ์นด๋“œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋”๋ผ๋„ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ:

  • ๋จผ์ € ACMEv2 ์ง€์›์„ ๋ฐ›์œผ๋ ค๋ฉด ํƒˆ์ˆ˜ ์ƒํƒœ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. dehydrated#420
  • dehydrated ๋Š” ์ด๋ฏธ (ACMEv1) dns-01 ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค . ํ˜„์žฌ ACMEv2 ์ดˆ์•ˆ์˜ dns-01 ์ฑŒ๋ฆฐ์ง€๋Š” ๋‚˜์™€ ๋™์ผํ•˜๊ฑฐ๋‚˜ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • ํƒˆ์ˆ˜๋œ deploy_challenge ํ›„ํฌ๋Š” TXT ๋ ˆ์ฝ”๋“œ์— ๊ธฐ๋กํ•  ๋„๋ฉ”์ธ๊ณผ ํ† ํฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์€ ์ผ๋ฐ˜์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    1. ์ธ๊ธฐ ์žˆ๋Š” DNS API๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ PowerDNS, CloudFlare ๋˜๋Š” nsupdate์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ "ํ‘œ์ค€" API๋ฅผ ์ง€์›ํ•˜๋Š” ์ธํ”„๋ผ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์„ค์ •์—๋Š” ์ผ์ข…์˜ ์ธ์ฆ ํ† ํฐ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    2. ์‚ฌ์šฉ์ž๋Š” ๋…์  API์™€ ๋Œ€ํ™”ํ•˜๊ฑฐ๋‚˜ ๋”ํ‹ฐ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ด๋Ÿฌํ•œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ํ›„ํฌ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      -- Define a function to store the validation tokens for DNS verification -- by let's encrypt in your DNS setup. auto_ssl:set("deploy_dns_challenge", function(domain, token) -- talk to your DNS-API to create a new TXT record _acme-challenge.$domain with value $token end)

  • ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ธต ์€ ํ˜„์žฌ ์ „์ฒด ๋„๋ฉ”์ธ์„ ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋” ์ด์ƒ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด ์ฒซ ๋ฒˆ์งธ ์•„์ด๋””์–ด๋Š” ์™€์ผ๋“œ์นด๋“œ๋ฅผ parentdomain.com:wildcard:latest ๋กœ ์ €์žฅํ•˜๊ณ  ๊ตฌ์ฒด์ ์ธ ์ธ์ฆ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์Šคํ† ๋ฆฌ์ง€ ๊ณ„์ธต์—์„œ ํ•ด๋‹น ํ‚ค๋ฅผ ํ™•์ธํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์งˆ๋ฌธ:

  1. ์ผ๋ฐ˜ ๋˜๋Š” ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜ is_wildcard_domain ? ๊ธฐ์กด allow_domain ์— ๋Œ€ํ•œ ์ƒˆ ๋ฐ˜ํ™˜ ๊ฐ’ ?
  2. DNS(์™€์ผ๋“œ์นด๋“œ์˜ ๊ฒฝ์šฐ) ๋ฐ HTTP(์ผ๋ฐ˜ ์ธ์ฆ์„œ์˜ ๊ฒฝ์šฐ) ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๋™์‹œ์— ์ง€์›ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋‘˜ ๋‹ค์— ๋Œ€ํ•ด DNS๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? ๋ชจ๋“  ์›€์ง์ด๋Š” ๋ถ€๋ถ„์„ ์ œ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTTP๊ฐ€ ํ›จ์”ฌ ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ด์ œ ACMEv2 ์Šคํ…Œ์ด์ง• ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :)

ํ˜„์žฌ ACMEv2 ๋“œ๋ž˜ํ”„ํŠธ์˜ dns-01 ์ฑŒ๋ฆฐ์ง€๋Š” ๋‚˜์™€ ๋™์ผํ•˜๊ฑฐ๋‚˜ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค :-) V1 API์™€ V2 API ๊ฐ„์˜ DNS-01 ์ฑŒ๋ฆฐ์ง€์—์„œ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์€ ์—†์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ตœ์†Œํ•œ dehydrated์˜ ๊ฐœ๋ฐœ ๋ฒ„์ „์€ ์ด์ œ ACMEv2์™€ ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ์ง€๊ธˆ์ด ๊ธฐํšŒ์ž…๋‹ˆ๋‹ค ;)

DNS ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” resty-auto-ssl์€ ์™„์ „ํžˆ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ resty-auto-ssl์„ "๋Œ€์—ญ ์™ธ"๋กœ ๊ตฌ์„ฑ๋œ ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ๋กœ ํด๋ฐฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด bind9 ๋ฐ certbot์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์€ resty-auto-ssl์—๊ฒŒ ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๊ธ€์Ž„, ๊ทธ๊ฒƒ์€ ๋ฒ”์œ„ ๋ฐ– ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • DNS API์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™ ์Šคํฌ๋ฆฝํŠธ๋กœ ํƒˆ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค...

resty-auto-ssl์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑ๋œ ์™€์ผ๋“œ์นด๋“œ LE ์ธ์ฆ์„œ๋ฅผ Redis์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ฝ”๋“œ์—์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ์ด๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ sub.domain.tld ์— ๋Œ€ํ•ด ์Šคํ† ๋ฆฌ์ง€ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋‹ค์Œ ๊ฒ€์‚ฌ๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • sub.domain.tld:latest โ€” ํ˜„์žฌ
  • *.domain.tld:latest
  • *.sub.domain.tld:latest

์ด๋Ÿฐ ์‹์œผ๋กœ ์ง€๊ธˆ์€ ์ด์ „์— ์ƒ์„ฑ๋œ ์ธ์ฆ์„œ๋งŒ ์ง€์›ํ•˜๋Š” ์™€์ผ๋“œ์นด๋“œ๋ฅผ ํ–ฅํ•œ ์ฒซ ๊ฑธ์Œ์„ ๋‚ด๋””๋Ž ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•œ ํ›„, ์šฐ๋ฆฌ๊ฐ€ ์›ํ•  ๊ฒฝ์šฐ ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ ์ƒ์„ฑ์„ ์ง€์›ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์œ„์˜ ๊ตฌํ˜„์„ ๊ธ์–ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@akalipetis ์„ค์ • ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ?

ssl_options.fullchain_der
ssl_options.privkey_der

allow_domain์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?
๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด allow_domain์—์„œ redis ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์ด ๋ฌธ์ œ์— ๋ถ€๋”ชํžŒ ๊ธฐ๋ก์„ ์œ„ํ•ด lua-resty-auto-ssl ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋„๋ฉ”์ธ ์ƒํƒœ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ xxxx.status.updown.io ์™€ ๊ฐ™์€ ์ž์ฒด ๋„๋ฉ”์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์™€์ผ๋“œ ์นด๋“œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

*status.updown.io ์— ๋Œ€ํ•œ ์ธ์ฆ์„œ ์ƒ์„ฑ์„ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์œ„ํ•ด allow_domain ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

auto_ssl:set("allow_domain", function(domain)
  return not ngx.re.match(domain, "status.updown.io$", "ijo")
end)

๊ทธ๋Ÿฐ ๋‹ค์Œ ์™€์ผ๋“œ์นด๋“œ๋ฅผ ๊ธฐ๋ณธ ๋Œ€์ฒด ์ธ์ฆ์„œ๋กœ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

ssl_certificate /etc/letsencrypt/live/status.updown.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.updown.io/privkey.pem;

๋‹ค์Œ๊ณผ ๊ฐ™์€ DNS ์ฑŒ๋ฆฐ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

sudo certbot certonly --manual -d *.status.updown.io --agree-tos --no-bootstrap --manual-public-ip-logging-ok

DNS ์ฑŒ๋ฆฐ์ง€๋กœ ๋ณต์žกํ•ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ํ™”ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ฎ์€ ๊ธฐ์ˆ ์ด์ง€๋งŒ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. :)

์ด๋Š” ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋ฉฐ ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ์šฉ๋˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ https://github.com/AnalogJ/lexicon ์„ ์‚ฌ์šฉํ•˜๋ฉด DNS ์ฑŒ๋ฆฐ์ง€๊ฐ€ ๋งค์šฐ ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค!
๊ทธ๊ฒƒ์€ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ๋งŽ์€ ๊ณต๊ธ‰์ž๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ณ  ๊ทธ ๊ณผ์ •์€ ์—„์ฒญ๋‚˜๊ฒŒ ์‰ฝ์Šต๋‹ˆ๋‹ค.

@kapouer lexicon ์— ๋Œ€ํ•œ ํŒ์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ํ™”ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์—ผ๋‘์— ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค ;)

๋ฐฉ๊ธˆ ์ด ๋ฌธ์ œ์— ๋ถ€๋”ชํžŒ ๊ธฐ๋ก์„ ์œ„ํ•ด lua-resty-auto-ssl ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋„๋ฉ”์ธ ์ƒํƒœ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ xxxx.status.updown.io ์™€ ๊ฐ™์€ ์ž์ฒด ๋„๋ฉ”์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ›จ์”ฌ ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์™€์ผ๋“œ ์นด๋“œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

*status.updown.io ์— ๋Œ€ํ•œ ์ธ์ฆ์„œ ์ƒ์„ฑ์„ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์œ„ํ•ด allow_domain ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

auto_ssl:set("allow_domain", function(domain)
  return not ngx.re.match(domain, "status.updown.io$", "ijo")
end)

๊ทธ๋Ÿฐ ๋‹ค์Œ ์™€์ผ๋“œ์นด๋“œ๋ฅผ ๊ธฐ๋ณธ ๋Œ€์ฒด ์ธ์ฆ์„œ๋กœ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

ssl_certificate /etc/letsencrypt/live/status.updown.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.updown.io/privkey.pem;

๋‹ค์Œ๊ณผ ๊ฐ™์€ DNS ์ฑŒ๋ฆฐ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

sudo certbot certonly --manual -d *.status.updown.io --agree-tos --no-bootstrap --manual-public-ip-logging-ok

DNS ์ฑŒ๋ฆฐ์ง€๋กœ ๋ณต์žกํ•ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ํ™”ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ฎ์€ ๊ธฐ์ˆ ์ด์ง€๋งŒ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. :)

๋‚˜๋Š” ๋˜ํ•œ ์šฐ๋ฆฌ ์•ฑ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์œ ํ˜•์˜ ๋„๋ฉ”์ธ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ํฌํ„ธ ํ˜ธ์ŠคํŠธ์— "์ž์ฒด" ๋„๋ฉ”์ธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ์ •์  CA์—์„œ ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์—ฌ์ „ํžˆ LE๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๋‹น์‹ ์˜ ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹œํ—˜ํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.

์—…๋ฐ์ดํŠธ
์ข‹์•„, ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์„ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œํ”Œ๋ ˆ์–ด ํ”Œ๋Ÿฌ๊ทธ์ธ. ๋ฌธ์„œ๋Š” ๊ฝค ์ข‹์Šต๋‹ˆ๋‹ค. 1~2์‹œ๊ฐ„ ์•ˆ์— ์ž‘์—…์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

https://certbot-dns-cloudflare.readthedocs.io/en/stable/

@jarthod ์ด๊ฒƒ์„ ์ž๋™ํ™”ํ•˜๋Š” ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? 3๊ฐœ์›”๋งˆ๋‹ค ์™€์ผ๋“œ์นด๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

@jarthod ์ด๊ฒƒ์„ ์ž๋™ํ™”ํ•˜๋Š” ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? 3๊ฐœ์›”๋งˆ๋‹ค ์™€์ผ๋“œ์นด๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋‚ด ํŽธ์ด ์•„๋‹ˆ๋ผ ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  3 ๊ฐœ์›”๋งˆ๋‹ค ์ˆ˜๋™ ๊ฐฑ์‹ ์„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์„œ๋น„์Šค(updown.io)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋์ ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๋ ค๊ณ  ํ•  ๋•Œ ์•Œ๋ ค์ฃผ๋ฏ€๋กœ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๋‹น์‹ ์˜ ์„œ๋น„์Šค์˜ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‚˜๋Š” ๊ณ„์†ํ•ด์„œ ์ „ํ†ต์ ์ธ 1๋…„ ์™€์ผ๋“œ ์นด๋“œ SSL์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋‹น์‹ ์˜ ์„œ๋น„์Šค๋Š” ๋‚ด๋…„์„ ์ƒ๊ธฐ์‹œ์ผœ์ค„ ์ผ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค ๐Ÿ˜„

2020๋…„ 10์›” 3์ผ ์˜คํ›„ 10์‹œ 30๋ถ„์— Adrien Rey-Jarthon [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

</s></s> ์ˆ˜์žˆ๋Š”
@jarthod ์ด๊ฒƒ์„ ์ž๋™ํ™”ํ•˜๋Š” ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? 3๊ฐœ์›”๋งˆ๋‹ค ์™€์ผ๋“œ์นด๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋‚ด ํŽธ์ด ์•„๋‹ˆ๋ผ ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  3 ๊ฐœ์›”๋งˆ๋‹ค ์ˆ˜๋™ ๊ฐฑ์‹ ์„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์„œ๋น„์Šค(updown.io)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋์ ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ธ์ฆ์„œ๊ฐ€ ๋งŒ๋ฃŒ๋˜๋ ค๊ณ  ํ•  ๋•Œ ์•Œ๋ ค์ฃผ๋ฏ€๋กœ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ๋ณด๊ฑฐ๋‚˜ ๊ตฌ๋…์„ ์ทจ์†Œํ•˜์„ธ์š”.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰