Let's Encrypt WildCard SSL 발급 및 적용
제 synology에 도메인을 3개를 세팅하여 synology 전반적인 도메인용, 단축 url서비스용(혼자쓰긴함.;;), 웹스테이션용
이렇게 세팅해서 사용 중에 있습니다.
그래서 하나의 인증서에 위 3개의 도메인에 대한 WildCard 인증서를 받아 사용중인대 완벽하지는 않을 수 있으나
1~2년 이상 사용중이나 별 문제 없어 코드 보관겸 작성합니다.
부족한 부분이 있으면 지도 부탁드립니다.😀
[준비물]
- Cloudflare에 DNS 등록된 도메인
- Cloudflare 영역관리 DNS API키
[Cloudflare API키 발급 받기]
- https://dash.cloudflare.com/profile/api-tokens 접속
- 토큰 생성
- 영역 DNS 편집
아래와 같이 세팅
특정 도메인만 세팅시
모든 도메인 세팅시(전 이걸 사용)
위와 같이 세팅 후 API토큰 생성
생성된 토큰은 1회만 보여지며 다시 확인이 안되니 잘 복사해두시고 분실시 다시 발급 받으셔야 합니다.
그리고 생성된 API코드는 DDNS용 업데이트용으로도 사용가능하며 도메인에 대한 여러 설정이 가능하니
유출 주의 바랍니다.
[acme.sh 설치]
ssh접속 후 root 권한으로 하시는걸 추천 합니다. (sudo -i)
cd ~
wget https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
tar xvf master.tar.gz
cd acme.sh-master/
./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "이메일주소" --server letsencrypt
source ~/.profile
cd ..
rm -r acme.sh-master
rm -r master.tar.gz
[인증서 첫 발급 및 연장용 스크립트]
#!/usr/bin/env sh
export CF_Email="이메일주소" # CloudFlare 아이디 (수정)
export CF_Token="AAAAAAAAAAAAAAAAAAAAAAA...." # CloudFlare API 토큰 (수정)
export CERT_FOLDER="$(find /usr/syno/etc/certificate/_archive/ -maxdepth 1 -mindepth 1 -type d)"
export CERT_DNS="dns_cf"
export CERT_DOMAIN="-d domain1.com -d domain2.com -d domain3.com -d *.domain1.com -d *.domain2.com -d *.domain3.com" # 발급받을 도메인 리스트 (수정)
CERT_FILE="$CERT_FOLDER/cert.pem"
KEY_FILE="$CERT_FOLDER/privkey.pem"
FULL_FILE="$CERT_FOLDER/fullchain.pem"
CAPATH_FILE="$CERT_FOLDER/chain.pem"
# 신규 생성 (아래 주석 해지 후 실행)
/usr/local/share/acme.sh/acme.sh --set-default-ca --server letsencrypt
/usr/local/share/acme.sh/acme.sh --issue $CERT_DOMAIN --dns $CERT_DNS --cert-file "$CERT_FILE" --key-file "$KEY_FILE" --fullchain-file "$FULL_FILE" --capath "$CAPATH_FILE" --dnssleep 20 --force
# 업데이트 (아래 주석 해지 후 실행)
#/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh --force
# Sysnology 계정 설정정
export SYNO_Create=1
export SYNO_Port="5001" #DSM 접속 포트 (수정)
export SYNO_Scheme="https"
export SYNO_Username="root" #DSM 관리자 계정 (수정)
export SYNO_Password="qwertyuiop" #DSM 관리자 패스 (수정)
export SYNO_Certificate=""
# 기본 인증서 배포
/usr/local/share/acme.sh/acme.sh --insecure --deploy $CERT_DOMAIN --deploy-hook synology_dsm
# 서버 다시 시작 (DSM 7.x)
#/usr/syno/bin/synosystemctl reload nginx
sudo systemctl restart nginx
위 코드를 편하신 곳에 wSSL.sh와 같이 저장 후 (수정)부분을 각자에 맞게 변경. ssh에서 실행 인증서를 발급 받습니다.
신규 생성 후에는 신규 생성부분을 주석 처리 업데이트 부분을 주석 삭제 후 작업 스케쥴러에 3개월 또는 매월 반복 등으로 등록하시면 지속 적으로 인증서가 업데이트가 가능합니다.
아래 acme.sh의 제가 종정 사용하는 코드를 추가합니다.
acme.sh 사이트
[acme.sh 리스트 확인하기]
/usr/local/share/acme.sh/acme.sh list
[acme.sh 버전확인]
/usr/local/share/acme.sh/acme.sh -v
[acme.sh 자동 업그레이드 하기]
/usr/local/share/acme.sh/acme.sh --upgrade --auto-upgrade
[Synology DSM 업그레이드 후 손상된 환경 수정]
/usr/local/share/acme.sh/acme.sh --force --upgrade --nocron --home /usr/local/share/acme.sh
[acme.sh 도메인 삭제]
/usr/local/share/acme.sh/acme.sh --remove -d yourdomain.com
[acme.sh 삭제]
/usr/local/share/acme.sh/acme.sh --uninstall
rm -r /usr/local/share/acme.sh
rm -r /root/.acme.sh
마지막에 실행 명령어 두줄만 바꾼 상태로 실행을 했는데
/usr/local/etc/nginx/sites-enabled reload nginx
sudo synoservicecfg --restart nginx
결과값으로
The domain '도메인명' seems to have a ECC cert already, lets use ecc cert.
Logging into localhost:5601
Enter OTP code for user '계정명':
이렇게 나오면서 OTP 코드를 요청합니다
어떻게 해야 되는걸까요?
사용중이면 마지막에 생성된 OTP를 입력해주셔야 되요.
DSM로그인시 사용하는 관리자 OTP입니다.
항상 아이디 비번만 치고 접속하거든요
2차 인증을 사용하고 있지 않는데..
이게 OTP 적용일까요..?
cmt alert