본문 바로가기
Server/Server ETC

[Tomcat] https 사용하기

by Youngs_ 2021. 12. 20.
  1. SSL 인증서 발급
cd C:/OpenSSL/bin
openssl.exe

 

   2. 개인키 발급

genrsa -des3 -out private.key 2048

 

 

  3. 공개키 발급

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

 

  4. CSR 인증 요청서 만들기

만약 openssl을 C바로 밑에 설치 하지 않으면 unable ...~~ 에러가 나올텐데 그럴땐 두번째줄을 실행하면 된다.

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

req -config D:\openssl경로\openssl.cnf -new -key private.key -out private.csr

 

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

 

 

   5. 인증서 만들기(CRT)

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

 

    6. pkcs12로 변경

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

 

   

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

해당코드는 <Service> 태그 안에 입력해야한다.

<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이 추가되지 않았다면 툴을 재시작해보거나 그래도 안 되면 서버를 다시 등록해준다.

 

정식 인증을 받지 않고 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>

참고링크

https://12teamtoday.tistory.com/58

댓글