DSM 5.x 또는 그 이하 버전에서 Lets’ Encrypt SSL 인증서를 발급받고 자동 갱신하는 방법을 설명합니다.
참고로 DSM 6.0부터는 DSM 자체에 Lets’ Encrypt SSL 인증서를 발급받고 갱신하는 기능이 포함되어 있습니다.
공식 제공하는 Let’s Encrypt 클라이언트는 DSM 5.x에서는 정상 동작하지 않습니다. 그래서 다른 시스템을 이용하여 발급받아야 되는데요.. Lets’ Encrypt 인증서의 유효 기간이 90일이라서 만료 기간에 맞추어 인증서를 갱신하고 나스에 복사하는 작업이 쉽지 않습니다.
이 팁을 따라 하면 최초 한 번만 설치해두면 이후 자동으로 인증서를 갱신해줍니다.
∗ 2018년부터 와일드카드 인증서를 지원합니다. 아래 글을 참고바랍니다.
https://isulnara.com/wp/archives/1581
1. 준비사항
- Bootstrap – 여기서는 따로 설명하지 않겠습니다. 검색하여 각 모델에 맞는 거로 직접 설치 바랍니다.
- Telnet or SSH 활성화 – DSM 관리자 페이지에서 활성화합니다.
- 인증서를 발급받고자 하는 도메인(서브 도메인 포함)으로 웹 접속했을 때 나스로 연결되어야 됩니다. (웹브라우저로 http://도메인 으로 접속했을 때 나스의 웹서비스로 연결되어야 됩니다.)
2. 각종 툴/라이브러리 설치
TELNET이나 SSH 클라이언트로 터미널에 root 사용자로 접속하여 아래 명령을 내립니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
root@dsm:~# ipkg install libcurl openssl grep mktemp bash git Installing libcurl (7.24.0-3) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/libcurl_7.24.0-3_i686.ipk. Installing openssl (1.0.2h-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/openssl_1.0.2h-1_i686.ipk. Installing cacerts (20160916-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/cacerts_20160916-1_i686.ipk. Installing zlib (1.2.8-2) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/zlib_1.2.8-2_i686.ipk. Package openssl (1.0.2h-1) installed in /opt/ is up to date. Installing grep (2.12-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/grep_2.12-1_i686.ipk. Installing pcre (8.36-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/pcre_8.36-1_i686.ipk. Installing libstdc++ (6.0.21-6) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/libstdc++_6.0.21-6_i686.ipk. Installing mktemp (1.7-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/mktemp_1.7-1_i686.ipk. Installing bash (4.3.42-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/bash_4.3.42-1_i686.ipk. Installing readline (6.1-2) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/readline_6.1-2_i686.ipk. Installing ncurses (5.7-5) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/ncurses_5.7-5_i686.ipk. Installing ncurses-base (5.7-5) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/ncurses-base_5.7-5_i686.ipk. Installing gettext (0.19.8.1-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/gettext_0.19.8.1-1_i686.ipk. Installing libintl (0.19.8.1-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/libintl_0.19.8.1-1_i686.ipk. Installing libunistring (0.9.4-2) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/libunistring_0.9.4-2_i686.ipk. Installing git (2.9.3-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/git_2.9.3-1_i686.ipk. package git suggests installing git-manpages Installing diffutils (3.1-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/diffutils_3.1-1_i686.ipk. Installing rcs (5.7-2) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/rcs_5.7-2_i686.ipk. Installing expat (2.2.0-1) on /opt/. Downloading http://ipkg.nslu2-linux.org/optware-ng/buildroot-i686/expat_2.2.0-1_i686.ipk. Configuring ncurses-base. Configuring libunistring. Configuring diffutils. update-alternatives: Linking //opt/bin/cmp to /opt/bin/diffutils-cmp update-alternatives: Linking //opt/bin/diff to /opt/bin/diffutils-diff update-alternatives: Linking //opt/bin/diff3 to /opt/bin/diffutils-diff3 update-alternatives: Linking //opt/bin/sdiff to /opt/bin/diffutils-sdiff Configuring ncurses. update-alternatives: Linking //opt/bin/clear to /opt/bin/ncurses-clear Configuring readline. Configuring libintl. Configuring gettext. Configuring bash. Configuring cacerts. Configuring openssl. Configuring zlib. Configuring libcurl. Configuring libstdc++. Configuring pcre. Configuring grep. update-alternatives: Linking //opt/bin/grep to /opt/bin/grep-grep update-alternatives: Linking //opt/bin/egrep to /opt/bin/grep-egrep update-alternatives: Linking //opt/bin/fgrep to /opt/bin/grep-fgrep Configuring rcs. Configuring expat. Configuring git. Configuring mktemp. update-alternatives: Linking //opt/bin/mktemp to /opt/bin/mktemp-mktemp |
3. dehydrated 설치
여기서는 /volume1/system 폴더에 설치합니다. 각자 원하는 폴더에 설치하면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
root@dsm:~# mkdir /volume1/system root@dsm:~# cd /volume1/system root@dsm:/volume1/system# git clone https://github.com/lukas2511/dehydrated Cloning into 'dehydrated'... remote: Counting objects: 1271, done. remote: Total 1271 (delta 0), reused 0 (delta 0), pack-reused 1271 Receiving objects: 100% (1271/1271), 357.60 KiB | 143.00 KiB/s, done. Resolving deltas: 100% (773/773), done. Checking connectivity... done root@dsm:/volume1/system# cd dehydrated root@dsm:/volume1/system/dehydrated# ll total 76 drwxr-xr-x 1 root root 170 Nov 17 23:39 . drwxr-xr-x 1 root root 20 Nov 17 23:39 .. -rw-r--r-- 1 root root 1898 Nov 17 23:39 CHANGELOG -rwxr-xr-x 1 root root 40821 Nov 17 23:39 dehydrated drwxr-xr-x 1 root root 326 Nov 17 23:39 docs drwxr-xr-x 1 root root 138 Nov 17 23:39 .git -rw-r--r-- 1 root root 89 Nov 17 23:39 .gitignore -rwxr-xr-x 1 root root 1938 Nov 17 23:39 letsencrypt.sh -rw-r--r-- 1 root root 1085 Nov 17 23:39 LICENSE -rw-r--r-- 1 root root 3823 Nov 17 23:39 README.md -rwxr-xr-x 1 root root 9046 Nov 17 23:39 test.sh -rw-r--r-- 1 root root 107 Nov 17 23:39 .travis.yml root@dsm:/volume1/system/dehydrated# mkdir -p /var/www/dehydrated |
4. 도메인 설정
domains.txt를 아래와 같이 생성합니다.
각 도메인은 한 줄에 하나씩 입력합니다. 서브 도메인은 한 줄에 공백(스페이스)으로 구분하여 입력합니다.
1 2 3 4 5 |
mydomain.com a1.mydomain.com a2.mydomain.com a3.mydomain.com abc.com a1.abc.com a2.abc.com |
5. 웹서버 설정
/etc/httpd/conf/extra/dehydrated.conf 파일을 아래와 같은 내용으로 생성합니다.
1 2 3 4 5 6 7 |
Alias /.well-known/acme-challenge /var/www/dehydrated <Directory /var/www/dehydrated> Order allow,deny Allow from all </Directory> |
그리고, /etc/httpd/conf/httpd.conf-user 파일의 제일 끝에 아래와 같이 추가합니다.
1 2 3 |
Include conf/extra/dehydrated.conf |
DSM 관리자 페이지에서 웹 서비스를 재시작하거나 아래 명령으로 재시작합니다.
1 2 3 |
root@dsm:/volume1/system/dehydrated# synoservicectl --restart httpd-user |
6. 인증서 발급
아래 명령으로 인증서를 발급받습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
root@dsm:/volume1/system/dehydrated# ./dehydrated -c # # !! WARNING !! No main config file found, using default config! # Processing mydomain.com with alternative names: a1.mydomain.com a2.mydomain.com a3.mydomain.com + Signing domains... + Creating new directory /volume1/system/dehydrated/certs/mydomain.com ... + Generating private key... + Generating signing request... + Requesting challenge for mydomain.com... + Requesting challenge for a1.mydomain.com... + Requesting challenge for a2.mydomain.com... + Requesting challenge for a3.mydomain.com... + Responding to challenge for mydomain.com... + Challenge is valid! + Responding to challenge for a1.mydomain.com... + Challenge is valid! + Responding to challenge for a2.mydomain.com... + Challenge is valid! + Responding to challenge for a3.mydomain.com... + Challenge is valid! + Requesting certificate... + Checking certificate... + Done! + Creating fullchain.pem... + Done! |
이제 인증서가 “certs/도메인” 폴더에 생성되었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
root@dsm:/volume1/system/dehydrated# ls -la certs/mydomain.com/ total 36 drwx------ 2 root root 4096 2016-11-07 18:27 . drwx------ 3 root root 4096 2016-11-07 18:21 .. -rw------- 1 root root 1834 2016-11-07 18:22 cert-1478510518.csr -rw------- 1 root root 2289 2016-11-07 18:22 cert-1478510518.pem lrwxrwxrwx 1 root root 19 2016-11-07 18:22 cert.csr -> cert-1478510518.csr lrwxrwxrwx 1 root root 19 2016-11-07 18:22 cert.pem -> cert-1478510518.pem -rw------- 1 root root 1647 2016-11-07 18:22 chain-1478510518.pem lrwxrwxrwx 1 root root 20 2016-11-07 18:22 chain.pem -> chain-1478510518.pem -rw------- 1 root root 3936 2016-11-07 18:22 fullchain-1478510518.pem lrwxrwxrwx 1 root root 24 2016-11-07 18:22 fullchain.pem -> fullchain-1478510518.pem -rw-r--r-- 1 root root 7179 2016-11-07 18:27 mydomain.com.pem -rw------- 1 root root 3243 2016-11-07 18:22 privkey-1478510518.pem lrwxrwxrwx 1 root root 22 2016-11-07 18:22 privkey.pem -> privkey-1478510518.pem |
아파치(apache) 가상호스트 설정 파일에 인증서 적용
/etc/httpd/sites-enabled-user/httpd-ssl-vhost.conf-user에 아래와 같이 설정합니다. (도메인은 자신의 환경에 맞게 변경)
1 2 3 4 5 6 7 8 9 10 |
<VirtualHost *:443> ... SSLCertificateFile /volume1/system/dehydrated/certs/mydomain.com/cert.pem SSLCertificateKeyFile /volume1/system/dehydrated/certs/mydomain.com/privkey.pem SSLCertificateChainFile /volume1/system/dehydrated/certs/mydomain.com/chain.pem SSLCACertificateFile /volume1/system/dehydrated/certs/mydomain.com/fullchain.pem ... </VirtualHost> |
DSM 관리자 페이지에서 웹 서비스를 재시작하거나 아래 명령으로 재시작합니다.
1 2 3 |
root@dsm:/volume1/system/dehydrated# synoservicectl --restart httpd-user |
HAProxy 설정에 인증서 적용
아래 과정은 HAProxy에 SSL 인증서를 적용하기 위한 과정으로 아파치를 위한 설정에서는 필요치 않습니다.
아래 명령으로 fullchain.pem(server cert + intermediates) 파일과 privkey.pem 파일을 하나로 만들어 줍니다.
1 2 3 |
root@dsm:/volume1/system/dehydrated# cat certs/mydomain.com/fullchain.pem certs/mydomain.com/privkey.pem > certs/mydomain.com/mydomain.com.pem |
Frontends의 https 설정 중 Binds를 아래와 같이 수정합니다.
1 2 3 |
:5443 ssl crt /volume1/system/dehydrated/certs/mydomain.com/mydomain.com.pem ciphers AESGCM+AES128:AES128:AESGCM+AES256:AES256:RSA+RC4+SHA:!RSA+AES:!CAMELLIA:!aECDH:!3DES:!DSS:!PSK:!SRP:!aNULL no-sslv3 |
7. 자동 갱신 설정
아래와 같이 /volume1/system/dehydrated/renew_certs.sh 파일을 만들어 줍니다. (DEHYDRATED_PATH와 DOMAIN은 자신의 환경에 맞게 수정)
1 2 3 4 5 6 7 8 9 |
#!/bin/sh DEHYDRATED_PATH=/volume1/system/dehydrated DOMAIN=mydomain.com ${DEHYDRATED_PATH}/dehydrated -c cat ${DEHYDRATED_PATH}/certs/${DOMAIN}/fullchain.pem ${DEHYDRATED_PATH}/certs/${DOMAIN}/privkey.pem > ${DEHYDRATED_PATH}/certs/${DOMAIN}/${DOMAIN}.pem |
아래 명령을 내려 실행 권한을 주고, 실제 동작하는지 확인합니다.
1 2 3 4 5 6 7 8 9 10 11 |
root@dsm:/volume1/system/dehydrated# chmod 755 renew_certs.sh root@dsm:/volume1/system/dehydrated# ./renew_certs.sh # # !! WARNING !! No main config file found, using default config! # Processing mydomain.com with alternative names: a1.mydomain.com a2.mydomain.com a3.mydomain.com + Checking domain name(s) of existing cert... unchanged. + Checking expire date of existing cert... + Valid till Feb 15 15:02:00 2017 GMT (Longer than 30 days). Skipping renew! |
위와 같이 30일 이상 남았다고 갱신을 중단한다는 메시지가 보이면 제대로 동작하는 것입니다.
작업 스케줄러 등록
이제 DSM 관리자 페이지의 작업 스케줄러에 아래와 같이 등록하면 됩니다.
실행 명령에는 사용자 정의 스크립트 /volume1/system/dehydrated/renew_certs.sh를 입력하고,
스케줄 설정은 “일요일”마다 실행되게 설정하였습니다. 위에서 만든 renew_certs.sh를 실행하면 인증서 만료 기간이 30일 이상 남았다고 나오고 중지되는 것이 보여 스케줄 주기는 30일 이내로 설정하였습니다.
이제 모든 설정이 끝났습니다.
* 본문 중 /volume1/system과 mydomain.com은 각자의 환경에 맞게 수정하여 사용하기 바랍니다.
* 작업 스케줄러에 의한 갱신은 인증서가 아직 만료 기간이 되지 않아서 제대로 동작하는지 확인하지 못하였습니다. 나중에 댓글로 동작 여부를 남기도록 하겠습니다. 이 팁을 적용하신 분들께서는 동작 여부를 댓글로 알려주시면 고맙겠습니다.
링크
모든것을 다 따라했는데 링크에 있는 사진과 같이 오류가 납니다…
왜 이러는 걸까요…ㅠㅠ
tr 프로그램이 없어서 발생하는 에러입니다.
아래 명령을 내린 후에 진행해보세요.
ipkg install textutils
[…] 링크 […]
죄송하지만 한번더 도와 주실수 있으십니까…?
링크
우분투로 연결하는것을 따라했을때도 연결오류가 나더니 nas기기 자체로 하는데 똑같은 오류가 나는 것 같습니다…
지금 연결하려는 해당도메인 estines.co.kr 은 제가 따로 사용하고있는 xpenology에 붙어있는 dns이며 제가 따로 ssl을 구입하고 xpenology에 인증서를 붙였었습니다.
지금 작업을 하는 nas는 정식 synology이며 해당 도메인hj.estines.co.kr 은 회사 홈페이지로 만드려는것입니다.
지금 이렇게 작업을 하려는데 어째서 hj.estines.co.kr로 letsencrypt의 ssl 인증서가 발급이 안되는것입니까…?
혹시 이유를 아신다면 어찌 해결해야할지 알려주시면 정말 감사합니다.
언제든지 질문하셔도 됩니다.
확인해보니 http://hj.estines.co.kr/ 로 접속이 안되네요.
인증서 발급 시 letsencrypt에서 hj.estines.co.kr 도메인을 실제 소유하고 있는지 확인하기 위하여 hj.estines.co.kr로 접속을 시도합니다.
hj.estines.co.kr이 본문에 설명한 웹서버로 연결이 되어야 됩니다. 즉 hj.estines.co.kr 도메인에 대한 아이피를 웹서버가 구동 중인 나스와 같은 네트워크의 공인 아이피로 설정되어야 됩니다.
아….겨우겨우 끝마쳤습니다.
포스팅을 제 블로그로 링크를 따가도 될까요…?
나중에 다른 부분에 적용할때 포스팅이 필요할거같아서요.
또한 자동갱신까지 완료를 하였네요.
예.. 문제없습니다. 성공 축하드립니다
[…] Synology NAS DSM 5.x에서 Lets’ Encrypt SSL 인증서 발급/자동 갱신 […]
안녕하세요. 따라하던 중에 인증서 받기위해 ./dehydrated -c를 하면 다음과 같은 오류가 뜨네요..
“error”: {
“type”: “urn:acme:error:unauthorized”,
“detail”: “Invalid response from http://도메인/.well-known/acme-challenge/IKFOuDEDr984de9BcrMn6RDgSMW4rD4pCKVUeqTJtUI: \”\u003c!doctype html \u003e\r\n\u003c!–[if IE 8]\u003e \u003chtml class=\”ie8\” lang=\”en\”\u003e \u003c![endif]–\u003e\r\n\u003c!–[if IE 9]\u003e \u003chtml class=\”ie9\” lang=\”en\”\u003e \u003c!\””,
“status”: 403
},
도메인은 제 나스 도메인이고요 현재 웹서버 열어서 워드프레스 운영중입니다.
web폴더에 sub폴더 만들어서 도메인 운영중입니다.
무언가 설정이 따로 필요할것 같은데 모르겠네요
1. 해당 도메인으로 접속하면 나스의 웹서비스로 연결되는 상태인가요?
– 해당 도메인(서브도메인 포함)이 나스가 있는 곳의 공인 아이피로 설정되어 있는지, 80포트 포워딩 상태 등 점검
2. “5. 웹서버 설정” 후 웹 서비스가 재시작된 상태인가요?
재시작된 상태인데도 안된다면 5번에서 파일을 아래 파일로 생성(디렉토리 없으면 생성) 후 웹서비스를 재시작하고 해보세요.
/etc/httpd/conf/sites-enabled-user/dehydrated.conf
답변 감사합니다.
1.해당 도메인으로 연결하면 워드프레스 사이트로 연결됩니다. web 폴더에 .htaccess 파일이 워드프레스가 설치된 폴더로 리다이렉트 해줍니다.
2.재시작하고 나스자체를 재시작도 해봤습니다.
말씀해주신대로 폴더만들고 파일 추가해봤는데도 동일한 에러가 나오네요.
터미널에서 아래 두 명령을 내려서 텍스트 파일을 하나 만들시고
pwd > /var/www/dehydrated/index.html
chmod 644 /var/www/dehydrated/index.html
웹에서 아래 URL로 접속해서 내용이 표시되는지 확인 바랍니다.
http://도메인/.well-known/acme-challenge/
위와 같이 접속해서 터미널에서 pwd 명령 내린 경로가 표시되어야 웹 서버 설정이 제대로된 것입니다.
페이지를 찾을 수 없다고 나오네요.
추가적으로 손 볼 방법이 있을까요?
DSM 버전과 아래 코드를 추가한 파일명을 알려주세요.
Alias /.well-known/acme-challenge /var/www/dehydrated
DSM 버전 : DSM 5.2-5644 Update 5
/etc/httpd/conf/extra/httpd-userdir.conf-user
/etc/httpd/conf/site-enabled-user/dehydrated.conf
두 곳에 추가 해줬습니다.
[제어판 – 웹 서비스 – 개인 웹사이트 활성화]에 체크하시고, 웹서비스 재시작 후 시도바랍니다.
그리고 웹 서비스 포트는 몇 번으로 구동 중인지요?
/etc/httpd/conf/extra/httpd-userdir.conf-user는 개인 웹사이트가 활성화 되어야 사용되는 것 같고,
/etc/httpd/conf/site-enabled-user/dehydrated.conf는 웹서비스가 80으로 동작되어야 사용되는 것 같습니다.
개인 웹사이트 활성화를 하니 되네요!!
근데 활성화하지 않고 사용하는 방법은 없을까요?
웹서비스 포트는 80번 사용중 입니다.
개인웹사이트 활성화하지 않고 하려면
/etc/httpd/conf/httpd.conf-user 파일의 제일 끝에
Include conf/extra/dehydrated.conf 를 추가하시고,
이전에 만들어둔 아래 파일을
/etc/httpd/conf/sites-enabled-user/dehydrated.conf
다음 위치에 이동시켜 주세요.
/etc/httpd/conf/extra/
본문 수정하였으니 참고 바랍니다.
말씀해주신대로 하니 개인웹사이트 비활성화해도 되네요.
근데 제가 domain.txt에
도메인 http://www.도메인 xyz.도메인
이렇게 3가지를 입력했는데
xyz에서 동일한 에러가 발생합니다.
기본 도메인은 잘 되네요.
xyz.도메인도 주소로 접속하면 잘 되는 상황입니다.
xyz.도메인의 아이피가 나스 또는 나스가 연결된 공유기의 공인 아이피로 설정되어 있나요?
포워딩 같은 걸로 처리되어 있으면 안됩니다.
그리고, 아래 페이지가 열려야 됩니다.
http://xyz.도메인/.well-known/acme-challenge/
xyz는 시놀로지 웹서비스에서 가상호스트에서 설정하여 사용중인데 그럼 안되나요?
제가 추가를 잘 못했었습니다. 제대로 하니까 오류 내용이 달라졌습니다.
“error”: {
“type”: “urn:acme:error:connection”,
“detail”: “Could not connect to xyz.도메인”,
“status”: 400
},
연결이 안된다는 것 같은데, 주소창에 주소치면 접속은 잘 되는 상태입니다.
/etc/httpd/conf/httpd.conf-user 파일의 제일 끝에 Include conf/extra/dehydrated.conf 를 추가하니까
웹접속이 안되네요,
웹서버 재부팅도 안됩니다.
XNAS> synoservicectl –restart httpd-user
httpd-user failed to restart… error unknow [0x0000 (null):0]
혹시나해서 위에 Include부분을 주석처리 했더니 위 증상은 사라지네요.
dehydrated.conf 설정 내용을 올려주세요. 뭔가 오류가 있는듯 합니다
문법 오류 확인하는 방법이 있는데요. 제가 식사하러 와서 사무실 들어가면 알려드리겠습니다
dehydrated.conf 내용 입니다.
헌데 이상한게.. dehydrated.conf를 /etc/httpd/conf/extra에 넣고
/etc/httpd/conf/httpd.conf-user 에 Include conf/extra/dehydrated.conf 주석처리 된 상태
/etc/httpd/conf/extra/httpd-userdir.conf-user 에
내용 지운 상태인데 작동합니다.
그러니까 현재 상태는
dehydrated.conf를 /etc/httpd/conf/extra에 넣어둔 상태인데 잘 됩니다.
그리고 xyz.도메인도 인증받으려면 공식 ip가 할당되어 있어야 한다는 말씀이죠?
설정 파일 문법 검사는 아래 명령으로 할 수 있습니다.
httpd -t -f /etc/httpd/conf/httpd.conf-user
/etc/httpd/conf/httpd.conf-user에 Include conf/extra/dehydrated.conf 추가하신 후
위 명령으로 테스트해보면 됩니다.
/etc/httpd/conf/httpd.conf-user에 Include하지 않고 dehydrated.conf 의 내용을 직접 넣어도 됩니다.
간혹 DSM 업데이트하면 /etc/httpd/conf/httpd.conf-user가 초기화 되는 경우가 있어서 따로 파일에 저장해두고 간단히 Include하는 방법으로 설명 드린 것입니다.
xyz.도메인도 공인 아이피 또는 cname으로 최상위도메인으로 설정되어 있어야 됩니다. 도메인의 DNS 관리하는 곳에서 설정하면 됩니다.
인증서 받고 적용후 재부팅해봤는데요,
웹스테이션 제어판 보안 인증서 부분에보면 제가 전에 인증을 startcom에서 받았었는데 이 인증서 정보가 계속 보이네요.
적용이 안된건가요?
전 인증서를 DSM에서 처리하지 않고, 앞 단에 HAProxy를 두어서 처리하고 있습니다.
https://isulnara.com/wp/archives/1362
그래서 본문의 “아파치(apache) 가상호스트 설정 파일에 인증서 적용”은 실제 사용하지는 않고 있습니다.
DSM 제어판의 가상호스트 기능을 사용하지 않고 직접 가상호스트 설정 파일을 만들어서 테스트만 진행했었습니다.
실제 적용이 된 것인지 확인하려면 https://도메인으로 접속 후 URL 왼쪽의 자물쇠 아이콘을 눌러 인증서 정보를 조회해보면 됩니다.
제어판-보안-인증서 부분에 표시되는 인증서는 가져오기 해야 변경될 것입니다.
답변 감사드립니다.
헌데 Include 하면 계속 동일한 에러가 나네요. 문법검사해보니 Syntax Ok라고 뜨는거 봐서 문법은 문제없는 것 같습니다. Include 안 하고 내용을 직접 넣어도 동일한 에러가 납니다.
xyz 도메인이 이미 cname에 설정되어 있는데 왜안될까요..
너무 질문이 길어져서 죄송하네요.
synoservicectl --restart httpd-user
-가 2개입니다. -restart(x),
--restart(O)
네 — 2개로 했습니다.
아무래도 안되네요. 인증서는 웹스테이션에서 변경하였습니다.
네트워크 DSM 옵션에서 https을 키고 웹스테이션 접속하면 크롬에서는 안전하지 않다고 뜨고, 익스에서는 아에 접속도 안되네요.
웹서비스에서 https 옵션에 체크하고 저장하면 실패가 뜨고요 ssh 상에서
synoservicectl –restart httpd-user 하면
httpd-user failed to restart… error unknow [0x0000 (null):0] 가 뜹니다.
물론 크롬이든 익스든 홈페이지 접속 불가고요
아무래도 SSL 적용은 접어야 하나 싶습니다..
아래 내용 보시고 HAProxy 패키지로 시도해보세요.
DSM의 웹서비스는 HTTP만 사용하고, HAProxy 패키지가 HTTPS로 처리해줍니다.
https://isulnara.com/wp/archives/1362
여기까지 결과를 정리해보자면
/etc/httpd/conf/extra/dehydrated.conf 에 아래 내용을 넣어 생성
인증서 받기 성공 후 제어판-보안-인증서-인증서 가져오기에서 개인키 prvkey.pem, 인증서 cert.pem, 중간인증서 생략. 하여 발급받은 인증서 적용되는 것까지 확인하였습니다.
본문에 나와있는 Include /conf/extra/dehydrated.conf 는 하지 않았습니다.
Include하면 웹서버가 정지하는 것 같습니다.
synoservicectl –restart httpd-user 실행시
httpd-user failed to restart… error unknow [0x0000 (null):0] 과 같은 오류가 발생합니다.
혹시 다른분에게 참고가 될까하여 적어봅니다.
친절하게 답변해주신 ISUL님 감사합니다!
잠시 후 HAProxy 셋팅해보고 또 찾아오겠습니다.
다른 방법으로는 DSM에서는 HTTPS 활성화 하지 마시고,
아래와 같은 내용으로 /etc/httpd/conf/extra/httpd-vhosts.conf로 만들고,
/etc/httpd/conf/httpd.conf-user 파일에 아래 내용을 추가하는 방법도 있습니다.
Include conf/extra/httpd-vhosts.conf
DSM 제어판에서 가상호스트를 관리하지 않고 설정 파일에서 직접 관리하는 방식입니다.
이 방식은 xyz.도메인 같은 경우에 사용할 수 있는 방식인가요?
헌데 좀 전에 xyz도메인도 성공했습니다.
안됐던 이유가 DNS 사이트에서 잠깐 수정했었는데 그게 반영되기까지 시간이 좀 걸렸던것 같습니다.
도메인에 상관없이 사용할 수 있는 방식입니다.
DSM의 제어판에서 가상호스트를 관리하지 않고, 직접 설정 파일로 관리하는 방식입니다.
DSM에서 처리하면 에러가 난다고 해서 알려드렸습니다.
편한 방식으로 사용하면 됩니다.
/etc/httpd/conf/extra/dehydrated.conf 파일을 생성해두고, Include하지 않으면 저 파일은 사용되지 않습니다.
뭔가 설정에 오류가 있는 듯합니다.
dehydrated.conf의 내용이 다른 위치에 중복으로 들어가 있는 것은 아니죠?
혹시나해서 수정한 날짜로 정렬후 파일에 저 내용이 중복으로 들어가있나 찾아봤습니다.
헌데 찾을수 없었습니다.
저도 그 점이 이상하더군요..
아..
지금 웹스테이션 상에 인증서 이름이 앞에 Fake가 뜨길래 몬가 했는데, 이게 제가 테스트용으로 받아서 그런것 같습니다.
인증시도 5번이상하면 1시간정도 정지먹는것 같아서 dehyrated config 스크립트에 다음과 같이 설정했었거든요
CA=”https://acme-staging.api.letsencrypt.org/directory”
CA_TERMS=”https://acme-staging.api.letsencrypt.org/terms”
위와 같이 설정하면 인증시도를 여러번해도 테스트가 가능하다고 구글에서 보고 그렇게 했습니다.
그래서 지금 default 셋팅하고 인증서 받기 시도했는데 처음과 똑같은 오류가 나네요;;;
위의 테스트 경로로하면 인증서가 받아지는데, default 경로로하면 에러가 납니다.
테스트 경로는 도메인 인증 검사를 진행하지 않나 봅니다.
/etc/httpd/conf/httpd.conf-user에서 /etc/httpd/conf/extra/dehydrated.conf를 include하지 않았기 때문에 에러가 나는 것이 정상입니다.
이전 댓글에서 pwd 명령으로 index.html 파일 생성했다면 아래 URL로 접속이 되는 상태에서 다음 단계를 진행해야 됩니다.
http://xyz.도메인/.well-known/acme-challenge/
먼저 웹 서비스 재시작 시 아래 오류부터 해결해야될 것 같습니다.
httpd-user failed to restart… error unknow [0x0000 (null):0]
이상하게 http://xyz.도메인/.well-known/acme-challenge/ 하면 다시 페이지를 찾을수 없다는 오류가 나네요.
다시 원점으로 돌아간 느낌입니다.
지금 헤놀로지에서 돌리고 있는데 그것과는 큰 연관이 없겠죠?
httpd-user failed to restart… error unknow [0x0000 (null):0] 이 오류도 구글링해도 딱히 안나오네요
저도 XPEnology에서 구동 중입니다.
혹시/etc/httpd/conf/httpd.conf-user 파일 다른 부분 수정한 거 있나요?
Include conf/extra/dehydrated.conf 를
/etc/httpd/conf/extra/httpd-userdir.conf-user 에 추가해주었더니
오류 안나고 재부팅도 잘되고 인증서 받기도 성공했습니다. ㅎㅎ
사용자 홈 활성화로 하신것이군요..
앗 그러네요..
근데
/etc/httpd/conf/httpd.conf-user에 include 추가하면
웹서버 재부팅할 때 httpd-user failed to restart… error unknow [0x0000 (null):0] 에러가 나고 웹서버도 멈추는데 구글링해도 안나오고 어찌해야 할지 모르겠네요 ㅜ
/etc/httpd/conf/httpd.conf-user 파일과 Include conf/extra/dehydrated.conf 파일을 메일(isul at isulnara.com)로 보내주시면 확인해보겠습니다.
설정 파일 모두 문제 없음을 확인하였습니다.
보내주신 설정 파일 2개를 제 시스템에 넣어서 테스트해보니 잘 동작됩니다.
감사합니다.
아무래도 제 헤놀로지가 문제인가 보네요..
안녕하세요.
SSL 인증서를 따라하던 중에 인증서 받기 위해 ./dehydrated -c를 하면 다음과 같은 오류가 발생하네요.~
“type”: “http-01”,
“status”: “invalid”,
“error”: {
“type”: “urn:acme:error:unauthorized”,
“detail”: “Invalid response from http://www.도메인.net/.well-known/acme-chall enge/SGUNxuU0Jvq3Xrl59oX_EY7uvJIP1uhE7qktA6nigEU: \”\u003c!DOCTYPE html\u003e\n\ u003chtml\u003e\n\u003chead\u003e\n \u003cmeta charset=\”utf-8\”\u003e\n \ u003ctitle id=\”a\”\u003eThe page is not found\u003c/title\u003e\n \u003cstyl e\u003ebody{display\””,
“status”: 403
},
“uri”: “https://acme-v01.api.letsencrypt.org/acme/challenge/b892nAdsX3mNvH3GKe WNNNvfcqLkrOrFCGdcel6Zomk/1098619479”,
“token”: “SGUNxuU0Jvq3Xrl59oX_EY7uvJIP1uhE7qktA6nigEU”,
“keyAuthorization”: “SGUNxuU0Jvq3Xrl59oX_EY7uvJIP1uhE7qktA6nigEU.NA8snwsEovwZP xa5Drb0o6IyFCDYBV53nJQxX7RH2nw”,
“validationRecord”: [
{
“url”: “http://www.도메인.net/.well-known/acme-challenge/SGUNxuU0Jvq3Xrl59o X_EY7uvJIP1uhE7qktA6nigEU”,
“hostname”: “www.도메인.net”,
“port”: “80”,
“addressesResolved”: [
“X.X.X.X”
],
“addressUsed”: “X.X.X.X”
}
]
})
도메인으로 접속을 하면 제 NAS의 웹서비스로 연결이 되는 상황이며, web폴더에 서브폴더만들어서 가상호스트로 설정 후 웹서비스를 사용중입니다.
웹서비스는 재시작 및 NAS 재부팅까지 모두 해 보았으나, 동일한 오류가 발생하네요.~
그리고 위에서 dehydrated.conf 파일은 아래에 2개에 모두 추가하였으며, 혹시나 하는 마음에 개인 웹사이트 활성화를 체크하고 웹서비스를 재기동 후에도 동일한 오류가 발생합니다.
NAS DSM 버전 : DSM 5.2-5967
/etc/httpd/conf/extra/httpd-userdir.conf-user
/etc/httpd/conf/site-enabled-user/dehydrated.conf
그리고 http://www.도메인.net/.well-known/acme-challenge 하면 페이지를 발견하지 못했다고 하면서 접속이 되지 않습니다.
httpd -t -f /etc/httpd/conf/httpd.conf-user 하면 Syntax OK 라고 나오네요..
뭔가를 더 설정을 더해야 하는건지 도움부탁드리겠습니다.
“5. 웹서버 설정”에 있는 그 위치(/etc/httpd/conf/extra/dehydrated.conf )에 넣어두고 해도 안되는지요?
그래도 안되면 가상호스트 설정 파일을 찾아서 아래 내용을 넣어주시고, 웹 서비스를 재시작하고 해보세요.
Alias /.well-known/acme-challenge /var/www/dehydrated
가상호스트 설정 파일이 정확히 어디에 위치해 있는지 모르겠네요. 아래 경로 확인해보세요.
/etc/httpd/sites-enabled-user/httpd-vhost.conf-user
안녕하세요.~
가상호스트 설정 파일은 알려주신 위치에 있어서 해당 설정 파일의
맨 윗줄에 Alias /.well-known/acme-challenge /var/www/dehydrated 를 삽입하였습니다.
웹서버 설정에 /etc/httpd/conf/extra/dehydrated.conf 에 파일이 있어도 동일한 증상이 발생하네요.?
위의 방법을 하여도 http://www.도메인.net/.well-known/acme-challenge 하면
” 죄송합니다. 찾고자 하는 페이지를 발견하지 못했습니다”라고 하네요.?
제가 해 볼 수 있는게 있을까요.?
일단 가상호스트를 설정하시 마시고, 해당 도메인으로 접속하면 나스의 기본 웹으로 연결되게 하고 테스트 해보세요.
안녕하세요 우선 글 감사합니다~!
잘 따라했고, 인증서 발급도 잘 되었습니다.
그런데 http는 잘 살아있는데 https로 접속하면
Chrome에서 ERR_SSL_PROTOCOL_ERROR 에러가 나네요
사파리에서는 서버로 보안 연결을 구축할 수 없기 때문에 페이지를 열 수 없다고 나오고요..
어떻게 해야 하나요 ㅠ
안녕하세요.
웹 서버에 SSL 인증서를 어떻게 설정했는지요?
상세한 정보가 필요합니다.
위에 댓글로 다니 안 달아지네요 ㅠ
/etc/httpd/sites-enabled-user/httpd-ssl-vhost.conf-user에 SSLEngine On 넣어주니까 되네요
그런데 해결하고 나니… Photo Station 로그인이 안되네요. 로그인 하면
“Changes are not saved because the connection has expired” 이런 에러 메시지를 띄우면서 로그인이 안되네요 ㅠ
https로 접속할 때만 그런 문제가 발생하는지요?
http 또는 아이피로 접속할 때도 동일 문제가 발생하는지 확인해보세요.
해당 에러 메시지로 찾아보니 루트 파티션의 공간이 부족해서 발생되었다는 얘기도 있고, admin 계정을 사용하면 문제 없다는 얘기도 있고 그렇네요.
위에 글은 제 능력으론 따라 하기가 머리가 아프네요;;;
초보적인 질문좀 드려 보겠습니다
시놀로지에 기본적으로 탑제되 있는 Let’s encrypt 인증서 등록에서 XXX.co.kr 의 ddns 등록된 도메인을 등록시 도메인을 ㅎ확인 할수 없다는 메세지가 출력되서 설치를 못하고 있습니다(잘등록해서 사용하던 도메인 입니다 기간 만료후 제인증이 안되서 다시 등록 하려니 말썽이군요) 이유를 알수 없을까요? 이것 때문에 리셋 할수도 없고 (리셋한다고 해결된다는 보장도 없구요;;;) 도움좀 부탁 드립니다;;;;
메인도메인당 let’s encrypt 서버로 호출수 제한이 있는 것으로 알고 있습니다. 여러명이 ddns 사용해서 인증서 이용할 경우 실패할겁니다.
아 그러면 몇일 지난뒤 인증이 될경우도 있겠군요?
그리고 dms 6.0 이상이면 위에 방법처럼 터미널이나 텔넷을 이용한 설치가 필요 없겠죠?
그런데 자동 갱신이 안돼더군요?
예. 기다렸다 해보세요. 아니면 ddns 제공사에 문의해보세요. dsm 6.0 이상이면 본문의 방법을 사용할 필요가 없습니다.
^^ 술님 덕분에 까맣던 눈앞이확 뜨이는듯 합니다 ~
감사합니다 좋은꿈 꾸세요
예전에 시도하려했다가 실패후 다시 시도중인데요 이번에는 6번의 인증서 발급란에서 자꾸 해당 사진과같이 나오며 진행이안됩니다…이거 왜이럴까요…
도매인에 적는건 *.제도메인 이렇게 적었는데 이렇게 적으면 안되는건가요?
https://drive.google.com/open?id=1dlLUT6EBR1XZklBPUw1XwfNkZGFMBjbB
안녕하세요.
사진을 보니 아래 명령을 실행하라고 되어 있네요.
최근에 뭔가 변경된 모양입니다.
./dehydrated --register --accept-terms
위 명령을 내린 후 아래 명령을 내려보세요.
./dehydrated -c
그래도 안되면 아래와 같이 해보세요.
./dehydrated -c --register --accept-terms
적어주신대로 했는데도 안됩니다…ㅠㅠ
그리고 놓친게있었습니다.
3번째에 dehydrated 설치시
ll 명령어를 누를때 사진의 마지막처럼 나왔습니다…
https://drive.google.com/open?id=1QbAPX3omuO33pbeRCtuo3ovB0hu809OQ
아 정상적으로 내려졌습니다.. 스펠링 틀렸네요 근데 다른문제가 발생했습니다 vi명령어로 domain.txt 를 만들었는데 찾을수없다고나옵니다…
늦은시간에 여러번 질문드려 죄송합니다…
경로 제대로 맞는지 확인해보시구요.
vi에서 내용 입력 후 :ws 명령으로 저장이 되었는지도 확인해보세요.
아니면 다른 곳에 텍스트 파일을 올려둔 후
wget http://192.168.0.10/domains.txt 같은 명령으로 내려 받아도 됩니다.
ll은 제가 alias 잡아둔 것일 수도 있습니다.
ls -la 명령과 동일합니다.
또는 alias ll=’ls -la’ 명령 내린 후에 ll을 사용할 수 있습니다.
도메인 파일 경로가 /dehydrated 맞나요…?
본문을 그대로 따라 했다면 아래 경로에 있어야 됩니다.
/volume1/system/dehydrated
즉 도메인 파일의 전체 경로는 아래와 같습니다.
/volume1/system/dehydrated/domains.txt
본문을 그대로 따라했는데도 자꾸 없다고 하내요…ㅠㅠ
https://drive.google.com/open?id=1am_kdWzir4mTPsZNFmgkALxcX-36o_Ao
domains.txt인데 domain.txt라고 만들어 두셨네요..
#
# !! WARNING !! No main config file found, using default config!
#
Processing 도메인.com with alternative names: http://www.도메인.com
+ Signing domains…
+ Generating private key…
+ Generating signing request…
+ Requesting challenge for 도메인.com…
+ ERROR: An error occurred while sending post-request to https://acme-v01.api.letsencrypt.org/acme/new-authz (Status 429)
Details:
{
“type”: “urn:acme:error:rateLimited”,
“detail”: “Error creating new authz :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/“,
“status”: 429
}
글대로 했는데도 5번에서 이런 오류가 뜨는데 무슨 문제일까요?ㅠㅠ
도메인.com/.well-known/acme-challenge을 해도 페이지를 찾을수 없다고뜨고 숨긴폴더 켰는데도 .well-known이라는 폴더는 안보이네요..
letsencrypt 서버로 요청을 너무 많이해서 차단된 상태입니다. 아래 사이트에서 관련 내용 확인해보세요. https://letsencrypt.org/docs/rate-limits/
아 일주일뒤에 다시해야 되네요..
그런데 처음했을때도 안되고 “도메인.com/.well-known/acme-challenge” 도 페이지를 찾을수 없다고 뜨는데 무슨 문제일까요?..
3번 과정에서 /var/www/dehydrated 폴더 생성하셨나요?
그리고, 5번 과정 진행하셨나요?
[…] Synology NAS DSM 5.x에서 Lets’ Encrypt SSL 인증서 발급/자동 갱신 […]
+ 7 pending challenge(s)
+ Deploying challenge tokens…
+ Responding to challenge for 도메인.kr authorization…
+ Cleaning challenge tokens…
+ Challenge validation has failed 🙁
ERROR: Challenge is invalid! (returned: invalid) (result: {
“type”: “http-01”,
“status”: “invalid”,
“error”: {
“type”: “urn:ietf:params:acme:error:connection”,
“detail”: “Fetching http://도메인.kr/.well-known/acme-challenge/EoH3NgFzt_JciqW2k-_XxJj2bmsnkVgTBQXQiN7AoJY: Timeout during connect (likely firewall problem)”,
“status”: 400
},
“url”: “https://acme-v02.api.letsencrypt.org/acme/chall-v3/3111238992/lEfsJA”,
“token”: “EoH3NgFzt_JciqW2k-_XxJj2bmsnkVgTBQXQiN7AoJY”,
“validationRecord”: [
{
“url”: “http://도메인.kr/.well-known/acme-challenge/EoH3NgFzt_JciqW2k-_XxJj2bmsnkVgTBQXQiN7AoJY”,
“hostname”: “도메인.kr”,
“port”: “80”,
“addressesResolved”: [
“제 아이피”
],
“addressUsed”: “11”
}
]
})
이글을 보실지 모르겠지만..
진행되다가 이런에러가 나옵니다.. 구글링해보니 아파치 어쩌구하던데.. 이글을 보신다면.. 도움좀 부탁드립니다. 3주째 해매다가.. 여기까지 왓습니다
안녕하세요.
로그 메시지 중 아래와 같은 것이 있는데요.
“detail”: “Fetching http://도메인.kr/.well-known/acme-challenge/EoH3NgFzt_JciqW2k-_XxJj2bmsnkVgTBQXQiN7AoJY: Timeout during connect (likely firewall problem)”,
저 로그가 Lets’ Encrypt 서버에서 http://도메인.kr/.well-known/acme-challenge/EoH3NgFzt_JciqW2k-_XxJj2bmsnkVgTBQXQiN7AoJY 로 접속을 못해서 발생하는 문제인데요.
먼저 직접 저 URL을 호출해서 접속되는지 확인부터 해보세요.
그리고, 혹시 해외 아이피 차단 같은 거 설정하지는 않았나요?
본문에도 언급되어 있는데요.
dns 서버 인증을 통한 와이드 카드 인증서를 발급 받는 것은 어떤지요?
https://isulnara.com/wp/archives/1581
혹시 80포트가 열리지 않아서 그런걸까요?
80포트 53포트 둘다 인터넷업체에서 막아놓았으며 열어주지 못한다고하네요..
그래서 그런건가요?
본문에 있는 acme 방식은 도메인 소유 여부를 확인하기 위해서 Lets’ Encrypt 서버에서 해당 도메인과 연결된 웹서버에 접속해서 인증하는 방식으로 80포트에 접속이 가능해야 됩니다.
위 댓글에 남긴 링크에 있는 도메인의 TXT 레코드 인증 방식으로 해야될 것 같습니다.
나스사면.. 뭐든 다 될줄알앗는데
포트부터 안되네요.. 진짜 3주정도 골머리 썪엇는데..
aws 설명해주신것으로 바꿔서 해볼게요..
위에 했던건 사용하는데 문제없죠?
aws lightsail 이용한 방식은 현재 저도 사용 중입니다.
다만 cron에 등록하여 스케줄러로 처리할 때는 될때도 있고 안될때도 있고한데 아직 원인을 찾지 못하고 있습니다.
직접 스크립트를 실행할 때는 잘 됩니다.
ㅎㅎ혹시나해서 글남겨봣느데
친절하게 답변주셔서 감사합니다!
꼭 설명해주신것으로 성공해서 댓글남길게요!!
예.. 성공하길 바라겠습니다^^