포스트

2022-03-02-TIL

Today I Learned

Spring Boot Admin

Spring Boot Admin은 codecentric이 만든 오픈소스로, Spring Boot Actuator 엔드포인트를 웹 UI로 모아 보여 주는 관리 도구다. Admin 서버를 하나 띄우고 각 애플리케이션이 클라이언트로 등록하거나(또는 Eureka 같은 서비스 디스커버리로 찾게 하거나) 하면, 헬스 상태, 메트릭, 환경 변수, 로그 레벨, 스레드 덤프를 한 화면에서 확인하고 로그 레벨을 런타임에 바꿀 수 있다. Actuator 엔드포인트가 노출되어야 동작하므로, 운영 환경에서는 Admin 서버와 엔드포인트에 인증을 걸어야 한다.

  • https://github.com/codecentric/spring-boot-admin
  • https://coe.gitbook.io/guide/monitoring/spring-boot-admin

HTTPS

HTTPS는 HTTP를 TLS 위에서 주고받는 방식이다. 연결을 맺을 때 서버가 인증서를 보내면 브라우저는 인증서가 신뢰하는 인증 기관(CA)의 체인으로 서명되었는지, 도메인이 일치하는지, 만료되지 않았는지를 확인한다. 이후 핸드셰이크에서 합의한 대칭 키로 통신을 암호화한다. 공개 키 암호는 키 교환과 인증에, 대칭 키 암호는 실제 데이터 암호화에 쓰이는 구조다.

  • https://opentutorials.org/course/228/4894
  • https://12bme.tistory.com/80
  • https://www.lesstif.com/gitbook/https-ssl-curl-web-browser-16744456.html

SSL 인증서 파일 종류

인증서 파일은 확장자보다 인코딩과 내용물로 구분하는 것이 정확하다.

형식특징
PEMBase64 텍스트, -----BEGIN CERTIFICATE-----로 시작. .pem, .crt, .key 등에 쓰인다
DERPEM과 같은 내용을 바이너리로 저장. .der, .cer
PKCS#12인증서, 개인 키, 체인 인증서를 하나의 파일에 비밀번호로 묶은 형식. .pfx, .p12
JKS자바 전용 키스토어 형식

같은 .crt라도 PEM일 수도 DER일 수도 있으므로, 파일을 텍스트로 열어 BEGIN 헤더가 보이는지 확인하면 빠르다.

  • https://www.sslcert.co.kr/guides/kb/54?page=2

PFX 인증서

PFX(PKCS#12) 파일은 Windows/IIS나 Tomcat에서 주로 쓰고, Apache나 NGINX는 PEM 형식의 인증서와 키 파일을 따로 요구한다. 그래서 PFX를 받으면 openssl pkcs12로 분리한다. OpenSSL 문서에 따르면 -clcerts는 서버(클라이언트) 인증서만, -cacerts는 CA 인증서만 출력하고, -nokeys/-nocerts로 키나 인증서를 제외하며, -noenc는 개인 키를 암호화하지 않고 내보낸다. -nodes는 OpenSSL 3.0부터 deprecated이고 -noenc가 대체한다.

1
2
3
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out server.crt
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out chain.crt
openssl pkcs12 -in cert.pfx -nocerts -noenc -out server.key

암호화하지 않은 개인 키 파일은 권한을 600 정도로 제한해 두어야 한다.

  • https://ykarma1996.tistory.com/84
  • https://www.ibm.com/docs/en/arl/9.7?topic=certification-extracting-certificate-keys-from-pfx-file
  • https://medium.com/beingcoders/easy-way-to-convert-pfx-to-crt-key-files-in-10-minutes-683849242c65

Apache 인증서 설치

Apache httpd는 mod_ssl 모듈로 HTTPS를 처리한다. 443 포트용 VirtualHost에 SSLEngine on을 켜고 SSLCertificateFile에 인증서, SSLCertificateKeyFile에 개인 키를 지정한다. 체인 인증서는 예전에는 SSLCertificateChainFile로 따로 지정했지만, mod_ssl 문서에 따르면 이 지시어는 2.4.8부터 obsolete이고, 대신 SSLCertificateFile 파일에 서버 인증서부터 루트 방향으로 중간 인증서를 이어 붙이면 된다. 설치 후에는 apachectl configtest로 문법을 확인하고 재시작한다.

  • https://hiseon.me/server/apache-ssl-setting/
  • https://cert.crosscert.com/apache-%EC%84%A4%EC%B9%98-%EB%A9%94%EB%89%B4%EC%96%BC/
  • https://fliedcat.tistory.com/72
  • https://www.comodossl.co.kr/certificate/ssl-installation-guides/Apache-privatekey-crt.aspx
  • https://www.ucert.co.kr/wiki/w/Apache_%EB%A9%80%ED%8B%B0%EC%9D%B8%EC%A6%9D%EC%84%9C%EC%84%A4%EC%B9%98

리눅스에서 방화벽 열렸는지 확인하기

포트가 막혀 있을 때는 서버 안과 밖을 나눠서 확인한다.

  • 서버 안: ss -tlnp(또는 netstat -tlnp)로 프로세스가 해당 포트에서 LISTEN 중인지 본다. 127.0.0.1에만 바인딩되어 있으면 외부에서 접근할 수 없다.
  • 방화벽 규칙: firewalld를 쓰는 배포판은 firewall-cmd --list-all, iptables를 직접 쓰면 iptables -L -n으로 허용된 포트를 확인한다.
  • 서버 밖: 다른 호스트에서 nc -zv <host> <port>나 telnet으로 연결을 시도한다. 여기서도 막히면 클라우드 보안 그룹이나 네트워크 장비의 정책도 확인해야 한다.

  • https://suzxc2468.tistory.com/165
  • https://server-engineer.tistory.com/840
참고한 자료외부 출처 2

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다