2009-02-04 3 views
7

OpenSSL 라이브러리의 X509 인증서 클래스로 작업 중이며 "키 사용"확장 프로그램을 쿼리해야합니다. OpenSSL을 사용하여 X509 인증서의 확장 프로그램 쿼리

은 OpenSSL의 베이퍼웨어 "문서"를 포기 후 일부는 샷 - 인 - 더 - 어둠 웹 검색 결국 내가

X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx) 

과 objects.h 헤더를 통해 검색을 호출하는 데 필요한 적절한 NID 밝혀 것으로 나타났다.

문제는이 호출이 void에 대한 포인터를 반환한다는 것입니다.이 포인터는 어떤 확장 프로그램이 요청했는지에 따라 다양한 구조체를 가리킬 수 있습니다.

아무 것도 문서화 된 것으로 보이지 않으므로 함수가 반환하는 구문을 파싱하는 방법을 파악할 방법이 없습니다.

필자가 직접 알아낼 수있는 것들 (함수 프로파일, 파일의 출처 등)을 나열하는 대신, 실제로 이것에 대해 이야기하는 문서를 누군가가 가리킬 수 있습니까?

+1

나는 대답이 없지만 다음과 같은 문서 품질에 대한 감정을 2 등 할 것입니다. OpenSSL ... 나는 지금도 (지금 막 시작한) 작업 중이며 단순한 작업 이상으로 예제 나 문서를 찾으려는 끔찍한 일을합니다 ... 나는 당신의 고통을 느낍니다. – Nick

+1

API를 사용하는 방법을 알아내는 유일한 방법은 명령 줄 도구 (소스)를 사용하고 코드를 해킹 (필요하지 않은 명령 줄에 매개 변수를 주석 처리)하고 추적하는 것입니다. 거기에서 나는 간격을 메우기 위해 API "docs"를 사용할 수있었습니다. – Joe

답변

5

키 사용을 읽을 수있는 가장 쉬운 솔루션은

X509* x509_cert = ... 
// without X509_check_ca x509_cert->ex_kusage always returns 0 (no idea why) 
int ca = X509_check_ca(x509_cert); 
unsigned long usage = x509_cert->ex_kusage; 

결과 값이 opensc/pkcs15-init.h

SC_PKCS15INIT_X509_DIGITAL_SIGNATURE  0x0080UL 
SC_PKCS15INIT_X509_NON_REPUDIATION  0x0040UL 
SC_PKCS15INIT_X509_KEY_ENCIPHERMENT  0x0020UL 
SC_PKCS15INIT_X509_DATA_ENCIPHERMENT  0x0010UL 
SC_PKCS15INIT_X509_KEY_AGREEMENT   0x0008UL 
SC_PKCS15INIT_X509_KEY_CERT_SIGN   0x0004UL 
SC_PKCS15INIT_X509_CRL_SIGN    0x0002UL 

에 정의되어 나는를 찾아 그 soultion에 온 것 같다 다음 코드는 openssl 소스 파일입니다.

/* Handle key usage */ 
if((usage=X509_get_ext_d2i(x, NID_key_usage, NULL, NULL))) { 
    if(usage->length > 0) { 
     x->ex_kusage = usage->data[0]; 
     if(usage->length > 1) 
     x->ex_kusage |= usage->data[1] << 8; 
    } else x->ex_kusage = 0; 
    x->ex_flags |= EXFLAG_KUSAGE; 
    ASN1_BIT_STRING_free(usage); 
} 
+0

내'x509.h'에는'ex_kusage'를 포함하여 X509 구조체의 많은 요소에 대해'/ * 다양한 확장자 값의 사본을 포함합니다 * /'라는 경고가 포함되어 있습니다. 아마도 당신이 그 함수를 호출 할 때까지 그것이 0 인 이유 일 겁니다. – chacham15

+0

'ex_flags'의 값을 검사해야하는데'ex_kusage'와'ex_xkusage'를 설정 한'EXFLAG_SET'이 있고'X509_check_ca'를 호출 할 필요가 없다면'v3_purp.c'를 검사 할 수 있습니다 – bikram990

관련 문제