태그 Archives: Let’s encrypt

Let’s encrypt 사용 방법 변경

 

신규 서버를 세팅 하고 SSL 추가 했을때 당황스럽게도 위와 같은 메세지를 뿌리며 certbot-auto 가 작동하지 않았다.

 

certbot-auto 의 경우 실행 시킬때마다 자동 업데이트를 하는데 버전이 1.11 버전으로 되어 있을경우 발생하는 메세지로 확인이 된다.

 

링크를 따라 갈 경우 snap을 이용해서 설치해서 사용하라고 안내 되어 있다.

snap 은 yum 혹은 apt-get 과 같은 패키지 관리 툴 이다.

 

CentOS 7.7~8.X 의 경우 epel-release 가 설치 되어 있다면 yum 으로 snap을 설치할 수 있다. (6번 라인은 양반김 처럼 두번 실행해야 할 수 있다.)

 

이후에 snap 을 이용하여 certbot 을 설치한다.

주의: 기존에 yum 이나 apt-get 혹은 dnf 으로 설치된 certbot은 삭제 하고 진행 해야 한다. (일부 버전에서 심볼링 링크가 안걸리는듯… 하여 8번 라인의 명령어를 추가 실행해야 할 수 있다.)

 

/usr/bin 안으로 링크를 생성하기 때문에 ssl 발급/삭제을 위해서는 아래 명령어를 사용하면 되겠다.

 

장점이 하나 있는데 snapd 에서 sequence 기능으로 설치된 패키지를 자동으로 최신 업데이트를 하는데

발급된 인증서의 renew 역시 자동으로 처리가 된다. (/var/lib/snapd/sequence/certbot.json)

 

PS1 . 기존에 git 에서 clone 을 해서 사용한 경우 삭제까지는 필요 없는듯 하고, renew의 경우 메세지는 나오지만 갱신 하는데에는 문제가 없다.

 

PS2. snap 설치가 되지 않는 리눅스의 경우 certbot-auto 구버전 (1.9.0.dev0) 의 실행파일만 덧씌운뒤 renew 실행하면 당장 급한불을 끌 수 있음.

 

PS3. 테스트 해보지 않았으나 acme api를 이용하는 bash, dash, sh 비공식(호환) 스크립트.. https://github.com/acmesh-official/acme.sh

 

Let’s encrypt – ACMEv1 지원 종료

Let’s encrypt 에서 API (ACMEv1) 을 종료할 계획을 발표 했다.

오늘 관련 메일을 수신 받았고 내용을 확인해 봤을때 아래와 같다.

2019년 11월 – 신규 어카운트 사용 불가 (기 등록 계정[메일주소]은 사용 가능)

2020년 6월 – 신규 도메인 발급 불가 (기존 도메인 renew 만 가능)

2021년 초 – 지원 종료 (사용 불가)

https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430

 

간단히 말해서 ACMEv2 주소를 ACMEv1 대신 사용하면 된다.

ACMEv2 의 경우 2018년 3월에 공개가 되었으며 STAR(*) 인증서 발급을 지원한다.

 

기본적으로 certbot 의 경우 실행시 자동으로 업데이트를 한다. (renew 에서도)

그러므로 API 주소만 단순히 ACMEv2 을 사용하면 동일 하게 사용할 수 있다.

( https://acme-v01.api.letsencrypt.org/directory –> https://acme-v02.api.letsencrypt.org/directory )

 

인증서 만료일은 아래와 같이 certbot-auto 명령어와 openssl 명령어로 확인할 수 있다.

 

테스트 결과 renrwal 폴더 안의 conf 파일의 기존 ACMEv1 주소를 ACMEv2 으로 변경하면 정상적으로 갱신이 가능하다.

아울러서 v2 의 경우 다중의 end point 를 통해 http 인증을 진행 한다. 기존에 1개의 아이피 에서 인증을 진행했지만 8 곳 에서 http 인증을 진행하는것으로 확인 되었다 ‘ㅅ’a

물론 이 end point 의 경우 유동 적일 수 있다.

 

인증서 취소 & 인증서 삭제

 

Let’s encrypt 에서 생성된 pem 인증서를 tomcat에서 사용 하기

Let’s encrypt 의 경우 일반적인 apache / nginx 에서 사용이 가능한 pem 파일을 생성 한다.

 

때문에 tomcat 에서 사용을 하기 위해서는 jks 로의 변환을 해서 org.apache.coyote.http11.Http11NioProtocol 프로토콜로 사용을 하거나

apr 및 tomcat-native 설치 하여 org.apache.coyote.http11.Http11AprProtocol 을 사용할 수 있다.

 

먼저 pem 파일을 jks 로 만드는 스크립트 이다. 중요한 부분은 18~22 줄이다.

이후 server.xml 설정에서 아래와 같이 설정하여 https 를 활성화 할 수 있다.


다른 방법으로 Http11AprProtocol 프로토콜을 사용하여 pem 파일을 jks 로 변환 없이 사용할 수 있다.

또한 apr 프로토콜을 사용할하고 tomcat 8.5 혹은 tomcat 9 의 경우 http/2 를 지원 한다.

활성화 하기 위해서는 tomcat-native 을 설치해야 한다.

server.xml 에서는 아래와 같이 설정 한다.

 

Let’s enctypt 를 의 발급/갱신을 단순화 하기 위한 방법

Let’s encrypt 는 발급/갱신을 할때 http://도메인/.well-known/acme-challenge/xxxxxxxxxxxxxxxxxxxxxxxxx 를 호출 한뒤 호출에 성공한경우 도메인 소유권이 있는것으로 판단하여 발급/갱신이 이루어 진다.

다만 이경우 .htaccess 를 쓰는 워드프레스 라던가 XE 라던가 혹은 개인 설정에 의해 .htaccess 에서 리다이렉트 운용을 할 경우 발급/갱신이 어려워 질 수 있다.

 

때문에 아래와 같이 apache 의 Alias 설정 해서 좀더 효율적인 인증을 할 수 있다.

 

위 설정을 하고 난뒤에 발급 명령어는 아래와 같다.

webroot를 /var/www/html 에 고정을 하고  6번째 줄만 맞게 수정을 해서 사용하면 됩니다 ‘ㅅ’b

 

/var/www 폴더는 selinux 에서 파일컨텍스트가 허용된 폴더로 selinux 를 사용하더라도 별도의 허용처리를 할 필요가 없어서 좋음 🙂

CentOS5 에서 let’s encrypt 설치

일단 설치 법은 크게 다르지는 않지만 몇가지 막히는 부분이 있다.

 

이 다음 git을 통해 letsencrypt를 가져오는 명령어가 그냥 실행하면 되지 않는다.
아마도 git 에서 제공되는 SSL에서 지원하는 suite 가 centos 에 없거나 신뢰할수 있는 CA로 등록되어 있지 않는듯 하다. 때문에 GIT_SSL_NO_VERIFY=true를 하고 진행한다.

일단 설치는 잘 완료되 되었다.

 

이후 발급 시도시 SSL_set_tlsext_host_name 관련 에러가 날것이다.~]# cd /usr/local/letsencrypt

사유는 openssl 버전이 너무 낮기 때문에 발생하는것으로 판단된다.

 

때문에 별도의 수정이 좀 필요하다.

에러 해결은 github 의 antmd님의 댓글에서 발췌 했습니다. ‘ㅅ’a

를 한뒤에 아래 두파일의 의 1239번째줄과 296번째줄을 주석처리한다 ( # 으로.. )
~/.local/share/letsencrypt/lib/python2.7/site-packages/OpenSSL/SSL.py ( 1239줄 )

~/.local/share/letsencrypt/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py ( 296줄 )

 

그다음 다시 발급 시도를 하면 정상 발급이 된다.

 

 

ps. ~/.local의 파일 수정이 잘 안되는 분, 혹은 파일이 없는 경우 아래와 같이 수정된 소스를 다운받아 실행합니다.