SSL ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ธ์ฆ์๋ฅผ ์์ฑํ๊ณ ์ค์นํ๋ ๊ณผ์ ์ ๊ธฐ์ตํด ๋ด ์๋ค(๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ).
- ๊ณต๊ธ์(SSL์ ๊ตฌ๋งคํ ์ ์๋ ์ฌ์ดํธ)๋ฅผ ์ฐพ์ผ์ธ์.
- CSR์ ์์ฑํฉ๋๋ค.
- ์ ๊ณต์ ์ฒด์ ๋ณด๋ด์ธ์.
- ๋๋ฉ์ธ ์์ ๊ถ์ ํ์ธํ์ธ์.
- ์ธ์ฆ์๋ฅผ ๋ฐ์ผ์ธ์.
- ์ธ์ฆ์๋ฅผ ํ์ ํ์์ผ๋ก ๋ณํํฉ๋๋ค(์ ํ ์ฌํญ). ์๋ฅผ ๋ค์ด pem์์ PKCS #12๊น์ง์ ๋๋ค.
- ์น ์๋ฒ์ ์ธ์ฆ์๋ฅผ ์ค์นํฉ๋๋ค.
๋น๊ต์ ๋น ๋ฅด๊ณ ๋ณต์กํ์ง ์์ผ๋ฉฐ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค. ์ด ์ต์ ์ ์ต๋ XNUMX๊ฐ์ ํ๋ก์ ํธ๊ฐ ์๋ ๊ฒฝ์ฐ ๋งค์ฐ ์ ํฉํฉ๋๋ค. ๊ทธ ์๊ฐ ๋ ๋ง๊ณ ํ๊ฒฝ์ด ์ธ ๊ฐ ์ด์ ์์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ํด๋์ ๊ฐ๋ฐ - ์ค๋น - ์ ์. ์ด ๊ฒฝ์ฐ ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ ๊ฒ์ ๋ํด ์๊ฐํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ ๋ ๋ฌธ์ ๋ฅผ ์ข ๋ ๊น์ด ํ๊ณ ๋ค์ด ์ธ์ฆ์ ์์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ์ ์์๋๋ ์๊ฐ์ ๋์ฑ ์ต์ํํ ์ ์๋ ์๋ฃจ์ ์ ์ฐพ์ ๊ฒ์ ์ ์ํฉ๋๋ค. ์ด ๊ธฐ์ฌ์๋ ๋ฌธ์ ๋ถ์๊ณผ ๋ฐ๋ณต์ ๋ํ ๊ฐ๋จํ ๊ฐ์ด๋๊ฐ ํฌํจ๋ฉ๋๋ค.
๋ฏธ๋ฆฌ ์์ฝํ๊ฒ ์ต๋๋ค. ์ ํฌ ํ์ฌ์ ์ฃผ์ ์ ๋ฌธ ๋ถ์ผ๋ .net์ด๊ณ ๊ทธ์ ๋ฐ๋ผ IIS ๋ฐ ๊ธฐํ Windows ๊ด๋ จ ์ ํ๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ACME ํด๋ผ์ด์ธํธ์ ๊ทธ์ ๋ํ ๋ชจ๋ ์์ ๋ Windows ์ฌ์ฉ ๊ด์ ์์ ์ค๋ช ๋ฉ๋๋ค.
๋๊ตฌ์๊ฒ ๊ด๋ จ์ด ์์ผ๋ฉฐ ์ผ๋ถ ์ด๊ธฐ ๋ฐ์ดํฐ๋
์ ์๊ฐ ๋ํํ๋ K์ฌ. URL(์): company.tld
ํ๋ก์ ํธ X๋ ์ฐ๋ฆฌ ํ๋ก์ ํธ ์ค ํ๋์ด๋ฉฐ, ์์ ํ๋ ๋์ ์ธ์ฆ์ ์์ ์ ์๊ฐ์ ์ต๋ํ ์ ์ฝํด์ผ ํ๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ด ํ๋ก์ ํธ์๋ ๊ฐ๋ฐ, ํ ์คํธ, ์คํ ์ด์ง, ํ๋ก๋์ ์ด๋ผ๋ ๋ค ๊ฐ์ง ํ๊ฒฝ์ด ์์ต๋๋ค. ๊ฐ๋ฐ๊ณผ ํ ์คํธ๋ ์ฐ๋ฆฌ ์ธก์์, ์คํ ์ด์ง๊ณผ ํ๋ก๋์ ์ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ด๋นํฉ๋๋ค.
ํ๋ก์ ํธ์ ํน๋ณํ ํน์ง์ ํ์ ๋๋ฉ์ธ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ชจ๋์ด ๋ง๋ค๋ ๊ฒ์ ๋๋ค.
์ฆ, ๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ฆผ์ด ์์ต๋๋ค.
๋ฐ๋ธ
Test
์ค๋น
์์ฐ
projectX.dev.company.tld
projectX.test.company.tld
์คํ
์ด์ง.projectX.tld
projectX.tld
module1.projectX.dev.company.tld
module1.projectX.test.company.tld
module1.staging.projectX.tld
module1.projectX.tld
module2.projectX.dev.company.tld
module2.projectX.test.company.tld
module2.staging.projectX.tld
module2.projectX.tld
...
...
...
...
moduleN.projectX.dev.company.tld
moduleN.projectX.test.company.tld
moduleN.staging.projectX.tld
moduleN.projectX.tld
ํ๋ก๋์ ์๋ ๊ตฌ๋งคํ ์์ผ๋์นด๋ ์ธ์ฆ์๊ฐ ์ฌ์ฉ๋๋ฉฐ ์ฌ๊ธฐ์๋ ์ง๋ฌธ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ํ์ง๋ง ์ด๋ ํ์ ๋๋ฉ์ธ์ ์ฒซ ๋ฒ์งธ ์์ค์๋ง ์ ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ *.projectX.tld์ ๋ํ ์ธ์ฆ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ Staging.projectX.tld์ ๋ํด์๋ ์๋ํ์ง๋ง module1.staging.projectX.tld์ ๋ํด์๋ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ์ง ๋ฐ๋ก ์ฌ๊ณ ์ถ์ง ์๋ค์.
๊ทธ๋ฆฌ๊ณ ์ด๋ ํ ํ์ฌ์ ํ ํ๋ก์ ํธ์ ์์๋ง ๊ทผ๊ฑฐํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก ํ๋ ์ด์์ ํ๋ก์ ํธ๊ฐ ์์ต๋๋ค.
๋ชจ๋ ์ฌ๋์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ผ๋ฐ์ ์ธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ต๊ทผ์
Google์ SSL ์ธ์ฆ์์ ์ต๋ ์ ํจ ๊ธฐ๊ฐ์ ์ค์ด๋ ๊ฒ์ ์ ์ํ์ต๋๋ค. . ๋ชจ๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค. - ํ๋ก์ ํธ์ ํ์ฌ ์ ์ฒด์ ๋ด๋ถ ์๊ตฌ์ ๋ง๊ฒ SSL์ ๋ฐ๊ธํ๊ณ ์ ์งํ๋ ํ๋ก์ธ์ค๋ฅผ ์ด์งํฉ๋๋ค.
- DNS ๋ฐ ํ์ ์๋ ๊ฐฑ์ ์ ์ฌ์ฉํ ๋๋ฉ์ธ ํ์ธ ๋ฌธ์ ๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ํด๊ฒฐํ๊ณ ํด๋ผ์ด์ธํธ ์ ๋ขฐ ๋ฌธ์ ๋ ํด๊ฒฐํ๋ ์ธ์ฆ์ ๋ ์ฝ๋์ ์ค์ ์ง์ค์ ์ ์ฅ์ ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํํธ๋/์ํ์ ํ์ฌ์ ์๋ฒ์ ์๋ CNAME์ ํ์ฌ ๋ฆฌ์์ค๋ณด๋ค ๋ ์ ๋ขฐํ ์ ์์ต๋๋ค.
- ์, ๋ง์ง๋ง์ผ๋ก, ์ด ๊ฒฝ์ฐ์๋ "๊ฐ์ง์ง ์๋ ๊ฒ๋ณด๋ค ์๋ ๊ฒ์ด ๋ซ๋ค"๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ์๋ฒฝํ๊ฒ ๋ค์ด๋ง์ต๋๋ค.
SSL ๊ณต๊ธ์ ์ ํ ๋ฐ ์ค๋น ๋จ๊ณ
๋ฌด๋ฃ SSL ์ธ์ฆ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์
์ค์์ cloudflare ๋ฐ letsencrypt๊ฐ ๊ณ ๋ ค๋์์ต๋๋ค. ์ด(๋ฐ ์ผ๋ถ ๋ค๋ฅธ ํ๋ก์ ํธ)์ DNS๋ cloudflare์์ ํธ์คํ
๋์ง๋ง ์ ๋ ํด๋น ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ letsencrypt๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์์ผ๋์นด๋ SSL ์ธ์ฆ์๋ฅผ ์์ฑํ๋ ค๋ฉด ๋๋ฉ์ธ ์์ ๊ถ์ ํ์ธํด์ผ ํฉ๋๋ค. ์ด ์ ์ฐจ์๋ ์ผ๋ถ DNS ๋ ์ฝ๋(TXT ๋๋ CNAME)๋ฅผ ์์ฑํ ๋ค์ ์ธ์ฆ์ ๋ฐ๊ธ ์ ์ด๋ฅผ ํ์ธํ๋ ๊ณผ์ ์ด ํฌํจ๋ฉ๋๋ค. Linux์๋ ์ ํธ๋ฆฌํฐ๊ฐ ์์ต๋๋ค.
๋๋ฉ์ธ์ ๋ํ ๋ ์ฝ๋๊ฐ ์์ฑ๋์์ผ๋ฏ๋ก ์ธ์ฆ์ ์์ฑ์ ์งํํด ๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ง์ง๋ง ๊ฒฐ๋ก , ์ฆ ์์ผ๋์นด๋ ์ธ์ฆ์ ๋ฐ๊ธ์ ์ํด ๋๋ฉ์ธ ์์ ๊ถ์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ต์ ์ ๊ด์ฌ์ด ์์ต๋๋ค.
- ์๋์ผ๋ก DNS ๋ ์ฝ๋ ์์ฑ(์๋ ์ ๋ฐ์ดํธ๋ ์ง์๋์ง ์์)
- acme-dns ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ DNS ๋ ์ฝ๋ ์์ฑ(์์ธํ ๋ด์ฉ์
์ฌ๊ธฐ์ . - ์์ฒด ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ DNS ๋ ์ฝ๋ ์์ฑ(certbot์ฉ cloudflare ํ๋ฌ๊ทธ์ธ๊ณผ ์ ์ฌ)
์ธ๋ป ๋ณด๋ฉด ์ธ ๋ฒ์งธ ์ฌํญ์ด ๋งค์ฐ ์ ํฉํ์ง๋ง DNS ๊ณต๊ธ์๊ฐ ์ด ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ํ์ง๋ง ์ฐ๋ฆฌ์๊ฒ๋ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ ๋ชจ๋๊ฐ CNAME ๋ ์ฝ๋๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ง์ 2์์ ๋ฉ์ถ๊ณ ACME-DNS ์๋ฒ ๊ตฌ์ฑ์ผ๋ก ์ด๋ํฉ๋๋ค.
ACME-DNS ์๋ฒ ์ค์ ๋ฐ ์ธ์ฆ์ ๋ฐ๊ธ ํ๋ก์ธ์ค
์๋ฅผ ๋ค์ด 2nd.pp.ua๋ผ๋ ๋๋ฉ์ธ์ ๋ง๋ค์๊ณ ์์ผ๋ก๋ ์ฌ์ฉํ ์์ ์ ๋๋ค.
acmens.2nd.pp.ua. IN A 35.237.128.147
acme.2nd.pp.ua. IN NS acmens.2nd.pp.ua.
์ด ๋จ๊ณ์์ ํธ์คํธ๋ ๋ค์ ์ฌํญ์ ํด๊ฒฐํด์ผ ํฉ๋๋ค. acmens.2nd.pp.ua
.
$ ping acmens.2nd.pp.ua
PING acmens.2nd.pp.ua (35.237.128.147) 56(84) bytes of data
ํ์ง๋ง acme.2nd.pp.ua
์ด๋ฅผ ์ ๊ณตํ๋ DNS ์๋ฒ๊ฐ ์์ง ์คํ๋์ง ์๊ธฐ ๋๋ฌธ์ ํ์ธ๋์ง ์์ต๋๋ค.
๋ ์ฝ๋๊ฐ ์์ฑ๋์์ผ๋ฏ๋ก ACME-DNS ์๋ฒ ์ค์ ๋ฐ ์์์ ์งํํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ด ์ฐ๋ถํฌ ์๋ฒ์ ์ด ๊ฒ์
๋๋ค
ํ์ํ ๋๋ ํฐ๋ฆฌ์ ํ์ผ์ ๋ง๋ญ๋๋ค.
$ mkdir config
$ mkdir data
$ touch config/config.cfg
์ ํธํ๋ ํ
์คํธ ํธ์ง๊ธฐ๋ก vim์ ์ฌ์ฉํ๊ณ ์ํ์ config.cfg์ ๋ถ์ฌ๋ฃ์ด ๋ณด๊ฒ ์ต๋๋ค.
์ฑ๊ณต์ ์ธ ์์ ์ ์ํด์๋ ์ผ๋ฐ ๋ฐ API ์น์ ์ ์์ ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค.
[general]
listen = "0.0.0.0:53"
protocol = "both"
domain = "acme.2nd.pp.ua"
nsname = "acmens.2nd.pp.ua"
nsadmin = "admin.2nd.pp.ua"
records =
"acme.2nd.pp.ua. A 35.237.128.147",
"acme.2nd.pp.ua. NS acmens.2nd.pp.ua.", ]
...
[api]
...
tls = "letsencrypt"
โฆ
๋ํ ์ํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์๋น์ค ๋๋ ํฐ๋ฆฌ์ docker-compose ํ์ผ์ ์์ฑํฉ๋๋ค.
version: '3.7'
services:
acmedns:
image: joohoi/acme-dns:latest
ports:
- "443:443"
- "53:53"
- "53:53/udp"
- "80:80"
volumes:
- ./config:/etc/acme-dns:ro
- ./data:/var/lib/acme-dns
์ค๋น๊ฐ ๋. ์คํํ ์ ์์ต๋๋ค.
$ docker-compose up -d
์ด ๋จ๊ณ์์ ํธ์คํธ๋ ํด๊ฒฐ์ ์์ํด์ผ ํฉ๋๋ค. acme.2nd.pp.ua
, 404๊ฐ ๋ํ๋ฉ๋๋ค. https://acme.2nd.pp.ua
$ ping acme.2nd.pp.ua
PING acme.2nd.pp.ua (35.237.128.147) 56(84) bytes of data.
$ curl https://acme.2nd.pp.ua
404 page not found
์ด๊ฒ์ด ๋ํ๋์ง ์์ผ๋ฉด - docker logs -f <container_name>
๋คํ์ค๋ฝ๊ฒ๋ ๋ก๊ทธ๋ ๊ฝค ์ฝ๊ธฐ ์ฝ์ต๋๋ค.
์ธ์ฆ์ ์์ฑ์ ์์ํ ์ ์์ต๋๋ค. ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก powershell์ ์ด๊ณ winacme๋ฅผ ์คํํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ ๊ฑฐ์ ๊ด์ฌ์ด ์์ต๋๋ค:
- M: ์ ์ธ์ฆ์ ์์ฑ(์ ์ฒด ์ต์ )
- 2:์๋ ์ ๋ ฅ
- 2: [dns-01] acme-dns๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธ ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค(
https://github.com/joohoi/acme-dns ) - ACME-DNS ์๋ฒ์ ๋ํ ๋งํฌ๋ฅผ ๋ฌป๋ ์ง๋ฌธ์ ๋ต๋ณ์ ์์ฑ๋ ์๋ฒ์ URL(https)์ ์
๋ ฅํฉ๋๋ค. acme-dns ์๋ฒ์ URL:
https://acme.2nd.pp.ua
์ฒ์์๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ธฐ์กด DNS ์๋ฒ์ ์ถ๊ฐํด์ผ ํ๋ ๋ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค(์ผํ์ฑ ์ ์ฐจ).
[INFO] Creating new acme-dns registration for domain 1nd.pp.ua
Domain: 1nd.pp.ua
Record: _acme-challenge.1nd.pp.ua
Type: CNAME
Content: c82a88a5-499f-464f-96e4-be7f606a3b47.acme.2nd.pp.ua.
Note: Some DNS control panels add the final dot automatically.
Only one is required.
ํ์ํ ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
$ dig CNAME _acme-challenge.1nd.pp.ua +short
c82a88a5-499f-464f-96e4-be7f606a3b47.acme.2nd.pp.ua.
winacme์์ ํ์ ํญ๋ชฉ์ ์์ฑํ์์ ํ์ธํ๊ณ ์ธ์ฆ์ ์์ฑ ํ๋ก์ธ์ค๋ฅผ ๊ณ์ํฉ๋๋ค.
certbot์ ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์ค๋ช
๋์ด ์์ต๋๋ค.
์ด๋ก์จ ์ธ์ฆ์ ์์ฑ ๊ณผ์ ์ด ์๋ฃ๋์์ผ๋ฉฐ, ์น ์๋ฒ์ ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ธ์ฆ์๋ฅผ ์์ฑํ ๋ ์ค์ผ์ค๋ฌ์์๋ ์์ ์ ์์ฑํ๋ฉด ๋์ค์ ์ธ์ฆ์ ๊ฐฑ์ ํ๋ก์ธ์ค๊ฐ ์๋์ผ๋ก ๋ฐ์ํฉ๋๋ค.
์ถ์ฒ : habr.com