Tomcat 8.5 HTTPS 설정하기 공인(사설)CA 없이. 그리고 Unity3d C#에서 연결할 수 있게

CA 역할은 JAVA와 C# 간에 RSA와 AES로 비밀통신 해보기(SSL) 의

비밀통신-> 일반적인 B입증 방법 단락에 간단하게 메카니즘을 정리해뒀다.

좀더 자세한 설명이 필요하면 여기를 가보자


물론 CA에서 인증 받았다고 신뢰할 수 있을지는 모르겠다.(마소의 질의응답)

신뢰 할 수 있을지는 이 글의 범위에 벗어났으니, 넘어가자.


어쨋든,

CA에서 인증받지 못한 인증서도 쓸모가 있다.

개인용 또는 테스트용으로 사용할 수 있다.

다만 이런 인증서를 사용한 사이트에 웹브라우저나 프로그래밍(C#, C++, ...)에서 

제공하는 웹통신 API로 연결하면, 신뢰할 수 없다는 경고를 낸다.

하지만 이 경고를 무시할 수 있다.


본론으로 돌아와 인증서 만들자.

WINDOWS 환경에서 쉘을 만들어 인증서를 만들었다.

@echo off SET YOUR_ALIAS=tomcat SET YOUR_KEYSTORE_FILE=aa.keystore "C:\Program Files\Java\jdk1.8.0_121\bin\keytool" -genkey -alias %YOUR_ALIAS% -keysize 2048 -keyalg RSA -keystore %YOUR_KEYSTORE_FILE% -dname "CN=localhost, OU=team, O=company, L=seoul, ST=seoul, C=kr" -validity 3650

주의할 것은 CN=localhost 라는 값인데, 실제 도메인명을 넣어야 한다. 

만약 아무 값이나 넣으면, 웹브라우저는 잘 되지만, 

유니티에서 일부 웹 관련 API로 연결하면, 연결할 수 없다는 오류가 난다.

이 부분은 다른 글에서 알아보기로 한다.

참고로 구글 같은 경우에는 CN=*.google.com 값을 사용했다.

OU, O, L, ST, C에 맘대로 넣어도 된다.

validity 3650 는 인증서 만료 기간을 10년으로 설정했다. 아무 값이나 넣어도 된다.


톰캣 설정

server.xml

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" keystoreFile="${user.home}/aa.keystore" keystorePass="%KEYSTORE.PASSWORD%" clientAuth="false" sslProtocol="TLS" ciphers="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA" />

ciphers 키에 들어간 암호화목록을 지정하지 않고도, 웹브라우저에서는 연결이 가능했다.

하지만 유니티의 일부 웹 관련 API를 사용하면, 연결오류가 난다.

위 암호화 목록은 구글링해서 추천리스트를 구해 넣은 것이지만,

중요한 것은 유니티의 일부 웹 관련 API에서는 TLS_RSA_WITH_AES_128_CBC_SHA 로 암호화를 하기때문에, 

이 암호화 방식은 꼭 설정에 포함시켜야 한다.

이 사실을 알아내기 위해 엄청 고생을 했다. 관련 글에서 보자.


웹브라우저에서 실행

https://localhost:8443/hellomvc2/

실행 결과

보안 경고를 무시하고 안전하지 않음으로 이동하면 연결된다.