태그를 부여 했으므로 ssl-certificate
태그를 사용 했으므로 서버 인증 또는 클라이언트 인증서 유효성 검사를위한 SSL 연결 중에 이러한 유효성 검사가 필요하다고 가정합니다.
OpenSSL API SSL_CTX_set_verify을 사용하여 확인 콜백을 설정하면이를 쉽게 수행 할 수 있습니다.
요점은 인증서 확인 중에 오류가 발생할 때마다이 콜백이 호출되므로 루트를 찾을 수없는 경우이 콜백은 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
오류와 함께 호출됩니다. 지금까지 확인 된 인증서의 세부 정보를 얻을 수있는 X509_STORE_CTX *
에 액세스 할 수도 있습니다. 이 메커니즘을 사용하면 코드에 적절한 논리를 구현하여 최종 엔터티 및 중간 CA 인증서가 올바른지 확인할 수 있으며 유효하다고 판단되면 콜백에서 성공을 반환 할 수 있습니다. 그러면 콜백에서 OpenSSL에 신호를 보내 유효성 검사를 계속할 수 있습니다 검증에 실패하지 않고. 이 OpenSSL 문서에서
추가 사항은 :
verify_callback 함수는 SSL_VERIFY_PEER 플래그가 설정 될 때의 동작을 제어하기 위해 사용된다. 응용 프로그램에서 제공해야하며 두 가지 인수를받습니다. preverify_ok는 해당 인증서의 확인이 통과되었는지 (preverify_ok = 1) 또는 아닌지 (preverify_ok = 0)를 나타냅니다. x509_ctx는 인증서 체인 확인에 사용되는 전체 컨텍스트에 대한 포인터입니다.
인증서 체인은 가장 깊은 중첩 수준 (루트 CA 인증서)부터 시작하여 검사되고 피어 인증서까지 작동합니다. 각 레벨에서 서명 및 발급자 속성이 확인됩니다. 확인 오류가 발견되면 x509_ctx에 오류 번호가 저장되고 preverify_ok = 0을 사용하여 verify_callback이 호출됩니다. X509_CTX_store_ * 함수를 적용하여 verify_callback은 해당 인증서를 찾고 추가 단계를 수행 할 수 있습니다 (예 참조). 인증서에 대해 오류가 발견되지 않으면 다음 단계로 진행하기 전에 verify_callback이 preverify_ok = 1로 호출됩니다.
verify_callback의 반환 값은 추가 확인 프로세스의 전략을 제어합니다. verify_callback이 0을 반환하면 확인 프로세스가 "확인 실패"상태로 즉시 중지됩니다. SSL_VERIFY_PEER가 설정되면 확인 실패 경고가 피어로 전송되고 TLS/SSL 핸드 셰이크가 종료됩니다. verify_callback이 1을 반환하면 확인 프로세스가 계속됩니다. verify_callback이 항상 1을 반환하면 TLS/SSL 핸드 셰이크가 확인 실패와 관련하여 종료되지 않으며 연결이 설정됩니다. 그러나 호출 프로세스는 SSL_get_verify_result (3)를 사용하거나 verify_callback에서 관리하는 자체 오류 저장소를 유지 관리하여 마지막 검증 오류의 오류 코드를 검색 할 수 있습니다.
verify_callback을 지정하지 않으면 기본 콜백이 사용됩니다.반환 값은 preverify_ok와 동일하므로 SSL_VERIFY_PEER가 설정되어 있으면 확인 실패로 인해 경고 메시지와 함께 TLS/SSL 핸드 셰이크가 종료됩니다.
출처
2013-03-03 07:22:15
Jay
도움이 될 수도 있습니다. http://stackoverflow.com/questions/13295585/openssl-certificate-verification-on-linux – JSuar
2Balamurugan : 죄송합니다. 내가 게시 한 나의 대답에 나는 틀렸다. 나는 그것을 삭제했다. 나는 "openssl verify"의 매개 변수를 확인했고 인증서의 전체 체인을 필요로하는 것처럼 보였다. –
BTW. 질문. 루트 인증서를 오프라인으로 가져와 CA1 인증서에 연결할 수없는 이유 (확인 작업을 올바르게 수행 할 수 없음) CA1 인증서에 액세스 할 수 있지만 루트 인증서에 액세스 할 수없는 경우의 테스트 사례는 무엇입니까? –