초보코딩 let’s encrypt 무료로 웹서버 SSL 발급 (Https를 위해)-1

웹서버 SSL 발급

초보코딩의 눈높이의 웹서버 SSL 발급 방법 입니다. 3개월에 한번 업데이트 해야 하는 불편함은 있지만 let’s encrypt는 무료에요. 여러 블로글 글들을 보면 뭐 여러 방법이 있지만 저도 몇몇 시도했지만 전부 실패하고 저 같은 초보들은 Windows 환경에서 Certbot을 이용한 아래 방법이 제일 쉬운 것 같습니다.

코딩하는 분들의 눈높이에 만들어진 수많은 블로그 글 그리고 공식 홈페이지에 가서 설명을 보아도 정말 불친절해서 보면서 짜증도 많이 나기도 했지만 뭐든 하고 나면 벌 거 없더군요…. 물론 좀 사서 고생한 면도 있습니다.

저는 수많은 시간을 들여 고생했지만 이 글을 보시는 초보 분들은 금방 만드실 수 있으실 겁니다.

환경

웹서버 SSL 발급환경

Python, VScode, Window, Let’s Encrypt(무료), Certbot

이 글을 보신다면 DDNS나 본인이 원하는 서버가 있겠죠?

과정

시작

처음은 웹서버의 SSL을 직접 발급할 생각은 없었습니다. 저는 Https가 필요한데 가지고 있는 공유기 ASUS AX56U에 DDNS서비스의 설정에 들어 있는 Let’s Encrypt 의 무료 인증서 발급이 안되더라고요.

그래서 직접 업로드를 하는 방법을 이용하기 위해 SSL을 발급받기로 합니다.

초보면 웹서버 SSL 발급 wacs 방법 시도하지 마세요.

도대체 프로그래머들은 왜 이렇게 불친절하십니까….. 설명을 참….. 하물며 공식 홈페이지 조차 자세한 설명은 생략합니다. 만약 제가 싫어하는 사람이 웹서버 SSL 발급 받고 싶은데 그럼 wacs로 받으라고 할 겁니다.

기존 도메인이 있는 경우야 어렵지 않을 것 같지만 웹서버로 받으실 분은 하지 마세요. 저는 여러 번 시도하다 횟수 차단을 당하고 한 시간을 기다리고 시도하고 하다 포기했습니다.

일단 포트포워드

공유기에서 WAN -> 포트포워드 설정

Certbot 으로 SSL 발급

Certbot이 쉽다는 글은 봤지만 막상 클릭해서 들어가면 설명이 ubuntu 환경….. 포기하고 이전 단계에서 고생하며 모든걸 실패하고 Certbot 을 시도한 결과 발급이 되었습니다. 하지만 이 역시 저 같은 일반인에게는 쉽진 않았습니다.

Certbot 설치

-24년6월수정- 더이상 window에서 정식지원이 안되고 베타로 바뀌었습니다.

Certbot 홈페이지

Powershell 이나 CMD 창을 관리자 권한으로 열고

certbot --help

명령어 를 치면 아래와 같이 뜨면 정상적으로 설치가 된 것 입니다.

웹서버 SSL 발급

웹서버 SSL발급 메뉴얼 방법

다른 방법은 모르겠습니다. 설명을 봐도 무슨 말인지 모르겠고 도메인도 따로 없고 공유기에서 쉽게 만든 DDNS 주소로 발급 받으려고 하기 때문에 메뉴얼 옵션으로 받았습니다.

ddns주소는 공유기나 duckdns를 이용해서 발급받습니다.

터미널에서 아래 명령어를 입력합니다.

certbot certonly –manual -d example.com

여러분은 example.com에 본인 ddns 주소를 입력해줍니다. 이때 http나 슬래시는 빼고 주소만 입력 하세요

그럼 아래와 같이 뜹니다.

저는 인증서를 발급 받기 위해 임의로 페이지를 만들었습니다.

아래 코드를 파이썬으로 실행하세요. 그럼 html로 만든 것처럼 certbot 에서 만드란 URL경로에 위에 글씨를 만들 수 있습니다.

파이썬 코드의 경로에 폴더 .well-known(점까지표함) 을 만드시고 그안에 acme-challenge을 만듭니다.

그리고 메모장으로 요청한 문자열을 입력하여 저장 이때 꼭 utf-8로 저장하세요 utf-8 bom 안됨 그리고 확장자는 없애주세요

from http.server import BaseHTTPRequestHandler, HTTPServer

PORT = 80

class CustomHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == "/.well-known/acme-challenge/vdO4eEv1-NkZSq7PBDZlxd1DegTip7ddhX-YZr7sM7E":
            self.send_response(200)
            self.send_header('Content-type', 'text/plain')
            self.end_headers()
            with open(".well-known/acme-challenge/vdO4eEv1-NkZSq7PBDZlxd1DegTip7ddhX-YZr7sM7E", "r", encoding="utf-8") as file:
                content = file.read()
                self.wfile.write(content.encode('utf-8'))
        else:
            self.send_error(404)

Handler = CustomHandler

with HTTPServer(("", PORT), Handler) as httpd:
    print("Serving at port", PORT)
    httpd.serve_forever()

그리고 아까전 certbot 터미널에서 엔터를 누르고 좀 기다리면 발급을 받아집니다.

<설명 끝>

웹서버 SSL 발급

Success 내 인증서 – fullchain 과 그 키 가 생성 되어 저장 되었습니다.

마무리

다음엔 무료 도메인…….

다른 컨텐츠

댓글 남기기