본문 바로가기
Server/WAS

[Tomcat, HTTPS] 톰캣에서 https 사용하기

by 오늘의개발부 2020. 1. 13.
반응형
  1. SSL 인증서 발급

    • openssl을 이용해 ssl 인증서 발급 (https://sourceforge.net/projects/openssl/files/latest/download?source=typ_redirect)

    • openssl 다운로드 후 C: 밑에 압축 해제

    • 관리자 권한으로 cmd 실행 후 openssl/bin/ 경로에서 openssl.exe 실행

    • C 밑에 풀지 않으면 아래와 같은 경고가 뜰 수 있다. 이러면 CSR 을 만들 때 openssl.cnf를 찾지 못해 실행할 수 없다.

    • 그리고 실제로 openssl.cnf 파일은 bin 밑에 있으니 이 파일을 OpenSSL 밑으로 옮겨주자

    • WARNING: can't open config file: C:/OpenSSL/openssl.cnf

cd C:/OpenSSL/bin
openssl.exe

 

   2. 개인키 발급

    • gensa -des3 -out 키이름 2048 (-des3을 빼면 비밀번호 없는 private 키 발급 가능)

genrsa -des3 -out private.key 2048

 

 

  3. 공개키 발급

    • rsa -in 개인키이름 -pubout -out 공개키이름

rsa -in private.key -pubout -out public.key

 

  4. CSR 인증 요청서 만들기

    • req -new -key 개인키이름 -out CSR이름

req -new -key private.key -out private.csr

 

    그리고 인증서 신청서를 작성한다(국가코드, 도시, 회사명 등)

 

 

   5. 인증서 만들기(CRT)

    • req -x509 -days 기간 -key 개인키이름 -in CSR이름 -out CRD이름 -days 기간

req -x509 -days 365 -key private.key -in private.csr -out mycrt.crt -days 365

 

    6. pkcs12로 변경

    • pkcs12 -export -in CRT이름 -inkey 개인키이름 -out .keystore -name tomcat

pkcs12 -export -in mycrt.crt -inkey private.key -out .keystore -name tomcat

 

   

    7. tomcat이 설치된 경로(ex: C:/tomcat/tomcat8/...)로 가서 tomcat/config 에서 server.xml 다음 내용 추가

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
	maxThread="150" scheme="https" secure="true"
	keystoreFile="키파일 위치" keystorePass="개인키 비밀번호"
	clientAuth="false" sslProtocol="TLS" URIEncoding="utf-8" />

 

 

    8. WEB-INF/web.xml 다음 내용 추가 (http로 들어왔을 때 https로 리다이렉션)

<security-constraint>
	<web-resource-collection>
		<web-resource-name>SSL Forward</web-resource-name>
		<url-pattern>/*</url-pattern>
	</web-resource-collection>
	<user-data-constraint>
		<transport-guarantee>CONFIDENTIAL</transport-guarantee>
	</user-data-constraint>
</security-constraint>

 

    9. 이클립스나 STS에서 서버 포트를 확인한다.

      SSL이 추가되지 않았다면 툴을 재시작해보거나 그래도 안 되면 서버를 다시 등록해준다.

 

     10. 결과

        나의 경우 context path를 '/' 로 지정한 뒤 http://localhost:8084 로 접속했는데, http는 모두 https로 리다이렉션 해줬으므로 https://localhost:8443으로 이동되었다. 정식 인증을 받지 않고 https를 사용했기 때문에 '주의 요함'이 표시된다. 돈 주고 도메인을 사서 정식으로 등록하면 제대로 사용할 수 있다.

 

    11. 톰캣의 server.xml 전문

<?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.mbeans.GlobalResourcesLifecycleListener" />
	<Listener
		className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

	<GlobalNamingResources>
		<Resource name="UserDatabase" auth="Container"
			type="org.apache.catalina.UserDatabase"
			description="User database that can be updated and saved"
			factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
			pathname="conf/tomcat-users.xml" />
	</GlobalNamingResources>

	<Service name="Catalina">

		<Connector port="8080" protocol="HTTP/1.1"
			connectionTimeout="20000" redirectPort="8443" />
		<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
			maxThread="150" scheme="https" secure="true"
			keystoreFile="키파일 경로" keystorePass="개인키 비밀번호" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"
			clientAuth="false" sslProtocol="TLS" URIEncoding="utf-8" />

		<Connector port="8009" protocol="AJP/1.3"
			redirectPort="8443" />

		<Engine name="Catalina" defaultHost="localhost">

			<Realm className="org.apache.catalina.realm.LockOutRealm">
				<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
					resourceName="UserDatabase" />
			</Realm>

			<Host name="localhost" appBase="webapps" unpackWARs="true"
				autoDeploy="true">

				<Valve className="org.apache.catalina.valves.AccessLogValve"
					directory="logs" prefix="localhost_access_log" suffix=".txt"
					pattern="%h %l %u %t &quot;%r&quot; %s %b" />

			</Host>
		</Engine>
	</Service>
</Server>

 

반응형

'Server > WAS' 카테고리의 다른 글

Tomcat8.5 + SpringBoot CORS 문제 해결  (1) 2021.09.10