π₯ LetsEncrypt SSL μΈμ¦μ λ°κΈ νμ μ ν
π₯ LetsEncrypt SSL μΈμ¦μ λ°κΈ νμ μ ν
λ¬Έμ μν©
Nginx
μdefault.conf
λScript
νμΌμ΄ μ λλ‘ μμ±λμ΄ μμμλLetsEncrypt
SSL
μΈμ¦μ λ°κΈμ κ³μ μ€ν¨νλ€.
λ¬Έμ μμΈ
1
2
3
4
5
6
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for subdomain.iptime.org
An unexpected error occurred:
AttributeError: can't set attribute
Ask for help or search for solutions at https://community.letsencrypt.org.
See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
- μΈμ¦μ λ°κΈ μ€ν¨ ν
docker logs nginx
λͺ λ Ήμ΄λ₯Ό μ λ ₯νλ©΄ μκΈ° λ‘κ·Έλ₯Ό νμΈν μ μλ€.
1
2
3
4
5
6
7
{
Β Β "type": "urn:ietf:params:acme:error:rateLimited",
Β Β "detail": "too many certificates (5) already issued for this exact set of domains in the last 168h0m0s,
Β Β retry after 2025-05-02 07:31:44 UTC:
Β Β see https://letsencrypt.org/docs/rate-limits/#new-certificates-per-exact-set-of-hostnames",
Β Β "status": 429
}
docker exec -it nginx /bin/bash
λͺ λ Ήμ΄λ‘Nginx
컨ν μ΄λλ‘ λ€μ΄κ°μ/var/log/letsencrypt/letsencrypt.log
νμΌμ νμΈνλ©΄ λλ€.- λ‘κ·Έλ₯Ό 보면 μΈμ¦μ λ°κΈ μμ²μ λν νμ μ νμ΄ μμμμ μ μ μκ³ , μΈμ λ€μ μμ²μ΄ κ°λ₯νμ§ νμΈ κ°λ₯νλ€.
- κ²°λ‘ μ μΌλ‘
Nginx
μdefault.conf
λScript
νμΌμ κ³μ μμ νλ©΄μ, μΈμ¦μ λ°κΈ μμ²μ λν νμ μ ν μ΄μμΌλ‘ μμ²ν κ²μ΄ λ¬Έμ μ μμΈμ΄μλ€.
ν΄κ²° λ°©λ²
- μ°Ύμ보λ μΈμ¦μ λ°κΈκ³Ό μΈμ¦μ κ°±μ μ λν ν μ€νΈ λͺ λ Ήμ΄κ° λ°λ‘ μλ€κ³ νλ€.
β μΈμ¦μ λ°κΈ ν μ€νΈ
1
certbot certonly --staging --webroot --webroot-path=/var/www/certbot --email ${CERTBOT_EMAIL} --agree-tos --no-eff-email -d λλ©μΈ
--staging
μ΅μ μ μ€μ μΈμ¦μ λ°κΈ μλ²κ° μλ ν μ€νΈ μλ²μ ν΅μ νλλ‘ μ€μ νλ μ΅μ μ΄λ€.- μ€μ μΈμ¦μ λ°κΈλ³΄λ€λ μ‘°κΈ λμ¨ν κΈ°μ€μ μ μ©ν΄μ μΈμ¦μλ₯Ό λ°κΈν΄ μ€λ€.
- μ΄λ λ°κΈ λλ μΈμ¦μλ μ€μ μ ν¨νμ§ μμΌλ©°, λΈλΌμ°μ λ±μμ μ λ’° λμ§ μλλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
2025-05-01 13:32:32,856:DEBUG:certbot._internal.plugins.selection:Requested authenticator webroot and installer <certbot._internal.cli.cli_utils._Default object at 0xffffafdb4390>
2025-05-01 13:32:32,856:DEBUG:certbot._internal.cli:Var staging=True (set by user).
2025-05-01 13:32:32,856:DEBUG:certbot._internal.cli:Var server={'staging', 'dry_run'} (set by user).
2025-05-01 13:32:32,856:DEBUG:certbot._internal.cli:Var account={'server'} (set by user).
2025-05-01 13:32:32,856:DEBUG:certbot._internal.cli:Var staging=True (set by user).
2025-05-01 13:32:32,856:DEBUG:certbot._internal.cli:Var server={'staging', 'dry_run'} (set by user).
2025-05-01 13:32:32,856:DEBUG:certbot._internal.cli:Var authenticator=webroot (set by user).
2025-05-01 13:32:32,859:DEBUG:certbot._internal.cli:Var webroot_path=/var/www/certbot (set by user).
2025-05-01 13:32:32,859:DEBUG:certbot._internal.cli:Var webroot_path=/var/www/certbot (set by user).
2025-05-01 13:32:32,859:DEBUG:certbot._internal.cli:Var webroot_map={'webroot_path'} (set by user).
2025-05-01 13:32:32,860:DEBUG:certbot._internal.storage:Writing new config /etc/letsencrypt/renewal/λλ©μΈ.conf.
2025-05-01 13:32:32,864:DEBUG:certbot._internal.display.obj:Notifying user:
Successfully received certificate.
- ν
μ€νΈμ μ±κ³΅νλ©΄
Nginx
컨ν μ΄λ λ΄/var/log/letsencrypt/letsencrypt.log
μμ μκΈ° λ‘κ·Έλ₯Ό νμΈν μ μλ€
β μΈμ¦μ κ°±μ ν μ€νΈ
1
certbot renew --dry-run
- λ§μ½ λ§λ£μΌ 30μΌ μ μ λλνμ§ μμ κ²½μ° μ무 λμλ νμ§ μλλ€.
- λ§λ£μΌ 30μΌ μ λΆν° ν΄λΉ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ μΈμ¦μλ₯Ό κ°±μ ν μ μλ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# docker logs nginx
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
Β Β /etc/letsencrypt/live/λλ©μΈ/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# docker exec -it nginx /bin/bash
# cd /var/log/letsencrypt
# cat letsencrypt.log
2025-05-01 13:46:04,141:DEBUG:certbot._internal.cli:Var dry_run=True (set by user).
2025-05-01 13:46:04,141:DEBUG:certbot._internal.cli:Var server={'dry_run', 'staging'} (set by user).
2025-05-01 13:46:04,141:DEBUG:certbot._internal.cli:Var dry_run=True (set by user).
2025-05-01 13:46:04,141:DEBUG:certbot._internal.cli:Var server={'dry_run', 'staging'} (set by user).
2025-05-01 13:46:04,141:DEBUG:certbot._internal.cli:Var account={'server'} (set by user).
2025-05-01 13:46:04,183:INFO:certbot.ocsp:Cannot extract OCSP URI from /etc/letsencrypt/archive/λλ©μΈ/cert1.pem
2025-05-01 13:46:04,187:INFO:certbot._internal.renewal:Certificate not due for renewal, but simulating renewal for dry run
2025-05-01 13:46:04,187:INFO:certbot._internal.renewal:Non-interactive renewal: random delay of 95.38242860717801 seconds
- ν μ€νΈμ μ±κ³΅νλ©΄ λ‘κ·Έλ₯Ό ν΅ν΄ μ±κ³΅ μ¬λΆλ₯Ό νμΈν μ μλ€.
β νμ μ νμ κ±Έλ €μλλ° κΈνκ² μΈμ¦μκ° νμνλ€λ©΄?
1
certbot certonly --webroot --webroot-path=/var/www/certbot --email ${CERTBOT_EMAIL} --agree-tos --no-eff-email -d μλΈλλ©μΈA -d μλΈλλ©μΈB
- μΈμ¦μ λ°κΈκ³Ό κ°±μ νλ‘μΈμ€μλ λ¬Έμ κ° μκ³ νμ μ νμ κ±Έλ € μλλ°, κΈνκ² ν΄λΉ μλ²λ₯Ό μ΄μ©ν΄μΌ νλ μν©μ΄λΌλ©΄ λ€μκ³Ό κ°μ΄ μ§νν μ μλ€.
- κ°λΉμ λ± λλ©μΈ μλΉμ€μμ μλΈ λλ©μΈμ μΆκ°νμ¬ λμΌ
IP
λ‘ μ€μ - μΈμ¦μ λ°κΈ μ μμ λͺ λ Ήμ΄ μ€ν
- κ°λΉμ λ± λλ©μΈ μλΉμ€μμ μλΈ λλ©μΈμ μΆκ°νμ¬ λμΌ
νκ³
- ν
μ€νΈλ μ΅λν μ€μ μ΄μ νκ²½μ κ°κΉκ² νμλ μ£Όμμ¬μ μ‘°κΈ μ°μ°νμ§λ§
ChatGPT
λ λ ν μ€νΈ λͺ λ Ήμ΄λ₯Ό ν΅κ³Όνλ©΄ μ€μ μ΄μ νκ²½μμλ μ±κ³΅μ μΌλ‘ μΈμ¦μ λ°κΈ λ° κ°±μ μ΄ κ°λ₯ν κ²μ΄λΌκ³ νλ€.
This post is licensed under CC BY 4.0 by the author.