OpenSSL이 443 포트에서 URL의 인증서 체인을 무작위로 확인하지 못하여 모든 인스턴스 포트를 확인할 수 있음

OpenSSL이 443 포트에서 URL의 인증서 체인을 무작위로 확인하지 못하여 모든 인스턴스 포트를 확인할 수 있음

나는 헤매고 있기 때문에 누군가가 나를 도울 수 있기를 바랍니다. 우리 팀은 서비스에서 중간 인증서 누락 문제로 어려움을 겪고 있습니다. 저는 인증서 체인이 완전한지 확인하기 위해 트래픽이 많은 모든 서비스 URL을 하나씩 지속적으로 테스트하는 스크립트를 작성하는 임무를 맡았습니다. OpenSSL을 실행하고 출력을 구문 분석하는 C# 프로그램을 작성했습니다. 각 URL에서 실행한 OpenSSL 명령은 다음과 같습니다.

"openssl.exe s_client -showcerts -servername " + uri + " -verify_hostname " + uri + " -connect " + uri +":" + port

또는

openssl.exe s_client -showcerts -servername www.euro-example-01.com -verify_hostname www.euro-example-01.com -connect www.euro-example-01.com:443

포트는 기본적으로 443이며 99%의 시간 동안 사용됩니다. OpenSSL이 을 반환한 경우 “Verify return code: 21 (unable to verify the first certificate)”중간 인증서가 누락되었음을 알 수 있으며 경고가 발생합니다. 또한 OpenSSL은 이를 확인할 수 있도록 체인을 출력합니다. 이는 incomplete-chain.badssl.com과 같은 사이트를 테스트할 때 작동했습니다.

이제 클라우드에서 지속적으로 실행되고 있으며 가끔씩 경고가 표시됩니다. 그러나 서비스 엔지니어는 인스턴스 포트를 사용하여 실패한 URL의 각 서버를 여러 번 확인하고 찾을 것입니다.실패한 사례 0건. 우리는 라운드 로빈 로드 밸런싱을 사용하므로 이러한 개별 서버 중 적어도 하나가 443 실패의 원인이 될 것이라고 예상하면 안 됩니까? :443 실패 사례의 OpenSSL 로그에는 체인에 인증서가 하나만 표시되어 있으며 SSLLabs와 같은 사이트에서도 중간 인증서가 누락되었음을 확인했습니다.

엔지니어가 문제가 있는 엔드포인트를 재부팅하면 전체 체인이 발견되고 중간 항목 누락에 대한 경고가 사라집니다.

아마도 가장 이상한 부분은 약 160개의 다른 URL이 아닌 4개의 URL만 테스트하기 위해 별도의 스크립트를 설정했다는 것입니다. 어제 30분 동안 euro-example-01.com:443원본 스크립트에서 12번 테스트되었으며 그 중 6번이 실패했습니다. 동일한 30분 동안 새롭고 더 작은 테스트 크기의 스크립트를 euro-example-01.com:44312번 테스트하고 12번 모두 통과했습니다. 두 스크립트가 서로 다른 서버에 접속했을 수도 있지만 제가 보기에는 의심스럽습니다.

내가 말했듯이, 우리는 왜 이런 일이 일어나는지 알 수 없습니다. 서비스 엔지니어에게 로드 밸런서를 확인하라고 했더니 제대로 작동한다고 합니다. 우리는 테스트가 실패하도록 촉발하는 패턴을 찾지 못했습니다. 왜 이런 일이 일어나는지 아는 사람이 있습니까? 또는 :443을 사용하여 테스트할 때 어떤 인스턴스 포트가 히트되고 있는지 알 수 있는 방법이 있습니까? :443 대신 인스턴스 포트에 대한 테스트로 변경해야 할 수도 있지만 인스턴스 수가 정기적으로 변경되고 그 수가 많습니다.

당신이 줄 수 있는 도움에 미리 감사드립니다!

tl;dr: URL의 443 포트는 중간 인증서를 반환하지 않지만 해당 URL에 대한 개별 서버를 확인할 때 중간 인증서가 항상 발견됩니다.

관련 정보