Let’s Encrypt 사용하여 SSL 인증서 발급

2가지의 인증서 발급이있다.

  1. CertBot (Let’s Encrypt)
  2. ASP.NET Core - LettuceEncrypt
    이 글은 CertBot을 사용하여 인증서를 발급하는 방법을 설명한다.

목차

요약

asp.net core를 docker로 배포하고,
도메인을 연결하고,
SSL 인증서를 발급받아 적용하는 방법을 설명한다.

ASP.NET Core (.NET 7)

1. Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseKestrel();  <-- 추가를  경우 
appsettings.json 파일을 참조한다.

2. appsettings.json

  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://+:8001",
        "Certificate": {
          "Path": "/path/to/cert.pem",
          "KeyPath": "/path/to/key.pem"
        }
      }
    }
  }
sudo apt-get update
sudo apt-get install certbot

//http 챌린지
sudo certbot certonly --standalone -d {도메인주소} --preferred-challenges http

//DNS-01챌린지 일경우
sudo certbot certonly --manual -d amsomad.site --preferred-challenges dns


// 결과
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/{도메인주소}/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/{도메인주소}/privkey.pem
This certificate expires on 2024-02-05.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// _acme-challenge.{도메인주소} TXT 레코드 추가
dig -t TXT _acme-challenge.{도메인주소}


docker run -d -p 80:80 -p 443:443 \
-v /etc/letsencrypt/live/{도메인주소}/fullchain.pem:/path/to/cert.pem \
-v /etc/letsencrypt/live/{도메인주소}/privkey.pem:/path/to/key.pem \
--name aspnetapp-container amsomad/aspnetcorerazerpage:latest


CertBot 설치

sudo apt-get update
sudo apt-get install certbot

인증서 발급

sudo certbot certonly --standalone -d {도메인주소.com} -d {www.도메인주소.com}

–standalone: Certbot이 자체 웹 서버를 사용하여 도메인 소유권을 검증하는 방식을 나타냅니다.
-d: 발급 받으려는 인증서의 도메인을 지정합니다.

다른 웹 서버를 사용하는 경우

다른 웹 서버 (Nginx, Apache 등)가 이미 실행 중이고,
해당 웹 서버를 통해 도메인의 소유권을 검증하고 싶다면,
–nginx 또는 –apache 플러그인을 사용할 수 있습니다.

sudo certbot certonly 
    --webroot 
    -w {웹서버 경로} 
    -d {도메인주소.com} 
    -d {www.도메인주소.com} 
    -m {이메일주소} 
    --agree-tos 
    --no-eff-email 
    --non-interactive

–webroot: Certbot이 웹 서버의 루트 디렉토리를 사용하여 도메인 소유권을 검증하는 방식을 나타냅니다.
-w: 웹 서버의 루트 디렉토리 경로를 지정합니다.
-d: 발급 받으려는 인증서의 도메인을 지정합니다.
-m: 이메일 주소를 지정합니다.
–agree-tos: 서비스 약관에 동의합니다.
–no-eff-email: EFF(Electronic Frontier Foundation)에 의해 수집되는 이메일 주소를 거부합니다.
–non-interactive: 인터랙티브 모드를 사용하지 않습니다.

DNS _acme-challenge 레코드 추가

DNS _acme-challenge 레코드를 추가해야한다.

CertBot이 인증서 발급을 위해 DNS _acme-challenge 레코드를 추가하라고 알려주면,
도메인을 관리하는 DNS 서비스에 로그인하여 _acme-challenge 레코드를 추가해야한다.

sudo certbot certonly --manual --preferred-challenges dns -d {'사이트.주소'} -d {'www.사이트.주소'}

결과

Please deploy a DNS TXT record under the name:

_acme-challenge.amsomad.site.

with the following value:

{}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:

_acme-challenge.www.amsomad.site.

with the following value:

{}

–manual: Certbot이 자동으로 도메인 소유권을 검증하지 않고, 수동으로 검증하는 방식을 나타냅니다.
–preferred-challenges: 도메인 소유권을 검증하는 방식을 지정합니다.
-d: 발급 받으려는 인증서의 도메인을 지정합니다.
-m: 이메일 주소를 지정합니다.

value 값을 DNS 서비스에 추가한다.
가비아 혹은 후이즈에서 DNS 서비스를 사용하고 있다면,
도메인 관리 페이지에서 TXT 레코드를 추가할 수 있다.
_acme-challenge : M4ZLIJJfbqti6ZSyvycNtfGsi9w3qKufngRvRfXJi54
_acme-challenge.www : Qg_BtcuMnjMKHl3ZWlcG_9Z-Q97iSaq30zdWFFXUw8Y
형태로 추가한다.

인증서 적용

docker run -d -p 8000:8000 -p 8001:8001 -v {서버경로}:{/app/cert.pem} -v /path/to/key.pem:/key.pem --name aspnetapp-container amsomad/aspnetcorerazerpage:latest


Note: 만들고나니 내것이 아니었다.

Leave a comment