
웹 사이트가 해당 도메인에 유효한 자체 서명되지 않은 인증서를 사용하고 있는지 테스트하는 스크립트를 만들려고 합니다. 즉, 브라우저에 경고가 표시되지 않습니다.
나는 시도했다
openssl s_client -connect www.example.com:443 -servername www.example.com
인증서가 도메인에 유효하지 않은 경우에도 다음과 같은 결과가 나타납니다.
반환 코드 확인: 0(확인)
내가 어떻게 그것을 달성할 수 있는지 아시나요?
답변1
openssl이 실제로 인증서를 확인하도록 하려면 그렇게 하도록 지시해야 합니다.
1. 인증서의 호스트 이름이 원하는 이름과 일치하는지 확인
이에 대한 특정 옵션이 있습니다 -verify_hostname
. 아래 명령에서는 serverfault.com에서 사용하지만 호스트 이름 example.com을 확인하고 있습니다.
[jenny@temeraire crt] $ openssl s_client -verify_hostname example.com -connect serverfault.com:443
CONNECTED(00000003)
[...]
Verify return code: 62 (Hostname mismatch)
---
DONE
그러나 프로세스 자체의 반환 코드는 여전히 0이므로 테스트에서 반환 코드를 사용하는 대신 출력을 살펴봐야 합니다.
2. 인증서가 신뢰할 수 있는 CA에서 발급된 것인지 확인
확인 실패가 보장되도록 다시 확인할 신뢰할 수 있는 CA 목록을 제공하지 않고 serverfault.com 웹 사이트에 대해 실행했습니다.
[jenny@galactica tmp] $ openssl s_client -verify 2 -connect serverfault.com:443
[...]
Verify return code: 27 (certificate not trusted)
그러나 명령이 실제로 제대로 실행되었기 때문에 openssl은 여전히 반환 코드 0을 제공하므로 스크립트 작성이 더 어렵습니다.
이를 수행하는 더 좋은 방법은 먼저 인증서를 다운로드한 다음 openssl verify
이에 대해 실행하는 것입니다.
[jenny@galactica tmp] $ openssl verify selfsignedcert.pem; echo $?
selfsignedcert.pem: C=SE, O="Nevermind", CN=foo.example.com
error 18 at 0 depth lookup: self signed certificate
18
보시다시피 "자체 서명된 인증서"를 의미하는 반환 코드 18을 받았습니다. 다른 오류 코드도 많이 있습니다. verify
자세한 내용은 매뉴얼 페이지를 확인하세요 .