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
ㄷㄷㄷ 엄청 정성이 느껴지는 글 입니다. 감사합니다~
https://svrforum.com/recent/1234776 글도 포함해서요!
넵 전체 코드 해주시면되요.
신규등록 부분만 코드 2줄 주석하고
업데이트 코드만 해지 해주심되요.
그리고 권한은 root로 해주심되구요.
그리고 업데이트 테스트 위해서 연속적으로 반복 실행하시면 24시간 발급 정지되니 주의 하세요.
아 작업스케줄에서 경로 설정할때 /bin/touch /volume4/로 해야하는데 /volume4/로 했었네요 ㅋㅋㅋ 일단 에러는 안뜨긴 하는데 그런데 이게 dsm 제어판-보안-인증서에서는 날짜가 갱신이 되는데 크롬에서 인증서보면 날짜 갱신이 안되는데 결국 갱신이 안된걸까요.,,,?
그리고 제가 알기로 인증서가 매일 한다고 날짜가 업데이트 되지 않는 걸로 알고 있습니다.
만기일 1달인가 14일인가 남았을때만 갱신이 되어지는 걸로 알고 있습니다.
이걸로 해봐야겠네요. 정리해주셔서 감사합니다.
/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh/
이것만 넣어도 되는지여.
공식문서 보니 위문장만 넣으라고 되잇거든여.
2. sudo systemctl restart nginx 자동갱신에 이 문장 빼도 되는지요.
dsm자체가 재시작되더군여.
사이트마다 다 다르니 너무 헷갈리네요
2. 빼서도 문제는 없는대 브라우져에서 반영이 바로 안되는 경우가 있어서 추가 하였습니다.
cmt alert