2016-11-11 2 views
2

OpenSSL을 사용하여 타사 응용 프로그램을 만들어 임베디드 시스템 용 새 인증서 해지 목록을 만듭니다. 내가 이것을 실행하면 는 여기가 CRL 파일을 만들고 내 코드OpenSSL에서 새 CRL을 만드는 문제

crl = X509_CRL_new(); 

    X509_CRL_set_version(crl, CRL_VERSION); 

    X509_NAME *id = X509_NAME_new(); 
    X509_NAME_add_entry_by_txt(id, "C", MBSTRING_ASC, (const unsigned char*) CRL_ISSUER_COUNTRY, -1, -1, 0); 
    X509_NAME_add_entry_by_txt(id, "ST", MBSTRING_ASC, (const unsigned char*) CRL_ISSUER_STATE, -1, -1, 0); 
    X509_NAME_add_entry_by_txt(id, "L", MBSTRING_ASC, (const unsigned char*) CRL_ISSUER_COUNTRY, -1, -1, 0); 
    X509_NAME_add_entry_by_txt(id, "O", MBSTRING_ASC, (const unsigned char*) CRL_ISSUER_ORGANIZATION, -1, -1, 0); 
    X509_NAME_add_entry_by_txt(id, "OU", MBSTRING_ASC, (const unsigned char*) CRL_ISSUER_ORGANIZATIONAL_UNIT, -1, -1, 0); 
    X509_NAME_add_entry_by_txt(id, "CN", MBSTRING_ASC, (const unsigned char*) CRL_ISSUER_COMMON_NAME, -1, -1, 0); 

    X509_CRL_set_issuer_name(crl, id); 

    X509_CRL_set_lastUpdate(crl, tmptm); 

    char filename[50]; 
    strcpy(filename, RW_CRL_LOCATION); 
    strcat(filename, "crl.pem"); 

    fPointer = fopen(filename, "w+"); 
    result = PEM_write_X509_CRL(fPointer, clr); 

이다 나는 그것이하려면 openssl 명령이

OpenSSL 1.0.2d 9 Jul 2015 
[email protected]:/vp/test/crl# 
[email protected]:/vp/test/crl# openssl crl -in crl.pem -noout -text 
unable to load CRL 
1995560144:error:0D0C40D8:asn1 encoding routines:c2i_ASN1_OBJECT:invalid object encoding:a_object.c:283: 
1995560144:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:694:Field=algorithm, Type=X509_ALGOR 
1995560144:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:694:Field=sig_alg, Type=X509_CRL_INFO 
1995560144:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:694:Field=crl, Type=X509_CRL 
1995560144:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83: 

를로드 할 수 없습니다 사용하여 읽으려고하지만 나는 컴파일 할 때와 동일하게 실행 내 32 비트 리눅스 PC의 코드 조각은이

OpenSSL 1.0.1f 6 Jan 2014 
[email protected]:~/openssl-testing/code/crl$ openssl crl -in crl.pem -noout -text 
Certificate Revocation List (CRL): 
    Version 3 (0x2) 
Signature Algorithm: itu-t 
    Issuer: /C=SL/L=SL/O=VIVOPAY/OU=PISCES 
    Last Update: Nov 11 05:44:25 2016 GMT 
    Next Update: NONE 
No Revoked Certificates. 
Signature Algorithm: itu-t 

가 그런 다음 CRL 파일이 포함 된 파일 시스템에 내 PC를 사용하여 만든 복사를 열려고 작동 만든 CRL 파일을 열려고 거기, 괜찮 았어. 그리고 임베디드 시스템에서 생성 된 crl을 PC에 복사하고 열려고 시도했지만 실패했습니다. 누구든지이 문제와 관련하여 도움을받을 수 있습니까?

+0

아마도 32 비트 아키텍처 용으로 코드를 컴파일했을 것입니다. 따라서 PC (64 비트라고 생각합니다)에서는 작동하지 않습니다. – LPs

+0

아아아, 내가 추가 할 것이다. 아니요. 두 아키텍처 모두에서 컴파일되고 테스트되었습니다. – thilinaur

+1

@ThilinaRathnasooriya - *** _이 실제로 *** PEM이면 'file crl.pem'은'ASCII '를 반환합니다. 'binary'를 반환하면 DER을 반환합니다. '-inform' 옵션을'openssl crl -in crl.pem -noout -text'에 추가하십시오. PEM 또는 DER :'-inform DER' 또는'-inform PEM'을 사용하십시오. ['openssl crl' man page] (https://www.openssl.org/docs/man1.1.0/apps/crl.html)도 참조하십시오. – jww

답변

0

늦었지만 드디어 깨달았습니다. 당신은 CRL에 서명하지 않았습니다. 서명은 실제 서명뿐만 아니라 두 알고리즘 필드를 채 웁니다. 1.0.1 디코딩에서 두 줄의 Signature Algorithm: itu-t은 누락 된/비어있는 OID가 itu-t으로 '디코드'되는 오래된 버그 (또는 적어도 오판)입니다. 왜냐하면 그것은 최고 아크 0이 할당 되었기 때문입니다. 1.0.2는 분명히 더 엄격하고이를 잡았습니다.

시스템의 설명서 페이지 or on the web here에 따라 X509_CRL_sign 또는 X509_CRL_sign_ctx으로 전화하십시오.