Hi all:

I have a problem here regarding the .p12 format.

I generated a private key and public key from netscape v4.5 and
issue a certificate using openssl-0.9.3.a.
I can import it to IE4.0 successfully too.
I export the private key and x.509 certificate from netscape with p12 
format.
Then I use openssl-0.9.3a to parse out the private key and certificate.
After that, I use openssl-0.9.3.a to compose a p12 file with same
private key and certificate that I got from the above steps.
Netscape and IE not read my p12 file.

Please help me out about this problem. Attached are my .c file and the p12 
file.


Thanks a lot.


______________________________________________________
Get Your Private, Free Email at http://www.hotmail.com

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/des.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/pkcs12.h>
#include "pkmang.h"
//#include "NSPUSERDB.h"
#include "apps.h"
#define PROG pkcs12_main

EVP_CIPHER *enc;


#define NOKEYS          0x1
#define NOCERTS         0x2
#define INFO            0x4
#define CLCERTS         0x8
#define CACERTS         0x10

int get_cert_chain(X509 *cert, STACK **chain);
int dump_cert_text (BIO *out, X509 *x);
int dump_certs_keys_p12(BIO *out, PKCS12 *p12, char *pass, int passlen, int options);
int dump_certs_pkeys_bags(BIO *out, STACK *bags, char *pass, int passlen, int options);
int dump_certs_pkeys_bag(BIO *out, PKCS12_SAFEBAG *bags, char *pass, int passlen, int 
options);
int print_attribs(BIO *out, STACK *attrlst, char *name);
void hex_prin(BIO *out, unsigned char *buf, int len);
int alg_print(BIO *x, X509_ALGOR *alg);
int cert_load(BIO *in, STACK *sk);

int main()
{
        FILE *fp;
        PKCS12 *p12 = NULL,*pp12=NULL;
        EVP_PKEY* pk=NULL,*pkey;
        SNF_DATABASE *m_pkdb=NULL;
        SNF_PRIKEY *pPriKey=NULL;
        STACK *sk;      
        X509 *x509,*cert;
        char *mykey;
        int len;

        if((fp = fopen("hailong_chen.p12","rb")) == NULL)
        {
                printf("open file error!\n");
                return -1;
        }

        fseek(fp,0,SEEK_END);

        len = ftell(fp);

        fseek(fp,0,SEEK_SET);

        mykey = (char *)malloc(len);

        fread(mykey,len,1,fp);

        fclose(fp);
        d2i_PKCS12(&p12, &mykey, len);

        SSLeay_add_all_algorithms();
        PKCS12_parse(p12,"1234", &pkey, &cert,
                                                                 NULL);

/*      if( !iGetPKDatabase( &m_pkdb, "isafe1"))
        {
                sk=sk_new((int (*)())SNF_PRIKEY_X509_email_cmp);
                m_pkdb=SNF_DATABASE_set(sk,"isafe1");
        }
        
        SavePKtoDatabase(&m_pkdb, cert, pkey, "1234");



        if( NSP_USER_Open("isafe")) return FALSE;


        NSP_USER_Import(cert);

        NSP_USER_Save();

        pPriKey = FindPKbyEmail(m_pkdb, "[EMAIL PROTECTED]");

        if( SNF_ENCRYPT_KEY_decrypt(&pk, pPriKey->key.enc_key, 
ASN1_INTEGER_get(pPriKey->key_type), "1234", 4) == NULL)
        {
                goto end;
        }

*/      if((fp = fopen("hailong_chen1.p12","w")) == NULL)
        {
                printf("open file error!\n");
                return -1;
        }

        pp12 = PKCS12_create("1234", "My Certificate", pkey, cert, NULL, 0,0,0,0,0);
        i2d_PKCS12_fp(fp, pp12);
        PKCS12_free(pp12);
        fclose(fp);

end:
        ;

}

myp12.p12

Reply via email to