5

CA1 인증서에 의해 서명 된 클라이언트 인증서 "A"가 있습니다. CA1 인증서는 루트 인증서에 의해 서명됩니다.신뢰할 수있는 내부 CA 인증서를 사용하여 클라이언트 인증서의 유효성을 검사하는 방법은 무엇입니까?

이제 CA1 인증서 (신뢰할 수 있음)와 클라이언트 인증서 (신뢰할 수 없음)를 받았습니다. 유효성 검사를하는 동안 CA1 (신뢰할 수있는)만을 사용하여 클라이언트 인증서의 신뢰 경로를 확인해야합니다. 루트 인증서를 갖고 있지 않습니다.

이 유효성 검사를 수행 할 수 있습니까?

나는 Openssl 1.0.0g 버전 라이브러리를 사용하고 있습니다. 어떤 사람이 그 일을하는 법을 알고 있다면 나와 공유하십시오.

+0

도움이 될 수도 있습니다. http://stackoverflow.com/questions/13295585/openssl-certificate-verification-on-linux – JSuar

+0

2Balamurugan : 죄송합니다. 내가 게시 한 나의 대답에 나는 틀렸다. 나는 그것을 삭제했다. 나는 "openssl verify"의 매개 변수를 확인했고 인증서의 전체 체인을 필요로하는 것처럼 보였다. –

+0

BTW. 질문. 루트 인증서를 오프라인으로 가져와 CA1 인증서에 연결할 수없는 이유 (확인 작업을 올바르게 수행 할 수 없음) CA1 인증서에 액세스 할 수 있지만 루트 인증서에 액세스 할 수없는 경우의 테스트 사례는 무엇입니까? –

답변

2

태그를 부여 했으므로 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 핸드 셰이크가 종료됩니다.