ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • certbot 인증서 자동 재발급
    정보/컴퓨터 2024. 4. 14. 21:17
    반응형

     

    사내에서 사용하는 웹페이지가 letsEncrypt 사 인증서를 사용하고 있는데

    만료 메일이 스팸메일함에 와있길래 말했더니 다른분한테 갱신 시키시더라고~

    "개꿀이죠~?"

     

    하고 주말쉬고있더니 내가 쓰는 도메인 인증서도 마침 만료네.. 아 스벅

     

     

    그래서 주말에 할 것도 없고 회사꺼랑 내꺼 둘다 해버리기로 함.

     

    기존에 집에서 사용하는 라즈베리파이에 돌리는 서버는 톰캣하나만으로 돌렸었는데 이때 받은 인증서가 갱신이 잘 안됐다.

    스프링 부트로 프로젝트를 다시 붙여서...

    인증서를 교체하려면 .well-known인가 뭐시기에 파일을 넣어줘야하는데 스프링부트로는 그렇게 하는 방법을 모름 ...

     

    스프링부트에서는 application.properties 에 server.ssl.certificate , server.ssl.certificate-private

    이런식으로 그냥 pem파일 작성위치만 적어주면 됨..

    근데 또 갱신을 하려면 80포트가 살아있어야만하는 단점이 존재한다

    회사에서 사용하는 페이지도 뒤에 포트 붙여서 사용하고 있는데 80포트는 당연히 본사 홈페이지로 사용중이므로 내맘대로 꺼버리기도 뭐하고...

     

    해결책을 찾아보다가 나온게 있는데 certbot을 dns를 이용해서 갱신하는 방법을 알아냈다.

    "acme-dns-certbot"라는건데 파이썬3 이상이 설치되어 있으면 사용가능하다.

     

    부랴부랴 내서버에 python3을 설치한 뒤에

     

    아래 명령어로 py파일을 받아오고

    wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py
     

    실행할수 있게 실행권한 부여

    chmod +x acme-dns-auth.py
     

    letsencrypt 폴더로 이동

    mv acme-dns-auth.py /etc/letsencrypt/
     

     

    아래 명령어로 새로운 인증서 획득

    certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain -d your-domain
     

     

    이렇게 실행하면 cname 등록하라는 메세지와 키가 나오는데 dns관리에 들어가서 cname 등록해주면 됨

     

     

    등록한다음에 쉘에서 엔터를 치면 갱신완료

     

    스프링부트에서는 pem파일만 참조하면 재시작시 바로 적용이 되기 때문에 sh파일을 만들고 crontab에 등록해준다

     

    내 스프링부트 프로젝트는 nohup으로 실행을 하고 있기 때문에 실행중인 프로세스를 죽이고 nohup을 이용해 재실행해주는 과정으로 작성

    #renewCoogle.sh
    # kill exists nohup
    kill -9 $(ps -ef | grep lotto | grep -v grep | awk '{print $2}')
    # start spring boot
    nohup java -jar /home/boot/lotto-0.0.1-SNAPSHOT.jar &
     

    chmod로 실행권한 부여

    chmod +x renewCoogle.sh
     

     

     

    크론탭은 다음과 같이 작성 매주 일요일 새벽2시 renew가 성공하면 실행되도록 작성

    0 2 * * 0 certbot renew --quiet --renew-hook "/home/boot/renewCoogle.sh"
     

    구글링중 --no-self-upgrade 라는 명령어를 찾았는데 업데이트 없이 certbot 실행하는 파라미터라고하는데 deprecated 되었단다..

     

     

    여기까지하고 회사에서 사용하는 서비스인 북스택도 하면 쉽겠지 하고 했는데...

    대체 어디에 ssl을 설정해놓았는지를 못찾아가지고 해맸는데

    북스택은 nginx를 이용해서 ssl을 설정중이더라.

    볼륨으로 뽑아놓은 폴더를 살펴보니 ssl.conf파일이 보여서 수정하니 nginx에 pem파일은 또 안먹히네?

    어디선가 pem파일도 적용된다고 본 기억이 있었는데.. 음... 모르겠다.

     

    아무튼 nginx에서 사용하려면 pem파일 두개를 각각 key파일과 crt파일로 바꿔주는 과정이 필요했다.

     

    privkey.pem -> privkey.key

    fullchain.pem -> fullchain.crt

     

    openssl을 이용해서 각 파일을 변환해주었다.

    openssl x509 -inform PEM -in fullchain.pem -out fullchain.crt
    openssl rsa -in privkey.pem > privkey.key
     

    (두번째 키파일 rsa형식이아니라고해서 ec로 하니까 작동함..)

     

     

     

     

     

    설정파일에서 설정한 해당 경로에 없어서 cp -r을 이용해서 pem파일 두개를 복사후에 작업을 완료했다.

    도커컴포즈로 실행중인데 docker에서 인증서 경로를 서버 경로랑 일치시켜주면 되지않을까 라는 생각이 들어서 찾아봤는데

    볼륨에 /etc/letsencrypt:/etc/letsencrypt 이런식으로 잡아 놓으면 더 편할 것 같다.

     

     

     

    여담으로 coogle.shop 1년연장료가 5만원인데... 지불할 의향은 전혀 없다..

    140 일 이후에는... 뭐... 음... 다른걸로 갈아타야지... 오백원짜리로..

     

     

    반응형

    댓글

Designed by Tistory.