글
- Node.js Brotli CVE-2026-111497 패치Node.js 10월 보안 공지가 고친 CVE 10건 중 Brotli 디코더 원격 코드 실행이 실제 악용 목록에 올랐다. 26.12.1, 24.22.1, 22.23.4로 올리고 확인하는 법.
- AI 해킹 시대 서버 보안 패치 우선순위AI가 찾은 취약점이 실제 공격 목록에 올랐다. 2026년 10월 PHP, Node.js, Python, nginx 보안 릴리스 가운데 무엇부터 올릴지 버전과 확인 명령으로 정했다.
- 서버가 뚫렸을 때 SSL 인증서 개인키 교체와 폐기 순서웹 서버에서 공격자 코드가 돌았다면 인증서 개인키도 나갔다고 보고 새 키로 다시 받는다. 이전 인증서 폐기는 새 인증서를 건 다음에 한다.
- Next.js 이미지 최적화 원격 코드 실행 CVE-2026-96889 점검Next.js 16.4.1과 15.5.28이 인증 없는 원격 코드 실행 두 건을 고쳤다. 직접 운영하는 서버라면 next 버전과 실제로 깔린 sharp 버전을 같이 본다.
- PHP2Shell(CVE-2026-109618) 우리 서버 PHP가 패치됐는지 확인하기PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35가 인증 없는 원격 코드 실행 취약점 두 건을 고쳤다. 배포판 패키지는 PHP 버전 번호가 그대로라서 변경 기록으로 확인한다.
- 알림 메일이 스팸함으로 갈 때 SPF, DKIM, DMARC 맞추기SPF와 DKIM이 통과해도 From 도메인과 정렬되지 않으면 DMARC는 실패한다. 발송 서비스를 붙일 때 맞출 곳과 p=none에서 p=reject까지 올리는 순서를 적었다.
- 인증서를 갱신했더니 mTLS가 unsuitable certificate purpose로 실패할 때공인 TLS 인증서에서 클라이언트 인증 용도(clientAuth)가 빠지고 있다. 웹은 멀쩡한데 서버끼리 인증서로 서로를 확인하던 연결만 깨진다.
- CT 로그에서 내 도메인의 모르는 인증서 찾기crt.sh와 Cert Spotter로 내 도메인의 발급 기록을 보고 우리 것인지 가린다. 무단 발급이 의심될 때 폐기를 요청하고 다시 못 받게 막는 순서도 적었다.
- 인증서를 갱신했는데 일부 사용자만 오류가 난다면로드밸런서나 라운드로빈 DNS 뒤 노드 중 일부가 아직 옛 인증서를 내고 있을 수 있다. dig로 노드를 찾고 openssl로 노드마다 serial, 만료일, 지문을 비교하는 법을 적었다.
- 메일 서버 STARTTLS 인증서 점검웹과 같은 인증서 파일을 써도 메일 서버는 포트와 데몬마다 따로 확인해야 한다. openssl s_client -starttls와 curl로 보는 법, MTA-STS와 DANE에서 인증서가 걸리는 곳을 적었다.
- CAA 레코드 설정하고 확인하는 법CAA는 이 도메인에 인증서를 내줄 수 있는 CA를 DNS에 적어 두는 레코드다. 갱신이 갑자기 막혔을 때 어느 이름의 레코드가 걸렸는지 찾는 법과 CA별 값도 적었다.
- DNS 전파 확인하고 기다릴 시간 계산하는 법DNS를 바꾸면 옛 값은 리졸버 캐시에 TTL만큼 남는다. 그래서 기다릴 시간은 계산할 수 있고, dig로 권한 서버와 리졸버를 비교하면 어디까지 바뀌었는지 보인다.
- NET::ERR_CERT_DATE_INVALID 원인과 해결NET::ERR_CERT_DATE_INVALID는 검증하는 쪽의 현재 시각이 인증서 유효기간 밖이라는 뜻이다. 틀린 날짜가 서버 인증서인지, 중간 인증서인지, 기기 시계인지 openssl로 가르는 법.
- ERR_SSL_VERSION_OR_CIPHER_MISMATCH와 ERR_SSL_PROTOCOL_ERROR 해결인증서를 검증하기도 전에 TLS 핸드셰이크에서 끊겼다는 뜻이다. 인증서를 새로 받기 전에 openssl s_client 출력의 마지막 줄로 원인부터 가른다.
- SSL 인증서 유효기간이 47일로 줄어든다SSL/TLS 인증서 최대 유효기간은 2026-03-15부터 200일이고, 2027-03-15에 100일, 2029-03-15에 47일로 줄어든다. CA/B Forum SC-081 일정과 지금 손봐 둘 것을 적었다.
- NET::ERR_CERT_COMMON_NAME_INVALID 원인별 해결NET::ERR_CERT_COMMON_NAME_INVALID는 접속한 도메인이 인증서의 SAN에 없다는 뜻이다. SAN 목록을 직접 보고 원인을 가려 고치는 법을 적었다.
- Let's Encrypt OCSP 종료 후 남은 설정 점검하기Let's Encrypt OCSP 응답기는 2025-08-06에 꺼졌고 폐기 정보는 이제 CRL로만 나온다. 갱신을 막는 Must-Staple 설정과 오탐을 내는 OCSP 검사부터 찾아 지운다.
- Java에서 PKIX path building failed가 날 때unable to find valid certification path to requested target은 JVM이 신뢰 앵커까지 경로를 못 만들었다는 뜻이다. cacerts에 넣기 전에 서버 체인 문제인지 JVM 쪽 문제인지부터 가린다.
- 인증서 만료 알림 직접 만들기외부 서비스 없이 셸 스크립트와 systemd 타이머로 인증서 만료를 감시하고 슬랙으로 알림을 받는다. 감시 서버가 죽었을 때 알아채는 법도 같이 적었다.
- 도메인 만료가 인증서 만료보다 위험한 이유인증서는 만료돼도 다시 받으면 되지만, 도메인은 유예 기간을 넘기면 남에게 넘어갈 수 있다. 만료 뒤 도메인이 거치는 단계와 감시가 어려운 이유를 적었다.
- 고객사 도메인 50개를 엑셀 없이 관리하기에이전시나 호스팅 대행이 쓰는 만료일 엑셀은 만든 날부터 낡는다. 텍스트 파일 한 장과 스크립트로 시작해 cron 알림까지 가는 방법을 적었다.
- Apache와 IIS 인증서 교체 절차Apache는 설정이 파일을 가리키고 IIS는 인증서 저장소에서 꺼내 쓴다. 그래서 교체할 때 빠뜨리는 단계도 서버마다 다르다.
- Let's Encrypt 자동갱신이 실패하는 흔한 이유타이머는 도는데 갱신이 안 되거나, 갱신은 됐는데 옛 인증서가 나갈 때. certbot renew가 조용히 실패하는 원인을 로그 문구로 가려낸다.
- Nginx 인증서 교체와 무중단 리로드Nginx 인증서는 reload로 바꾸면 처리 중인 커넥션이 끊기지 않는다. 바꾸기 전에 확인할 것과, 리로드했는데 옛 인증서가 나갈 때 볼 곳.
- 인증서 만료 사고가 반복되는 이유에릭슨도 Teams도 인증서 만료로 멈췄다. 이 사고는 기술보다 조직 구조에서 되풀이되고, 끊으려면 담당과 감시를 맡기는 방식부터 바꿔야 한다.
- 와일드카드 인증서와 SAN 인증서, 언제 무엇을 쓰나*.example.com 하나로 다 덮을지, 도메인을 하나씩 나열할지. 와일드카드가 못 덮는 이름과 개인키를 여러 서버가 나눠 쓰는 위험을 따져서 고른다.
- 크롬은 되는데 파이어폭스만 SEC_ERROR_UNKNOWN_ISSUER가 나는 이유같은 서버인데 크롬은 열리고 파이어폭스는 SEC_ERROR_UNKNOWN_ISSUER, curl은 unable to get local issuer certificate를 낸다. 클라이언트마다 트러스트 스토어와 빠진 중간 인증서를 채우는 방식이 달라서다.
- NET::ERR_CERT_AUTHORITY_INVALID가 뜰 때같은 화면 뒤에 자기서명 인증서, 사내 CA, 보안 장비, 시계 오차처럼 서로 다른 원인이 있다. 발급자(issuer)부터 보고 원인을 가르는 법과 원인별 처리를 적었다.
- SSL 인증서 만료일 확인하는 법브라우저, openssl, PowerShell로 만료일을 보는 법. 셋이 보는 대상이 서로 달라서 생기는 착각도 같이 적었다.