기술&교육

윈도우 톰켓 무료 인증서 설치

베어그릴스 2022. 8. 17. 14:10
반응형

SSL 인증서란?

웹서버와 웹사이트에서 이루어지는 모든 정보전송이 https://로 암호화프로토콜을 통해 안전하게 전송되게 하는 인증서 입니다. SSL을 사용하게 되면 로그인, 회원가입, 예약 등의 개인정보를 입력하더라도 스니핑(sniffing)에 의하여 정보를 도용당할 걱정이 없습니다.

 

스니핑 방지(Sniffing Prevention)

네트워크를 공동으로 쓰는 PC방, 회사, 학교 등에서 간단한 스니핑 툴로 인해 개인정보가 누출 되기 쉽습니다.
SSL인증서를 설치하면 모든 정보가 암호화되어 정보가 유출되더라고 안심 할 수 있습니다.
특히 전자상거래 상에서는 정보유출 방지를 위해 반드시 기본적으로 SSL을 적용해야하는 필수 요소입니다.

피싱 방지 (Phishing Prevention)

피싱이란 개인정보와 낚시의 합성어로 개인정보를 낚는다는 의미입니다.
SSL 보안서버 인증서를 구축한 사이트는 SSL인증서 발급 전 신뢰받은 인증기관에 의해 진짜 사이트임을 미리 확인받게 됩니다. 인증을 받지 않으면 유사사이트에 대해서 SSL인증서를 발급받을 수 없기 때문에 SSL 인증서를 발급받게 되면 클라이언트의 신뢰를 얻을 수 있습니다.

데이터변조 방지 (Data Modulation Prevention)

각종 통신 환경을 이용하여 컴퓨터내의 정보 또는 데이터의 전송결과를 임의로 변조하는 범죄의 일종으로 제 3자의 악의적인 개입으로 인하여 데이터 값이 변조될 가능성이 상당히 큽니다. 직장 내 급여변경, 온라인 이체시 금액변조, 학생의 성적 기록변조 등이 있는데 이런한 악의적인 데이터의 변조를 SSL보안서버 구축을 통해서 봉쇄할 수 있습니다.

기업 신뢰도 향상 (Improved Business Confidence)

정식으로 기업실체성인증을 받고 보안인증마크를 설치함으로써 기업자체에 대한 신뢰성을 향상 시킬 수 있습니다.
또한, 보안 접속체크박스 등의 안내로 보안 및 고객정보를 소중히 다루는 기업이라는 가시적인 홍보 효과 또한 얻을 수 있습니다.

 

준비하기

우선 필요한 파일을 다운로드하고 설치합니다.

(1) Java와 OpenSSL을 설치하고 Path 환경변수에 추가합니다. Path 환경변수에 꼭 넣을 필요는 없지만 넣어두는 것이 정신 건강에 좋습니다. Windows용 OpenSSL은 아래 링크에서 3MB짜리 Light 버전으로 다운로드 받으면 됩니다.

 

https://slproweb.com/products/Win32OpenSSL.html

 

Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions

Minimum system requirements: Windows XP or later 32MB RAM 200MHz CPU 30MB hard drive space Recommended system requirements: Windows XP or later 128MB RAM 500MHz CPU 300MB hard drive space September 9, 2021 - OpenSSL 3.0 is available. Users should currently

slproweb.com

https://github.com/porunov/acme_client/releases

(3) 편의를 위해 C 드라이브 루트에 cert 폴더를 만듭니다. 그리고 다운로드 받은 acme_client.jar 파일을 C:\cert에 복사합니다.

인증서 발급받기

이제 인증서를 발급받기 위해 영혼 없이 아래 명령어를 순서대로 실행하면 됩니다. 아래 명령어 중에서 한글로 적힌 부분은 각자에게 맞는 내용으로 변경하여야 합니다.

OpenSSL 열기

 

(1) OpenSSL을 이용하여 CA user account key 생성.

openssl genrsa -out "C:\cert\account.key" 2048

(2) private domain key를 생성.

openssl genrsa -out "C:\cert\도메인.key" 2048

(3) CSR (Certificate Signing Request)를 생성.

openssl req -new -key "C:\cert\도메인.key" -sha256 -nodes -subj "/C=KR/ST=Seoul/L=Seoul/O=회사명/OU=부서명/CN=도메인/emailAddress=이메일" -outform PEM -out "C:\cert\도메인.csr"

(4) PJAC를 이용하여 CA user account를 등록. 여기부터는 C:\cert 폴더로 이동 후 실행하여야 합니다.
CMD 창을 엽니다.

java -jar acme_client.jar --command register -a "C:\cert\account.key" --with-agreement-update --email 이메일

(5) 인증서를 요청하고 http-01 challenge 파일을 다운로드 받습니다. http-01 challenge가 무엇인지 궁금하시면 구글에서 검색해 보세요.

java -jar acme_client.jar --command order-certificate -a "C:\cert\account.key" -w "C:\cert" -c "C:\cert\도메인.csr" --well-known-dir "C:\cert" --one-dir-for-well-known

(6) C:\cert 폴더를 열어보면 잡다하게 긴 이름의 파일이 하나 만들어져 있을 것입니다. 그게 http-01 challenge 파일입니다. 그 파일을 Tomcat 설치 경로 하위에 있는 webapps\ROOT\.well-known\acme-challenge 폴더에 복사합니다. 윈도 탐색기에서 “.well-known” 폴더를 만들려고 하면 에러 메시지가 뜨면서 만들어지지 않을 것입니다. 그러면 “.well-known.”과 같이 끝에도 점을 하나 더 찍으면 폴더가 만들어 집니다. Tomcat은 80 포트로 HTTP Connector를 설정하여 아래와 같은 URL로 접속 가능해야 합니다.

http://도메인/.well-known/acme-challenge/잡다구리파일명

(7) 다시 C:\cert 폴더로 돌아와서, PJAC를 이용하여 challenge 파일을 검증합니다.

java -jar acme_client.jar --command verify-domains -a "C:\cert\account.key" -w "C:\cert" -c "C:\cert\도메인.csr"

(8) 검증이 완료되면 인증서를 생성 및 다운로드합니다.

java -jar acme_client.jar --command generate-certificate -a "C:\cert\account.key" -w "C:\cert" -c "C:\cert\도메인.csr" --cert-dir "C:\cert"

(9)이제 C:\cert 폴더에 세 개의 PEM 파일이 생긴 것을 확인할 수 있을 것입니다. (cert.pem, chain.pem, fullchain.pem)

 

(10) Tomcat에서 사용하기 위해 인증서 파일을 변환합니다.

openssl pkcs12 -export -in "C:\cert\fullchain.pem" -inkey "C:\cert\도메인.key" -out "C:\cert\keystore.p12" -name tomcat -CAfile "C:\cert\chain.pem" -caname root -password pass:패스워드

(11) 마지막으로, Tomcat에 SSL 인증서를 적용하기 위해 Tomcat의 conf 폴더에 있는 server.xml에 아래와 같이 Connector를 설정합니다.

  • Tomcat 8.5 이상
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="C:\cert\keystore.p12" certificateKeystorePassword="패스워드" certificateKeystoreType ="pkcs12" type="RSA" />
    </SSLHostConfig>
</Connector>
  • Tomcat 8 이하
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<Service name="Catalina">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="250" minSpareThreads="5" />
<Connector port="80"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxKeepAliveRequests="1"
URIEncoding="UTF-8"
executor="tomcatThreadPool"
connectionTimeout="10000"
acceptCount="10"
maxConnections="5000"
enableLookups="false"
tcpNoDelay="true"
disableUploadTimeout="true"
redirectPort="443" />
<Connector port="443"
protocol="org.apache.coyote.http11.Http11Protocol"
URIEncoding="UTF-8"
executor="tomcatThreadPool"
acceptCount="10"
maxConnections="5000"
acceptorThreadCount="2"
connectionTimeout="10000"
enableLookups="false"
disableUploadTimeout="true"
clientAuth="false"
sslProtocol="TLS"
SSLEnabled="true"
keystoreType="PKCS12"
keystorePass="인증서패스워드암호입력"
keystoreFile="C:/cert/keystore.p12" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>

인증서 갱신하기

Let’s Encrypt 인증서의 유효기간은 90일이기 때문에 계속 유지하려면 주기적으로 인증서를 재발급 받아야 합니다. 만료일이 가까워지면 위의 (4)번에서 입력한 이메일 주소로 알림 메일이 옵니다. 그러면 위의 (5)번부터 (10)번까지 순서대로 다시 실행하고 Tomcat을 재시작하면 됩니다.

반응형