본문 바로가기
Network

무료 HTTPS 인증(with. Duck DNS, Tomcat9)

by Coarti 2024. 8. 7.

Duck DNS를 사용하여 무료 도메인을 받고

 

acme.sh로 SSL 인증서를 받아

 

Tomcat9 server.xml을 수정하여 CentOS 7 에서 동작해보겠다

 

1. DuckDNS

DuckDNS는 무료로 Domain을 받고 AWS의 탄력적IP(Elastic IP)할 수 있는 호스팅 서버이다

후원은 비트코인으로 받는 듯하다

 

 

본격적으로 구글로 로그인하여 도메인을 가져보자

토큰은 SSL 인증에 사용 됨

아래부분에 도메인을 입력하는 공간이 있다

도메인의 형태는 

XXXXX.duckdns.org의 형태가 된다. 참고로 대문자로 적어도 소문자로 변경된다

도메인은 5개까지 가능하고 도메인 소유자가 있으면 만들어지지 않는다.

도메인 중복

 

 

 

새로운 주소로 만들게 되면 목록에 추가되고 임의의 IP가 주어진다 

해당 도메인으로 접속하면 아무것도 없는 흰 바탕만 나오게 된다

대문자로 입력해봤다
도메인 생성(소문자로 변함)

 

current ip 부분에 AWS, Cafe24 가상 서버의 공개 IP를 입력하면 된다

그러면 ip 입력 뿐 아니라 도메인으로도 접속이 가능하다

 

2. SSL 인증

DuckDNS로 받은 도메인은 HTTP 프로토콜을 사용한다

이를 HTTPS로 변환해보자

 

해당 작업은 Centos 7 환경에서 진행된다

 

루트 계정으로 acme.sh를 사용해보자

무료로 SSL을 인증서를 발급받을 수 있고 갱신 기간이 되면 자동 갱신해준다

curl https://get.acme.sh | sh -s email='이메일주소'

다음 명령어로 확인해보자

acme.sh

인증서를 저장할 폴더를 생성(원하는 위치에 만들자)

mkdir -p /home/tomcat-server/ssl

 

위에서 DuckDNS로 부터 발급받은 토큰과 인증서 폴더 경로를 환경변수로 설정한다

운영체제(OS)별로 환경변수 파일의 위치가 다를 수도 있다.

 

vi 는 텍스트 편집기이다 

메모장과 사용법이 다르니 실수를 조심하자(팁, ESC를 생활화 하자)

// 환경변수 파일 열기
vi /etc/profile



// 아래 두줄을 함수(조건문 등)들을 피해 입력한다
(중략)

export DuckDNS_Token="DuckDNS 토큰 입력"
export CERT_FOLDER="/home/tomcat-server/ssl"

(중략)


:wq(저장 후 닫기)


// 설정 파일 변경 사항 적용
source /etc/profile

 

source 명령어 사용 후 PuTTY(혹은 MobaXterm) 재속접을 권장한다

설정 변경 후 바로 적용이 안되는 경우가 간혹 있기 때문이다

 

이제 준비가 끝났다. 인증서를 받아보자

'\' (역슬레시) 기호 뒤 엔터로 여러 줄에 걸쳐 입력할 수 있다.

acme.sh --insecure --issue \

   -d "만든.도메인.입력" --dns dns_duckdns \

   --cert-file "$CERT_FOLDER/cert.pem" \

   --key-file "$CERT_FOLDER/privkey.pem" \

   --fullchain-file "$CERT_FOLDER/fullchain.pem" \

   --capath "$CERT_FOLDER/chain.pem"

 

참고: timeout 에러 발생 시 인증서 서버 교체 / ZeroSSL → LetsEncrypt

acme.sh --set-default-ca --server letsencrypt

 

 

 

 

인증서가 생성되었는지 명령어로 확인 할 수 있다.

acme.sh list

 

4개의 pem을 받았고 인증서 생성 된것을 확인 했다

내용이 궁금하다면 cat 명령어를 통해 읽어보자

cat /home/tomcat-server/ssl/cert.pem

 

위에서 폴더 생성과 환경 설정을 올바르게 했다면 여기까지 무리없이 왔어야 한다.

 

3. Tomcat 설정

Centos 7 환경에서 작업하고 있다
명령어와 세부적인 파일위치는 다를 수 있으나
큰 흐름은 동일하니 한번 읽어보자

 

 

이제 톰캣의 server.xml을 수정해야 한다.

// Print Working Directory(pwd)
pwd
/root/apache-tomcat-9.0.90

 

root 폴더에 압축을 풀어 준비했다. 톰캣 설치 위치를 다음으로 칭하겠다

${TOMCAT_HOME} = /root/apache-tomcat-9.0.90

 

server.xml은 톰캣 폴더 안 conf에 있다

cd ${TOMCAT_HOME}/conf

vi server.xml

텍스트 편집기로 내용을 수정하자

수정할 부분은 2곳이다

 

 <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443"
               maxParameterCount="1000"
               />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />
    -->

기존에는 port="8080" / redirectPort="8443"으로 되어있다 이곳을 위와 같이 수정했다

 

그리고 바로 아래에 나머지 한곳을 수정하자

<!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation. The default
         SSLImplementation will depend on the presence of the APR/native
         library and the useOpenSSL attribute of the AprLifecycleListener.
         Either JSSE or OpenSSL style configuration may be used regardless of
         the SSLImplementation selected. JSSE style configuration is used below.
    -->
    <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true"
               maxParameterCount="1000"
               >
        <SSLHostConfig>
            <Certificate certificateFile="conf/cert.pem"
                     certificateKeyFile="conf/privkey.pem"
                     certificateChainFile="conf/chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

protocol 부분을 주목하자

  • org.apache.coyote.http11.Http11NioProtocol
  • org.apache.coyote.http11.Http11AprProtocol

이렇게 두가지가 보일 텐데 Http11NioProtocol을 찾으면 된다

port와 Certificate 부분을 수정하면 된다.

 

 

자, 마지막이다

발급받은 인증서를 복사하자, Certificate 태크에 설정한 위치로 4개의 pem을 복제하겠다

ssl 폴더 밑에 모든 pem파일을 conf 폴더 안에 복사하는 명령어다

cp /home/tomcat-server/ssl/*.pem ${TOMCAT_HOME}/conf

 

이제 본인의 프로젝트로 실행하여 인증서가 잘 동작하는지 확인해보자

letsencrypt 인증 서버로 부터 발급받은 SSL 인증서


 

https://www.robotstory.co.kr/torrent/?vid=79

 

728x90

'Network' 카테고리의 다른 글

네트워크 기본편 마무리  (1) 2023.11.09
공부하자 네트워크  (0) 2023.11.07
오늘도 한다 네트워크공부  (0) 2023.11.06
네트워크 OSI 7 Layer 먼저 하지 말자  (1) 2023.11.02