<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>GOGUMA</title>
    <link>https://eh-lee.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 10 Jun 2026 03:39:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>으낙</managingEditor>
    <image>
      <title>GOGUMA</title>
      <url>https://tistory1.daumcdn.net/tistory/3363024/attach/5bb2b4cf6e7141759baf8803e01b9ddf</url>
      <link>https://eh-lee.tistory.com</link>
    </image>
    <item>
      <title>Let's Encrypt 으로 와일드카드 인증서 발급하기</title>
      <link>https://eh-lee.tistory.com/25</link>
      <description>&lt;h2&gt;준비물&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;수신 가능한 이메일&lt;/li&gt;
&lt;li&gt;인증서를 발급하고자 하는 도메인 네임&lt;/li&gt;
&lt;li&gt;그리고 그 도메인의 DNS 레코드 변경 권한&lt;/li&gt;
&lt;li&gt;리눅스 혹은 Docker 가 실행 가능한 환경&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;발단&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/YsxBE7O.png&quot; alt=&quot;&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjtOWq/btqFgIlJszI/gpNF4Yaxy7LFHP69W3biM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjtOWq/btqFgIlJszI/gpNF4Yaxy7LFHP69W3biM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjtOWq/btqFgIlJszI/gpNF4Yaxy7LFHP69W3biM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjtOWq%2FbtqFgIlJszI%2FgpNF4Yaxy7LFHP69W3biM0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;밤낮 가리지 않고 일하는 우리 운영팀 덕분에 업무사이트의 인증서가 만료되었음을 알았다. 메인 서비스 사이트에는 GoGetSSL 을 구매해 이용하고 있지만, 부수적으로 운영하는 도메인이 많아 인트라넷을 포함한 기타 도메인에는 &lt;code&gt;Let's Encrypt&lt;/code&gt;를 이용하고 있다. 간단히 소개하자면 &lt;code&gt;Let's Encrypt&lt;/code&gt;는 단기간(3개월)이지만 무료로 SSL 인증서를 제공해주는 서비스이다.&lt;/p&gt;
&lt;p&gt;이번 글에서는 &lt;code&gt;certbot&lt;/code&gt;을 이용해 &lt;code&gt;Let's Encrypt free certificate&lt;/code&gt;를 발급받고 &lt;code&gt;nginx&lt;/code&gt;에 적용까지 해보려고 한다.&lt;/p&gt;
&lt;h2&gt;커맨드&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;certbot 설치&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;리눅스 기준이다. 도커 사용자는 바로 3번까지 건너뛰어가자.&lt;/p&gt;
&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;$ sudo su -
$ cd /path/to/somewhere/
$ git clone https://github.com/certbot/certbot&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/certbot/certbot&quot;&gt;&lt;code&gt;certbot&lt;/code&gt;&lt;/a&gt;은 &lt;code&gt;Let's Encrypt&lt;/code&gt;인증서를 cli 환경에서 발급받을 수 있는 패키지이다._&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;가상 작업환경 (&lt;code&gt;python virtualenv&lt;/code&gt;) 설정&lt;/p&gt;
&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;$ cd certbot
$ ./certbot-auto --os-packages-only
$ ./tools/venv3.py
$ source venv3/bin/activate&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;자동으로 필요한 패키지를 설치한다. 파이썬 패키지들을 설치할 때 (세번째 커맨드) 시간이 많이 걸린다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;인증서 발급하기&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;리눅스 사용자&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;$ certbot certonly -d kkukowiki.kr -d kkutukorea.com -d *.kkukowiki.kr -d *.kkutukorea.com \
 --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory \
 --email foo@domain.com --agree-tos --expand --renew-by-default --manual-public-ip-logging-ok&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;도커 사용자&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;$ docker run -it --name certbot -v 'C:\Data\KKorea\cert\etc:/etc/letsencrypt' \
 -v 'C:\Data\KKorea\cert\var:/var/lib/letsencrypt' certbot/certbot certonly \
 -d kkutukorea.com -d *.kkukowiki.kr -d *.kkutukorea.com \
--manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory \
--email foo@domain.com --agree-tos --expand --renew-by-default --manual-public-ip-logging-ok&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;중간에 &lt;code&gt;-d domain.com&lt;/code&gt;구문으로 도메인을 추가할 수 있다. 단, 와일드카드 도메인과 루트 도메인을 동시에 인증받기 위해서는 &lt;b&gt;&lt;b&gt;꼭&lt;/b&gt;&lt;/b&gt; 루트 도메인을 먼저 지정하고 후위에 와일드카드 도메인을 지정해주자. 안 그러면 도메인이 두 번 인식돼 인증 절차가 정상적으로 처리되지 않는다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;도커 사용자는 필자가 지정한 &lt;code&gt;C:\Data\KKorea\cert\etc&lt;/code&gt;와 &lt;code&gt;C:\Data\KKorea\cert\var&lt;/code&gt;의 경로를 자신에 맞는 경로로 수정하자. 도메인의 인증서가 호스트의 디렉토리에 공유할 위치를 정하는 것이다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;도메인 인증하기&lt;br /&gt;&lt;code&gt;Let's Encrypt&lt;/code&gt;에서 와일드카드 도메인에 대한 인증서를 발급받으려면 도메인의 DNS 레코드를 수정할 권한이 있어야 한다. 필자의 경우 &lt;code&gt;[Cloudflare](https://cloudflare.com)&lt;/code&gt;을 이용하고 있다. 다른 DNS 관리 사이트들도 유사한 경로에서 DNS 레코드를 수정할 수 있을 것이다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FaoOo/btqFe3j3hYQ/OYglIOYgI0So3Q6aVeUssK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FaoOo/btqFe3j3hYQ/OYglIOYgI0So3Q6aVeUssK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FaoOo/btqFe3j3hYQ/OYglIOYgI0So3Q6aVeUssK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFaoOo%2FbtqFe3j3hYQ%2FOYglIOYgI0So3Q6aVeUssK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p&gt;인증 중간에 위와 같이 도메인의 TXT 레코드를 등록해달라는 문구를 마주하게 된다. 각자의 DNS 관리 페이지에서 해당 값을 설정해주자. 아, TTL 은 최대한 짧게 설정하자. 필자는 2분으로 설정했다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JIukn/btqFg4ovWgA/kZwmAGtZxq4itze1ISSw41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JIukn/btqFg4ovWgA/kZwmAGtZxq4itze1ISSw41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JIukn/btqFg4ovWgA/kZwmAGtZxq4itze1ISSw41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJIukn%2FbtqFg4ovWgA%2FkZwmAGtZxq4itze1ISSw41%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p&gt;위와 같이 레코드를 설정해주고, 혹시 모르니 레코드가 제대로 적용됐는지 확인해보면 된다. 윈도우나 리눅스/유닉스 모두 `nslookup` 명령어가 있다. 아래 명령어로 제대로 적용됐는지 확인한 후 다시 인증 화면으로 넘어가 엔터를 눌러주자. 만약 도메인을 여러 개 등록하고 있다면 인증도 각각의 도메인별 코드가 발급된다.&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;$ nslookup -q=txt _acme-challenge.yourdomain.com
Server:  one.one.one.one
Address:  1.1.1.1

Non-authoritative answer:
_acme-challenge.kkukowiki.kr    text =

    &quot;fjmHbJCd8 .............. JEDnFg4sK8&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;인증서 연결하기&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;인증서는 &lt;code&gt;/etc/letsencrypt/live/fist_domain_root_name.kr/&lt;/code&gt;에 있다. 앞으로 갱신해도 같은 위치에 있을 예정이니 이 경로로 심볼릭 링크를 설정해주자. 필자는 기존에 이용하던 &lt;code&gt;/etc/nginx/ssl/kkukomisc/&lt;/code&gt;로 연결해야 했다.&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;$ mv /etc/nginx/ssl/kkukomisc/ /etc/nginx/ssl/bak_kkukomisc_200630  // 백업해둔 것이다. 각자 잊지 말자
$ ln -s /etc/letsencrypt/live/kkutukorea.com/ /etc/nginx/ssl/kkukomisc/&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;이제 &lt;code&gt;nginx&lt;/code&gt; 사이트 설정에서 아까 생성한 심볼릭 링크와, 인증서를 참조하는 경로가 같은지 확인하자&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;$ vi /etc/nginx/conf.d/sitename.kr/
ssl_certificate &quot;/etc/ssl/kkukomisc/fullchain.pem&quot;;
ssl_certificate &quot;/etc/ssl/kkukomisc/privkey.pem&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;필자는 원래 설정이 &lt;code&gt;privatekey.pem&lt;/code&gt;을 참고하게 되어있어서 &lt;code&gt;privkey.pem&lt;/code&gt; -&amp;gt; &lt;code&gt;privatekey.pem&lt;/code&gt; 으로 심볼링크를 하나 더 생성해주었다. 환경에 맞게 설정하자.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Server</category>
      <category>certbot</category>
      <category>letsencrypt</category>
      <category>linux</category>
      <category>SSL</category>
      <category>SSL인증서</category>
      <category>wildcard domain</category>
      <category>와일드카드</category>
      <author>으낙</author>
      <guid isPermaLink="true">https://eh-lee.tistory.com/25</guid>
      <comments>https://eh-lee.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 1 Jul 2020 03:04:30 +0900</pubDate>
    </item>
    <item>
      <title>Introduction</title>
      <link>https://eh-lee.tistory.com/pages/Introduction</link>
      <description>&lt;p&gt;&lt;img src=&quot;https://avatars2.githubusercontent.com/u/20613749&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h2&gt;Eunhak Lee&lt;/h2&gt;</description>
      <author>으낙</author>
      <guid isPermaLink="true">https://eh-lee.tistory.com/pages/Introduction</guid>
      <pubDate>Tue, 29 Oct 2019 14:00:45 +0900</pubDate>
    </item>
  </channel>
</rss>