특정 서비스에서 외부 타사 도메인에 대한 인증서가 갱신 될 때 주의 해야 할 점, 그리고 확인해야 할 내용들을 정리했습니다.
도움이 되시길 바라면서 작성합니다.
도메인 SSL 인증서 교체 URL
gw-api.test.com:443
인증서를 교체할 때 외부 업체의 경우, 또는 우리 회사의 도메인에 대한 인증서를 교체할 경우 인증서를 발급받으면 Root/Chain인증서를 갖게 됩니다. 가끔 이 인증서에 대한 Root와 Chain이 세대교체로 인해 변경되는 경우도 있으니 공식 홈페이지에 들어가 해당 사항이 있는지 공지사항이 있는지도 확인하는 것을 권장합니다.
아래 인증서를 보면 발급대상과 발급자가 같은 인증서는 Root, 다르다면 Chain으로 보시면 됩니다.
인증서 교체시 확인 사항
가끔 Openssl 과 인증서와 연관이 있는지 아는 사람들도 있을텐데 연관이 없습니다.
하지만 예외 상황이 있을 수 있죠. 예를 들어 서버측에서 고도화로 서버가 변경되는경우, 또는 TLS버전을 보안을 위해 막는 경우가 있습니다.
그래서 확실한 작업을 위해서 2가지를 확인합니다.
Openssl을 이용한 TLS 지원 여부 확인
내 서버와 상대 도메인에 TLS버전지원이 어디까지 되는지 확인하기 위해서 아래와 같이 확인할 수 있습니다.
$ openssl s_client -connect gw-api.test.com:443 -tls1
$ openssl s_client -connect gw-api.test.com:443 -tls1_1
$ openssl s_client -connect gw-api.test.com:443 -tls1_2
CONNECTED(00000003) # 성공한 경우 이처럼 나옵니다.
depth=2 C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
verify return:1
depth=0 CN = *.test.com:443
verify return:1
---
RootCA 보유 확인
내가 원하는 인증서가 cacerts에 존재하는지 확인합니다.
Java1.8에는 있는 RootCA지만 Java1.6에는 존재하지 않습니다. 그래서 수동으로 넣어주어야 합니다.
가끔 서버에서 연결되는지 확인하고 싶어하시는 분이 계시는데 어플리케이션에서 직접 코드를 이용해 연결해보는 방법밖에 없는것 같습니다.
curl 로 되면 접속되는것 아니냐 라고 하는데 이는 openssl을 사용하기 때문에 전혀 관계가 없습니다.
- curl은 HTTPS 요청을 처리할 때 OpenSSL 또는 다른 SSL/TLS 라이브러리를 사용합니다.
- Java 애플리케이션은 HTTPS 요청을 처리할 때 JDK에 내장된 JSSE를 사용합니다.
$ keytool -keystore /usr/java1.6/jre/lib/security/cacerts -storepass changeit -list -v | grep -i USERTrust
별칭 이름: usertrustca
소유자: CN=USERTrust RSA Certification Authority, O=The USERTRUST Network, L=Jersey City, ST=New Jersey, C=US
발급자: CN=USERTrust RSA Certification Authority, O=The USERTRUST Network, L=Jersey City, ST=New Jersey, C=US
위 처럼 인증서가 등록되어있다면 문제가 대부분 없어야 하지만 더 확실하게 하기 위해 아래 내용을 더 확인해야 합니다.
인증서를 등록하는 방법은 맨 하단에 작성해두겠습니다.
⭐️ 인증서가 변경되는 사례
가끔 인증서가 세대 교체로 인해 변경되는 경우가 있습니다. 그래서 제가 사용해야 할 인증서가 변동사항이 있는지 확인해봐야 합니다.
제가 등록하려는 인증서 관련 공지사항을 보니 벌써 변경된 인증서네요. 만약 변경되었다면 서버에 등록된 RootCA를 두고 다시 교체해주어야겠죠. 하지만 아니라면 문제되지 않습니다.
폐쇄망 서버인 경우
폐쇄망 서버에서 인증서를 등록하는 경우 RootCA + ChainCA도 함께 등록해주어야 합니다.
폐쇄망 환경에서는 외부에서 중간 CA 인증서를 자동으로 가져올 수 없기 때문에, 모든 필요한 중간 CA 인증서를 직접 등록해 주어야 합니다.
내 서버가 폐쇄망인지 아닌지 확인하려면 아래와 같이 간단한 방법으로 확인해보는 법도 있습니다.
$ curl -I http://www.google.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
...이하 생략
인증서 등록 방법
---- Root 계정으로 실행
# 조회
keytool -keystore /usr/java1.6/jre/lib/security/cacerts -storepass changeit -list -v | grep -i USERTrust
# 인증서 상세 내용 조회
keytool -v -list -keystore /usr/java1.6/jre/lib/security/cacerts -storepass changeit -alias USERTrust
# 인증서 등록 예시
keytool -import -keystore cacerts -file "USERTrustRSAAddTrustCA.crt" -alias "usertrustrootca"
# 루트 인증서를 Keystore에 추가
keytool -keystore /usr/java1.6/jre/lib/security/cacerts -importcert -alias usertrustrootca -file /usr/java1.6/jre/lib/security/USERTrustRSACertificationAuthority.crt -storepass changeit -noprompt
# 폐쇄망인경우 체인 인증서도 함께 추가
# 체인 인증서를 Keystore에 추가
keytool -keystore /usr/java1.6/jre/lib/security/cacerts -importcert -alias usertrustchainca -file /usr/java1.6/jre/lib/security/USERTrustRSACertificationAuthority.crt -storepass changeit -noprompt
# password: changeit
'Linux' 카테고리의 다른 글
톰캣(Tomcat) 버전 가리는 방법 (0) | 2024.10.25 |
---|---|
[Network] 자주 사용하는 주요 포트 및 프로토콜 (1) | 2024.09.10 |
[NGINX] NGINX설치 방법 (Linux) (0) | 2024.08.27 |
[WEB] X-Forwarded 헤더는 무엇일까? (0) | 2024.08.07 |
[Tomcat] Tomcat, web.xml 적용이 안되는 이유 (0) | 2024.07.18 |