2016-11-11 30 views
2

OpenSSLを使用して第三者アプリケーションを作成して、組み込みシステム用の新しい証明書失効リストを作成しています。ここ は私のコードは、私がこれを実行すると、それはCRLファイルを作成し、私はopensslコマンドを使用してそれを読むしようとすると、それはOpenSSLで新しいCRLを作成する際の問題

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: 

のロードに失敗しかし、私は同じことをコンパイルして実行すると

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); 

です私の32ビットのLinux PCでのコードの一部と作成したCRLファイルを開こうとすると、それは

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 

の作品その後は、埋め込まれたファイルシステムに自分の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ページも参照してください(https://www.openssl.org/docs/man1.1.0/apps/crl.html)。 – jww

答えて

0

遅くなりましたが、ついに実現しました。あなたはCRLに署名しませんでした。署名は、2つのアルゴリズムフィールドと実際の署名を入力します。 1.0.1デコードの2つの行Signature Algorithm: itu-tは、紛失/空のOIDがitu-tとなる古いバグ(または少なくとも誤った機能)があります。これは、これがトップアーク0に割り当てられているためです。1.0.2は明らかに厳しくなり、これを捕まえました。

システム上のマニュアルページor on the web hereにつき、X509_CRL_signまたはX509_CRL_sign_ctxと呼んでください。

関連する問題