2012-03-12 3 views
0

SSL 지원이있는 gSOAP를 사용하여 웹 서비스를 개발하고 있습니다. gSOAP 문서로 제공되는 코드를 복사하면됩니다. 일부 기능을 추가하려고하면 많은 어려움이 있습니다! OpenSSL 라이브러리에 대한 지식이 없으므로 도움을 청하기 위해 여기 있습니다. 클라이언트에서 보낸 인증서를 확인하려면 CRL 목록을 추가해야합니다. 내가 어떻게 해? 그것은 매번 호출되는 클라이언트가 인증을 시도gSoap + SSL : CRL 및 인증서 이름 확인

int servlet_fsslverify(int ok, X509_STORE_CTX *store) 
{ 
    ok = 1; 
    char buf[1024]; 
    X509 *cert = X509_STORE_CTX_get_current_cert(store); 
    fprintf(stderr, "SSL verify error or warning with certificate at depth %d: %s\n", 
     X509_STORE_CTX_get_error_depth(store), 
     X509_verify_cert_error_string(X509_STORE_CTX_get_error(store))); 
    X509_NAME_oneline(X509_get_issuer_name(cert), buf, sizeof(buf)); 
    fprintf(stderr, "certificate issuer %s\n", buf); 
    X509_NAME_oneline(X509_get_subject_name(cert), buf, sizeof(buf)); 
    fprintf(stderr, "certificate subject %s\n", buf); 
    /* Note: return 1 to continue, but unsafe progress will be terminated by OpenSSL */ 
    return ok; 
} 

: 또한, 나는이 하나 soap.fsslverify 가리키는 기능을 변경했습니다. 보시다시피, 클라이언트의 인증서 필드를 확인할 수 있지만 CRL에 특정 인증서가 있는지 여부를 확인하는 방법을 알지 못합니다. 그게 전부입니다. 모두에게 많은 감사를 드리겠습니다.

답변

0

나는 인터넷에서 해결책을 찾았습니다! 죄송합니다. 어디에서 기억할지 모르겠지만 다시 찾아 보겠습니다.이 게시물을 편집합니다. 서버 컨텍스트 생성 직후 삽입 할 코드.

X509_STORE *store; 
store = SSL_CTX_get_cert_store(ServicePtr->ctx); 
if (store) 
{ 
    X509_LOOKUP *lookup; 
    X509_STORE_set_flags(store, X509_V_FLAG_CRL_CHECK); 
    lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file()); 
    if (lookup) 
    { 
     if (X509_load_crl_file(lookup, globals.pki_crl, X509_FILETYPE_ASN1) < 1) 
     { 
      std::cerr << "CRL not found or invalid" << std::endl; 
     } 
    } 
    else 
    { 
     std::cerr << "Unable to create a valid lookup" << std::endl; 
    } 
} 
else 
{ 
    std::cerr << "Unable to get X509_STORE" << std::endl; 
}