Hello,

I'm having trouble converting a PKCS12 container to PEM format using 
PKCS12_parse(). Instead of getting all certificates in the container, I only 
get one.

Our organization sources SSL keys and certificates in PKCS12 format, but I 
want to use them with libcurl, which calls 
SSL_CTX_use_certificate_chain_file() and therefore requires converting the 
PKCS12 container into two PEM files (one for certificates and one for the 
key.)

The openssl pkcs12 tool correctly finds all three certificates, but for 
security and robustness I'd rather do it all in the application if possible.

The problem I'm having is that when I call PKCS12_parse(), I get only a single 
certificate, even though the container contains a three-certificate chain. 
The code I'm doing looks like this:

    in_bio = BIO_new_mem_buf(rare->pkcs12, rare->pkcs12_len);
    assert(in_bio != NULL);
    p12 = d2i_PKCS12_bio(in_bio, NULL);
    assert(p12 != NULL);
    BIO_free(in_bio);
    free(rare->pkcs12);
    assert(PKCS12_parse(p12, STS_PKCS_PASSWORD, &pkey, &cert, &ca));
    assert(pkey == NULL);
    assert(cert == NULL);
    assert(sk_X509_num(ca) > 1); // <- This fails.

A sample PKCS12 certificate in question is attached. I look forward to any 
help the list can provide.

Thanks,

--Ian Turner

-- 
Forums for Amanda discussion: http://forums.zmanda.com/

Attachment: original.pkcs12
Description: Binary data

Reply via email to