tomcat 사설인증서 https 적용

leeminsu·2021년 11월 17일
0

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

  1. 개인키 발급

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

genrsa -des3 -out private.key 2048

  1. 공개키 발급

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

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

  1. CSR 인증 요청서 만들기

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

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

그리고 인증서 신청서를 작성한다(국가코드, 도시, 회사명 등)
  1. 인증서 만들기(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 다음 내용 추가

8. WEB-INF/web.xml 다음 내용 추가 (http로 들어왔을 때 https로 리다이렉션)
SSL Forward /* CONFIDENTIAL
9. 이클립스나 STS에서 서버 포트를 확인한다.


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



 10. 결과


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



11. 톰캣의 server.xml 전문
<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>
profile
프로게이머 아니고 프로그래머

0개의 댓글