클라이언트에서 인증서 확인을 구현하려고합니다. 저는 항상 SSL Exception: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed after 893ms
을 얻었으며 유효하다고 확신합니다.이 방법으로 google.com을 시도했지만 실패했습니다. 문서 상태 때문에 RejectCertificateHandler 사용하고 있습니다 :Poco를 통해 서버 인증서를 확인할 수 없습니다.
A RejectCertificateHandler is invoked whenever an error occurs verifying the certificate. It always rejects the certificate.
A AcceptCertificateHandler is invoked whenever an error occurs verifying the certificate. It always accepts the certificate. Should be using for testing purposes only.
내가 뭘 잘못하고 있니? 나는이 번들 모든 CA 인증서가없는 맥 OS와 OpenSSL이 내장 된 것을 발견했습니다
Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> pAcceptCertHandler = new Poco::Net::RejectCertificateHandler(true);
Poco::Net::Context::Ptr pContext = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "", Poco::Net::Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
Poco::Net::SSLManager::instance().initializeClient(NULL, pAcceptCertHandler, pContext);
Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), pContext);
std::string path(uri.getPathAndQuery());
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, path, Poco::Net::HTTPMessage::HTTP_1_1);
initializeHttpGetRequest(request);
session.sendRequest(request);
session.setKeepAlive(true);
Poco::Timespan timespan(0, 0, 10, 0, 0);
session.setKeepAliveTimeout(timespan);
Poco::Net::HTTPResponse res;
std::istream & is = session.receiveResponse(res);
responseCode = res.getStatus();
나도'내재 InvalidCertificateHandler' 우리에게 출력을 표시하거나'ConsoleCertificateHandler'를 사용하여 우리에게 출력을 표시하는 것이 좋습니다 : 나는 컨텍스트를 만들 때
는 지금은이 방법을 사용합니다. 이것은 우리가 당신의 질문에 대답하는 데 도움이 될 것입니다. 어느 쪽이든, 문제는 검증 단계에 있으며 사용하는 암호 목록 일 수 있습니다. – kobigurk
'경고 : 인증서 확인에 실패했습니다. ---------------------------------------- 발급 기관 이름 :/C = US/O = DigiCert Inc/OU = www.digicert.com/CN = DigiCert High Assurance EV 루트 CA/C = IE/O = 볼티모어/OU = CyberTrust/CN = 볼티모어 사이버 트러스트 루트 ' 인증서에서 오류를 생성했습니다. 로컬 발급자 인증서를 얻을 수 없습니다. – Thunder
아마도 컴퓨터에 신뢰할 수있는 루트 권한으로 Digicert가 없을 것입니다. 우리가 말하는 Windows라면'certmgr.msc'를 살펴보십시오. 나는 그것이 당신의 문제라고 믿습니다. – kobigurk