>       From: owner-openssl-us...@openssl.org On Behalf Of Ryan Smith
>       Sent: Friday, 02 July, 2010 18:31

>       I have written a FIPS-1.1.2 compliant (OpenSSL 0.9.7m) application 
> that validates certificates that are read in from files.  It also loads 
> the CA certificates and corresponding CRLs from files.  I am trying to 
> determine any limitations with loading large CRLs (~200-250 MB) and to 

Not your actual problem but IMNVHO any CA that needs to issue CRLs 
anywhere near that large should not be trusted in the first place.

> characterize the resulting performance.  I did not have any problem 
> using CRLs that are ~~100MB in size or smaller.  However with the ~200MB
CRL, 
> I get the following error [in PEM_read_bio_X509_CRL]:

>       1418976:error:0D078064:asn1 encoding routines:ASN1_ITEM_EX_D2I:aux
error:tasn_dec.c:407:Type=X509_CRL_INFO
>       1418976:error:0D08303A:asn1 encoding
routines:ANS1_TEMPLATE_D2I:nested asn1 error:tasn_dec.c:567:Field=crl,
Type=X509_CRL
>       1418976:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1
lib:pem_oth.c:82:

The only likely cause I see is the call to asn1_enc_save (line 397 in
0.9.7m).
That needs to allocate enough memory to copy the entire DER, and would fail 
if the heap aka arena does not have sufficient available (contiguous) space.

>       The certificates and ~200MB CRL in question are all validated
successfully 
> using the OpenSSL command line
>       openssl verify -CAfile <cafile> -crl_check <certificates>
        
1. I wouldn't trust that definitely means no error, without checking. I have
seen 
some commandline logic suppress errors it thinks are 'irrelevant' or
'unimportant'.

2. That's definitely a different executable, and may have been linked
differently 
or have a different memory usage pattern. Does your program
CRYPTO_set_mem_functions 
or CRYPTO_malloc_debug_init ? Do you have lots of other dynamic space
allocated, 
or had space previously allocated and free'd in a way that leaves
fragmentation?
Does your program run in an environment that has a (stricter) quota on
memory?

2a. It looks to me like PEM_read_bio uses BUF_MEM_grow in a way that may
fragment.
Can you try, just before PEM_read__CRL, malloc'ing and free'ing at least two
and 
I think three blocks of the size of the DER that will be implictly read plus
some 
slop, say (filesize-60)/4*3+100 assuming the file contains only the PEMmed
CRL? 

Hmmm. These particular items (CRLs) will not be reencoded, so the enc_save 
looks unnecessary. It might be nice if this were somehow optional; as above,

I don't think CRLs should be so big this is an issue, but some other things 
using (I assume) the same ASN1 mechanism like PKCS7 and mime reasonably
might.



______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to