협력업체가 http → https 로 변경을 원하는 상황입니다. 검증된 SSL 인증서를 구하여 적용 하겠으나, test를위해 임의의 인증서를 만들어보고 적용해보겠습니다. (window 입니다, Linux는 나중에...)
openSSL을 사용하여 임이의 인증서를 만들 예정입니다 (아래 링크에서openSSL 사용법이 있습니다.)
OpenSSL을 다운로드 받는거보다 gitBash에서 지원을 해주니 그부분을 사용 하겠습니다.
#gitBash, 원하는 디렉토리에 들어가서 실행 하면 됩니다
openssl version // 버전확인이 가능합니다.
- 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 에서는 인증을 안해주었기 때문에)
- http 접근
- 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 접속시 포트번호 없이 접근
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>
참고
Uploaded by Notion2Tistory v1.1.0