<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Let&#039;sEncrypt 보관 - 뚱이의 잡동사니</title>
	<atom:link href="https://blog.kisaragistation.com/tag/letsencrypt/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.kisaragistation.com/tag/letsencrypt/</link>
	<description>잡동사니 저장소</description>
	<lastBuildDate>Tue, 05 Aug 2025 06:21:28 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.kisaragistation.com/wp-content/uploads/2023/07/cropped-IMG_2652-150x150.jpeg</url>
	<title>Let&#039;sEncrypt 보관 - 뚱이의 잡동사니</title>
	<link>https://blog.kisaragistation.com/tag/letsencrypt/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">157428392</site>	<item>
		<title>시놀로지 기본 인증서 외부 인증서로 자동 교체 하기</title>
		<link>https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/</link>
					<comments>https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/#respond</comments>
		
		<dc:creator><![CDATA[Soungjun]]></dc:creator>
		<pubDate>Tue, 05 Aug 2025 06:21:26 +0000</pubDate>
				<category><![CDATA[서버]]></category>
		<category><![CDATA[팁&정보]]></category>
		<category><![CDATA[acme]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[Let'sEncrypt]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[sha256]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[시놀로지]]></category>
		<category><![CDATA[인증서]]></category>
		<category><![CDATA[컴퓨터]]></category>
		<guid isPermaLink="false">https://blog.kisaragistation.com/?p=670</guid>

					<description><![CDATA[<p>서론 최근에 이것저것 서버를 만지다 인증서 구조를 좀 바꾸고 스크립트도 지워놓고 귀찮아서 방치했더니,... <a href="https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/" class="readmore">포스트로 이동하여 마저 읽기<span class="screen-reader-text">시놀로지 기본 인증서 외부 인증서로 자동 교체 하기</span><span class="fa fa-angle-double-right" aria-hidden="true"></span></a></p>
<p>게시물 <a href="https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/">시놀로지 기본 인증서 외부 인증서로 자동 교체 하기</a>이 <a href="https://blog.kisaragistation.com">뚱이의 잡동사니</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="gb-headline gb-headline-22810254 gb-headline-text">서론</h2>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="493" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.37.58-1024x493.png" alt="" class="wp-image-671" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.37.58-1024x493.png 1024w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.37.58-300x145.png 300w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.37.58-768x370.png 768w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.37.58.png 1150w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>최근에 이것저것 서버를 만지다 인증서 구조를 좀 바꾸고 스크립트도 지워놓고 귀찮아서 방치했더니, 기존에 먹여놨던 인증서가 만료가 되었습니다.</p>



<p>예전에 시놀로지 내에서 acme를 통해 Let&#8217;s Encrypt 인증서 발급, 자동 갱신, 적용되게 만드는 방법을 포스팅 했었는데, 블로그도 여차저차 문제가 많았다보니 지워졌고 새로 쓰진 않은 상태네요. </p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="gb-headline gb-headline-2f100b70 gb-headline-text">본론</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="582" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.56.55-1024x582.png" alt="" class="wp-image-672" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.56.55-1024x582.png 1024w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.56.55-300x171.png 300w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.56.55-768x437.png 768w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.56.55.png 1489w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>현재 인증서는 Nginx Proxy Manager라는 리버스 프록시 관리 서비스에서 관리되고 있으며, 자동으로 갱신되는 서비스도 자체적으로 내장되어 있어서 등록만 하면 신경 끄고 써도 되는 아주 편리한 물건입니다.</p>



<p>여튼, 인증서가 시놀로지 외부에 있기 때문에, 인증서를 서버에서 Rsync로 시놀로지로 전송. 시놀로지에서는 주기적으로 스크립트를 구동하여, 인증서의 변화(업데이트)가 감지되면 자동으로 인증서를 교체하게 만드는것 까지 해보도록 하겠습니다.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img decoding="async" width="837" height="385" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.41.10.png" alt="" class="wp-image-673" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.41.10.png 837w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.41.10-300x138.png 300w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.41.10-768x353.png 768w" sizes="(max-width: 837px) 100vw, 837px" /></figure>



<p>시놀로지 인증서를 한번이라도 만져보셨으면 시놀로지의 기본 인증서가 랜덤ID로 지정된 디렉터리 안에 위치한다는것을 아실겁니다.</p>



<p>이 아이디는 /usr/syno/etc/certificate/_archive/DEFAULT라는 파일 안에 적혀있습니다.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="928" height="525" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.43.16.png" alt="" class="wp-image-674" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.43.16.png 928w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.43.16-300x170.png 300w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-1.43.16-768x434.png 768w" sizes="auto, (max-width: 928px) 100vw, 928px" /></figure>



<p>그리고 서버측 인증서 위치도 파악해 둬야겠죠. 제 경우에는 홈/도커/서비스/~~/인증서 위치에 있습니다.</p>



<p>Nginx Proxy Manager(줄여서NPM)은 인증서를 한번 등록해두면 디렉터리가 바뀌지는 않고, 내부 인증서만 변경되기에 저 위치를 그대로 사용하면 됩니다. 나중에 변동이 있을때만 스크립트를 조금 손보면 되겠죠.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="gb-headline gb-headline-6b618673 gb-headline-text">스크립트 제작</h2>



<div class="wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#2e3440ff;display:none;background-color:#d8dee9ff" aria-label="Copy" data-copied-text="Copied!" data-has-text-button="textSimple" data-inside-header-type="headlights" aria-live="polite" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>#!/bin/bash

SRC_DIR="/home/clove7802/docker/npmplus/data/tls/certbot/archive/npm-5"
FILES=("cert.pem" "privkey.pem" "fullchain.pem")

REMOTE_USER="유저"
REMOTE_HOST="시놀로지"
REMOTE_PORT=포트
REMOTE_DIR="인증서 저장위치"

for FILE in "${FILES&#91;@&#93;}"; do
  SRC_FILE="$SRC_DIR/$FILE"
  if &#91; -f "$SRC_FILE" &#93;; then
    rsync -av -e "ssh -p $REMOTE_PORT" "$SRC_FILE" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/"
    echo "&#91;`date`&#93; Synced: $FILE"
  else
    echo "&#91;`date`&#93; Not found: $FILE"
  fi
done</textarea></pre><span class="cbp-btn-text">Copy</span></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">SRC_DIR</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">/home/clove7802/docker/npmplus/data/tls/certbot/archive/npm-5</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9">FILES</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">cert.pem</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">privkey.pem</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fullchain.pem</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">REMOTE_USER</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">유저</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9">REMOTE_HOST</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">시놀로지</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9">REMOTE_PORT</span><span style="color: #81A1C1">=</span><span style="color: #A3BE8C">포트</span></span>
<span class="line"><span style="color: #D8DEE9">REMOTE_DIR</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">인증서 저장위치</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">FILE</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">${</span><span style="color: #D8DEE9">FILES</span><span style="color: #ECEFF4">&#91;</span><span style="color: #A3BE8C">@</span><span style="color: #ECEFF4">&#93;</span><span style="color: #81A1C1">}</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">do</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #D8DEE9">SRC_FILE</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$SRC_DIR</span><span style="color: #A3BE8C">/</span><span style="color: #D8DEE9">$FILE</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#91;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-f</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$SRC_FILE</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#93;</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">then</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">rsync</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">-av</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">-e</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">ssh -p </span><span style="color: #D8DEE9">$REMOTE_PORT</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$SRC_FILE</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">${</span><span style="color: #D8DEE9">REMOTE_USER</span><span style="color: #81A1C1">}</span><span style="color: #A3BE8C">@</span><span style="color: #81A1C1">${</span><span style="color: #D8DEE9">REMOTE_HOST</span><span style="color: #81A1C1">}</span><span style="color: #A3BE8C">:</span><span style="color: #81A1C1">${</span><span style="color: #D8DEE9">REMOTE_DIR</span><span style="color: #81A1C1">}</span><span style="color: #A3BE8C">/</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">echo</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&#91;</span><span style="color: #ECEFF4">`</span><span style="color: #88C0D0">date</span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">&#93; Synced: </span><span style="color: #D8DEE9">$FILE</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">else</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">echo</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&#91;</span><span style="color: #ECEFF4">`</span><span style="color: #88C0D0">date</span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">&#93; Not found: </span><span style="color: #D8DEE9">$FILE</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">fi</span></span>
<span class="line"><span style="color: #81A1C1">done</span></span></code></pre><span style="display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative">Bash</span></div>



<p>일단 서버측에서 전송을 하기 위한 스크립트를 먼저 작성했습니다.</p>



<p>그대로 넣으시면 안되고 사용 환경에따라 값들이 달라지기 때문에 적당히 수정해서 사용하시면 되겠습니다.</p>



<p>인증서 디렉터리에서 필요한 3개의 파일을 Rsync로 전송하는 스크립트 입니다.</p>



<p>저는 cron에 등록해서 주기적으로 작동되게 할 예정입니다.</p>



<p>cron은 사용자 입력을 받을 수가 없기 때문에 SSH 비밀번호를 입력할 수 없습니다. 저처럼 cron을 사용할 예정이라면, 미리 SSH-Key를 생성해서 시놀로지에 등록해서 비밀번호 없이 키만으로 접속이 가능하게 해두시는걸 추천드립니다.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#2e3440ff;display:none;background-color:#d8dee9ff" aria-label="Copy" data-copied-text="Copied!" data-has-text-button="textSimple" data-inside-header-type="headlights" aria-live="polite" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>#!/bin/bash

#기본 인증서 디렉토리 ID 읽기, 디렉터리 지정
DEFAULT_ID=$(cat /usr/syno/etc/certificate/_archive/DEFAULT)
CERT_DIR="/usr/syno/etc/certificate/_archive/${DEFAULT_ID}"
NEW_CERT_DIR="인증서 저장위치"
CHECKSUM_FILE="${NEW_CERT_DIR}/.cert_checksum"

#인증서 해시 계산
current_checksum=$(sha256sum "$NEW_CERT_DIR/cert.pem" "$NEW_CERT_DIR/fullchain.pem" "$NEW_CERT_DIR/privkey.pem" | sha256sum | awk '{print $1}')

#이전 해시 불러오기
if &#91; -f "$CHECKSUM_FILE" &#93;; then
    old_checksum=$(cat "$CHECKSUM_FILE")
else
    old_checksum=""
fi

#비교 및 처리
if &#91; "$current_checksum" != "$old_checksum" &#93;; then
    echo "인증서 변화 감지됨"

    cp -f "$NEW_CERT_DIR/cert.pem" "$CERT_DIR/cert.pem"
    cp -f "$NEW_CERT_DIR/fullchain.pem" "$CERT_DIR/fullchain.pem"
    cp -f "$NEW_CERT_DIR/privkey.pem" "$CERT_DIR/privkey.pem"

    #기본 권한으로 변경
    chmod 400 "$CERT_DIR"/*

    #서비스 재시작
    synosystemctl reload nginx

    # 새 해시값 저장
    echo "$current_checksum" > "$CHECKSUM_FILE"
else
    echo "인증서 변화 없음"
fi</textarea></pre><span class="cbp-btn-text">Copy</span></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">#!/bin/bash</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">#기본 인증서 디렉토리 ID 읽기, 디렉터리 지정</span></span>
<span class="line"><span style="color: #D8DEE9">DEFAULT_ID</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">$(</span><span style="color: #88C0D0">cat</span><span style="color: #A3BE8C"> /usr/syno/etc/certificate/_archive/DEFAULT</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9">CERT_DIR</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">/usr/syno/etc/certificate/_archive/</span><span style="color: #81A1C1">${</span><span style="color: #D8DEE9">DEFAULT_ID</span><span style="color: #81A1C1">}</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9">NEW_CERT_DIR</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">인증서 저장위치</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9">CHECKSUM_FILE</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">${</span><span style="color: #D8DEE9">NEW_CERT_DIR</span><span style="color: #81A1C1">}</span><span style="color: #A3BE8C">/.cert_checksum</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">#인증서 해시 계산</span></span>
<span class="line"><span style="color: #D8DEE9">current_checksum</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">$(</span><span style="color: #88C0D0">sha256sum</span><span style="color: #A3BE8C"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$NEW_CERT_DIR</span><span style="color: #A3BE8C">/cert.pem</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$NEW_CERT_DIR</span><span style="color: #A3BE8C">/fullchain.pem</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$NEW_CERT_DIR</span><span style="color: #A3BE8C">/privkey.pem</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C"> </span><span style="color: #81A1C1">|</span><span style="color: #A3BE8C"> </span><span style="color: #88C0D0">sha256sum</span><span style="color: #A3BE8C"> </span><span style="color: #81A1C1">|</span><span style="color: #A3BE8C"> </span><span style="color: #88C0D0">awk</span><span style="color: #A3BE8C"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">{print $1}</span><span style="color: #ECEFF4">&#39;)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">#이전 해시 불러오기</span></span>
<span class="line"><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#91;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-f</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$CHECKSUM_FILE</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#93;</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">then</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">old_checksum</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">$(</span><span style="color: #88C0D0">cat</span><span style="color: #A3BE8C"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$CHECKSUM_FILE</span><span style="color: #ECEFF4">&quot;)</span></span>
<span class="line"><span style="color: #81A1C1">else</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">old_checksum</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;&quot;</span></span>
<span class="line"><span style="color: #81A1C1">fi</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">#비교 및 처리</span></span>
<span class="line"><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#91;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$current_checksum</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$old_checksum</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#93;</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">then</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">echo</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">인증서 변화 감지됨</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">cp</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">-f</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$NEW_CERT_DIR</span><span style="color: #A3BE8C">/cert.pem</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$CERT_DIR</span><span style="color: #A3BE8C">/cert.pem</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">cp</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">-f</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$NEW_CERT_DIR</span><span style="color: #A3BE8C">/fullchain.pem</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$CERT_DIR</span><span style="color: #A3BE8C">/fullchain.pem</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">cp</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">-f</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$NEW_CERT_DIR</span><span style="color: #A3BE8C">/privkey.pem</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$CERT_DIR</span><span style="color: #A3BE8C">/privkey.pem</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #616E88">#기본 권한으로 변경</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">chmod</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">400</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$CERT_DIR</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">/</span><span style="color: #81A1C1">*</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #616E88">#서비스 재시작</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">synosystemctl</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">reload</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">nginx</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #616E88"># 새 해시값 저장</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">echo</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$current_checksum</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9">$CHECKSUM_FILE</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #81A1C1">else</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">echo</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">인증서 변화 없음</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #81A1C1">fi</span></span></code></pre><span style="display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#2e3440ff;color:#c8d0e0;font-size:12px;line-height:1;position:relative">Bash</span></div>



<p>다음으로 시놀로지 작업 스케줄러에 등록할 스크립트를 만들었습니다.</p>



<p>스크립트가 실행되면 인증서 파일 3개의 해시를 추출하고 그 3개의 해시를 다시 해시하여 하나의 파일이라도 변화가 생기면 감지 되도록 되어있습니다.</p>



<p>변화가 감지되면 시놀로지 기본 인증서 디렉터리에 인증서를 덮어쓰고, 권한을 기본권한대로 400으로 설정한 뒤 시놀로지 웹 서비스를 재시작하게 되어있습니다.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="gb-headline gb-headline-d622851d gb-headline-text">결과 확인</h2>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="531" height="585" data-id="677" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.23.48.png" alt="" class="wp-image-677" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.23.48.png 531w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.23.48-272x300.png 272w" sizes="auto, (max-width: 531px) 100vw, 531px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="531" height="581" data-id="675" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.23.56.png" alt="" class="wp-image-675" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.23.56.png 531w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.23.56-274x300.png 274w" sizes="auto, (max-width: 531px) 100vw, 531px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="530" height="582" data-id="676" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.24.06.png" alt="" class="wp-image-676" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.24.06.png 530w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.24.06-273x300.png 273w" sizes="auto, (max-width: 530px) 100vw, 530px" /></figure>
</figure>



<p>시놀로지 작업 스케줄에 앞에서 생성한 업데이트 스크립트를 등록하면 됩니다.</p>



<p>시스템 파일을 수정해야 하기 때문에 사용자는 <strong>root</strong>로 지정해주셔야 하고, 스케줄은 편하신대로 (저는 매일), 그리고 실행 명령에는 생성한 스크립트를 지정해주면 됩니다.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="928" height="525" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.41.07.png" alt="" class="wp-image-678" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.41.07.png 928w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.41.07-300x170.png 300w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.41.07-768x434.png 768w" sizes="auto, (max-width: 928px) 100vw, 928px" /></figure>



<p>서버측에서 스크립트를 실행했을때 결과. 문제없이 인증서 파일들이 전송되었습니다.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="928" height="525" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.50.08.png" alt="" class="wp-image-679" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.50.08.png 928w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.50.08-300x170.png 300w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.50.08-768x434.png 768w" sizes="auto, (max-width: 928px) 100vw, 928px" /></figure>



<p>시놀로지에서 스크립트를 실행했을때의 결과. 별 다른 오류 없이 전송이 되었고, 서비스 재시작도 문제 없이 완료.</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="493" src="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.49.48-1024x493.png" alt="" class="wp-image-680" srcset="https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.49.48-1024x493.png 1024w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.49.48-300x144.png 300w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.49.48-768x370.png 768w, https://blog.kisaragistation.com/wp-content/uploads/2025/08/스크린샷-2025-08-05-오후-2.49.48.png 1155w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>이제 DSM에서 인증서를 확인 해보면 정상적으로 교체된걸 확인할 수 있습니다.</p>



<p>끝.</p>
<div class="korea-sns"><div class="korea-sns-post korea-sns-pos-right"><div class="korea-sns-button korea-sns-facebook" OnClick="SendSNS('facebook', '시놀로지 기본 인증서 외부 인증서로 자동 교체 하기 - 뚱이의 잡동사니', 'https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/', '', 0);"  style="background-image:url('https://blog.kisaragistation.com/wp-content/plugins/korea-sns/icons/facebook.png');"></div><div class="korea-sns-button korea-sns-twitter" OnClick="SendSNS('twitter', '시놀로지 기본 인증서 외부 인증서로 자동 교체 하기 - 뚱이의 잡동사니', 'https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/', '', 0);"  style="background-image:url('https://blog.kisaragistation.com/wp-content/plugins/korea-sns/icons/twitter.png');"></div><div class="korea-sns-button korea-sns-telegram" OnClick="SendSNS('telegram', '시놀로지 기본 인증서 외부 인증서로 자동 교체 하기 - 뚱이의 잡동사니', 'https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/', '', 0);"  style="background-image:url('https://blog.kisaragistation.com/wp-content/plugins/korea-sns/icons/telegram.png');"></div><div class="korea-sns-button korea-sns-naverblog" OnClick="SendSNS('naverblog', '시놀로지 기본 인증서 외부 인증서로 자동 교체 하기 - 뚱이의 잡동사니', 'https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/', '', 0);"  style="background-image:url('https://blog.kisaragistation.com/wp-content/plugins/korea-sns/icons/naverblog.png');"></div></div><div style="clear:both;"></div></div><p>게시물 <a href="https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/">시놀로지 기본 인증서 외부 인증서로 자동 교체 하기</a>이 <a href="https://blog.kisaragistation.com">뚱이의 잡동사니</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kisaragistation.com/670/%ec%8b%9c%eb%86%80%eb%a1%9c%ec%a7%80-%ea%b8%b0%eb%b3%b8-%ec%9d%b8%ec%a6%9d%ec%84%9c-%ec%99%b8%eb%b6%80-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a1%9c-%ec%9e%90%eb%8f%99-%ea%b5%90%ec%b2%b4-%ed%95%98%ea%b8%b0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">670</post-id>	</item>
	</channel>
</rss>
