ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Tomcat SSL 적용 (Windows)
    Apache Tomcat 2022. 1. 26. 18:23

    협력업체가 http → https 로 변경을 원하는 상황입니다. 검증된 SSL 인증서를 구하여 적용 하겠으나, test를위해 임의의 인증서를 만들어보고 적용해보겠습니다. (window 입니다, Linux는 나중에...)

    openSSL을 사용하여 임이의 인증서를 만들 예정입니다 (아래 링크에서openSSL 사용법이 있습니다.)

    OpenSSL 자주 쓰는 명령어(command) 및 사용법, tip 정리
    RHEL/CentOS Linux 는 기본 패키지에 포함되어 있으므로 별도 설치를 안해도 됩니다. Windows 나 기타 Unix 에서 설치는 OpenSSL 컴파일(compile) & 빌드(build) 참고하세요 설치된 openssl 의 version 은 다음 명령어로 확인할 수 있습니다.
    https://www.lesstif.com/software-architect/openssl-command-tip-7635159.html

    OpenSSL을 다운로드 받는거보다 gitBash에서 지원을 해주니 그부분을 사용 하겠습니다.

    #gitBash, 원하는 디렉토리에 들어가서 실행 하면 됩니다
    openssl version // 버전확인이 가능합니다.
    💡
    윈도우에서 openssl pkcs export 멈춤현상 → window 터미널 입출력 문제 → 유닉스 터미널 동작필요(winpty) winpty bash
    • openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem
      개인키 생성 → 이름, city 등등 정보를 적어야 한다
      • 입력 값(test형태로 입력 바꿔도 됩니다.)
        Country Name (2 letter code) [AU]:82
        State or Province Name (full name) [Some-State]:testName
        Locality Name (eg, city) []:busan
        Organization Name (eg, company) [Internet Widgits Pty Ltd]:testCompany
        Organizational Unit Name (eg, section) []:testSection
        Common Name (e.g. server FQDN or YOUR name) []:TEST
        Email Address []:test@gmail.com
    • openssl x509 -text -noout -in certificate.pem
      작성된 인증서 검토
    • openssl pkcs12 -inkey key.pem -in certificate.pem -export -out certificate.p12
      pkcs12(p12) 로 인증서 결합
    • openssl pkcs12 -in certificate.p12 -noout -info
      pkcs12 유효성 검증

    1. Spring (내장톰켓)에 적용해 봅시다.

    먼저 전 ui와 api단을 나눠서 진행 하겠습니다 → 둘다 ssl 을 적용시킨후 하고 싶지만 아직 ui 쪽만 가능합니다. → api와의 ssl 통신은 다음에 적용되는 즉시 포스팅 해보겠습니다.

    application.properties

    server.ssl.enabled=true
    #파일위치
    server.ssl.key-store=D:/apach/certificate.p12
    #비밀번호
    server.ssl.key-store-password=test123

    첫 사진은 http로 접근시 입니다 두번재 사진은 https 로 접근시 입니다.

    • https 로 접근시 임의로 만든 ssl 이기 때문에 인증이 되지않아 접근이막힙니다. 이부분을 연결로 하여 들어가면 가능 합니다.

    → 두번재 사진처럼 주의요함이 뜨는게 정상입니다 (chrome 에서는 인증을 안해주었기 때문에)

    1. http 접근
    1. https 접근

    2. 외장 Tomcat을 이용한 배포 입니다.

    Apache Tomcat War 배포 (Window) 에서 톰켓을 배포한 이후의 상황으로 하겠습니다.

    • 현재 톰켓 버전은 8.5로 하였습니다 → 나중에 톰켓 10 버전도 업로드 할 예정입니다.

    → application.properties 에서 ssl 설정을 하여도 외장 tomcat에서는 적용이 안됩니다. 따로 지정을 해줘야 합니다. 주의 사항이 있는데 ssl 적용을 하고 war 로 압축을 진행할 예정이면, 파일위치 비밀번호를 외장톰켓 설정과 맞춰줘야 합니다.

    1. tomcat/conf/server.xml

    <Connector port="기존 포트 번호" protocol="HTTP/1.1"
    		connectionTimeout="20000"
    		redirectPort="SSL 적용 포트 번호" />
    
    <Connector port="SSL 적용 포트 번호" protocol="HTTP/1.1" SSLEnabled="true"
    		maxThreads="150" scheme="https" secure="true"
    		keystoreFile="파일 경로"
    		keystorePass="ssl 비밀번호"
    		clientAuth="false" sslProtocol="TLS" />

    위코드를 추가 하면됩니다. 여기서 “기존 포트 번호” : 80, “SSL 적용 포트 번호” : 443 으로 진행 하겠습니다.

    • 예시 코드
      <Connector port="80" protocol="HTTP/1.1"
      		connectionTimeout="20000"
      		redirectPort="443" />
      
      <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
      		maxThreads="150" scheme="https" secure="true"
      		keystoreFile="D:/apach/certificate.pkcs12"
      		keystorePass="test123"
      		clientAuth="false" sslProtocol="TLS" />
    • 80 → http 접속시 포트번호 없이 접근
    • 443 → https 접속시 포트번호 없이 접근
    💡
    위 포트 외 다른 포트로 변경이 됩니다 그럴경우 도메인 뒤에 포트 번호를 붙여야 합니다 ex> localhost:8090/...

    2. tomcat/conf/web.xml

    • conf/web.xml
      <?xml version="1.0" encoding="UTF-8"?>
      ....
      <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
      	http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
      	version="3.1">
      ....
      <!-- 이 위치에 session-config 위에 코드를 적어줘야 합니다 -->
      /* 코드 적는 위치 */
      <session-config>
      	<session-timeout>30</session-timeout>
      	</session-config>
      ....
      <mime-mapping>
      	<extension>123</extension>
      	<mime-type>application/vnd.lotus-1-2-3</mime-type>
      </mime-mapping>
      <mime-mapping>
      	<extension>3dml</extension>
      	<mime-type>text/vnd.in3d.3dml</mime-type>
      	</mime-mapping>
      ....
    • 위 /* 코드 적는 위치 */ 에 아래 코드를 넣으면 됩니다.
      <!-- http -> https 로 리다이렉트 하게 해줍니다. -->
      <security-constraint>
      	<web-resource-collection>
      		<web-resource-name>HTTP</web-resource-name>
      		<url-pattern>/*</url-pattern>
      	</web-resource-collection>
      	<user-data-constraint>
      		<transport-guarantee>CONFIDENTIAL</transport-guarantee>
      	</user-data-constraint>
      </security-constraint>
      <!-- 특정 리소스 /images/*, /css/* 리소스는 http or https 모두 처리됩니다. -->
      <security-constraint>
      	<web-resource-collection>
      		<web-resource-name>HTTPS or HTTP</web-resource-name>
      		<url-pattern>/images/*</url-pattern>
      		<url-pattern>/css/*</url-pattern>
      	</web-resource-collection>
      	<user-data-constraint>
      		<transport-guarantee>NONE</transport-guarantee>
      	</user-data-constraint>
      </security-constraint>

    참고

    'Apache Tomcat' 카테고리의 다른 글

    Apache Tomcat War 배포 (Window)  (0) 2022.01.17

    댓글

Designed by Tistory.